From 0d3b3ffd1e5c143af8725fdee808101f626f683d Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Mon, 12 Mar 2012 21:51:50 +0100 Subject: [PATCH 1/3] Improve coverage analysis --- IntegrationTest.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/IntegrationTest.py b/IntegrationTest.py index 440593f5..bb62fa12 100644 --- a/IntegrationTest.py +++ b/IntegrationTest.py @@ -185,10 +185,12 @@ class IntegrationTest: else: uncoveredApis.add( verb + " " + currentApi ) - if len( uncoveredMethods ) != 0 or len( uncoveredApis ) != 0: - print - print "Not covered (" + str( len( uncoveredMethods ) + len( uncoveredApis ) ) + "):" + print + if len( uncoveredMethods ) != 0: + print "Not covered (" + str( len( uncoveredMethods ) ) + "):" print "\n".join( sorted( uncoveredMethods ) ) + if len( uncoveredApis ) != 0: + print "Not implemented (" + str( len( uncoveredApis ) ) + "):" print "\n".join( sorted( uncoveredApis ) ) def testAuthenticatedUserDetails( self ): From 366ca58ca004b9129f9d435db8204ce0f5bc57c3 Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Mon, 12 Mar 2012 22:08:22 +0100 Subject: [PATCH 2/3] PullRequest.is_merged and PullRequest.merge --- IntegrationTest.py | 7 +++++++ ReferenceOfApis.md | 4 ++-- github/GithubObjects.py | 8 +++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/IntegrationTest.py b/IntegrationTest.py index bb62fa12..61573f2c 100644 --- a/IntegrationTest.py +++ b/IntegrationTest.py @@ -481,6 +481,13 @@ class IntegrationTest: k.delete() self.printList( "Keys", u.get_keys(), lambda k: k.title ) + def testMergePullRequest( self ): + r = self.g.get_user().get_repo( "TestPyGithub" ) + p = r.get_pull( 26 ) + assert not p.is_merged() + p.merge() + assert p.is_merged() + def testNamedUserDetails( self ): u = self.g.get_user( "jacquev6" ) print u.login, "(" + u.name + ") is from", u.location diff --git a/ReferenceOfApis.md b/ReferenceOfApis.md index 242c91f7..8230f5fd 100644 --- a/ReferenceOfApis.md +++ b/ReferenceOfApis.md @@ -343,8 +343,8 @@ API `/repos/:user/:repo/pulls/:id/files` API `/repos/:user/:repo/pulls/:id/merge` ======================================== -* GET: (TODO) -* PUT: (TODO) +* GET: `PullRequest.is_merged` +* PUT: `PullRequest.merge` API `/repos/:user/:repo/pulls/comments/:id` =========================================== diff --git a/github/GithubObjects.py b/github/GithubObjects.py index 51deea5f..8906c646 100644 --- a/github/GithubObjects.py +++ b/github/GithubObjects.py @@ -423,6 +423,10 @@ PullRequestComment = GithubObject( Deletable(), ) +def __pullRequestIsMerged( r ): + return r._github._statusRequest( "GET", r._baseUrl + "/merge", None, None ) == 204 +def __mergePullRequest( r, **data ): + r._github._statusRequest( "PUT", r._baseUrl + "/merge", None, data ) PullRequest = GithubObject( "PullRequest", BaseUrl( lambda obj: obj._repo._baseUrl + "/pulls/" + str( obj.number ) ), @@ -447,6 +451,8 @@ PullRequest = GithubObject( ElementGetable( [ "id" ], [], __modifyAttributesForObjectsReferingReferedRepo ), ElementCreatable( [ "body", "commit_id", "path", "position" ], [], __modifyAttributesForObjectsReferingReferedRepo ), ), + MethodFromCallable( "is_merged", [], [], __pullRequestIsMerged, SimpleTypePolicy( "bool" ) ), + MethodFromCallable( "merge", [], [ "commit_message" ], __mergePullRequest, SimpleTypePolicy( None ) ), ) RepositoryKey = GithubObject( @@ -588,7 +594,7 @@ Repository._addAttributePolicy( SeveralAttributePolicies( [ ), ExternalListOfObjects( "pulls", "pull", PullRequest, ListGetable( [], [ "state" ], __modifyAttributesForObjectsReferingRepo ), - ElementGetable( [ "id" ], [], __modifyAttributesForObjectsReferingRepo ), + ElementGetable( [ "number" ], [], __modifyAttributesForObjectsReferingRepo ), ElementCreatable( [ "title", "body", "base", "head" ], [], __modifyAttributesForObjectsReferingRepo ), ), ] ) ) From 2dd71f3777b87f2ba61cb20d2c67f10401e3eb2c Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Mon, 12 Mar 2012 22:11:40 +0100 Subject: [PATCH 3/3] Restore test coverage --- github/Github.UnitTest.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/github/Github.UnitTest.py b/github/Github.UnitTest.py index 9a8bc589..0c8708b5 100644 --- a/github/Github.UnitTest.py +++ b/github/Github.UnitTest.py @@ -91,4 +91,16 @@ class TestCase( unittest.TestCase ): o = self.g.get_organization( "ooo" ) u.get_organization_events( o ) + def testMergePullRequest( self ): + self.requester.expect.dataRequest( "GET", "/user", None, None ).andReturn( { "login": "xxx" } ) + self.requester.expect.dataRequest( "GET", "/repos/xxx/yyy", None, None ).andReturn( { "name": "yyy", "owner": { "login": "xxx" } } ) + self.requester.expect.dataRequest( "GET", "/repos/xxx/yyy/pulls/42", None, None ).andReturn( { "number": 42 } ) + self.requester.expect.statusRequest( "GET", "/repos/xxx/yyy/pulls/42/merge", None, None ).andReturn( 404 ) + self.requester.expect.statusRequest( "PUT", "/repos/xxx/yyy/pulls/42/merge", None, {} ).andReturn( 204 ) + self.requester.expect.statusRequest( "GET", "/repos/xxx/yyy/pulls/42/merge", None, None ).andReturn( 204 ) + p = self.g.get_user().get_repo( "yyy" ).get_pull( 42 ) + self.assertFalse( p.is_merged() ) + p.merge() + self.assertTrue( p.is_merged() ) + unittest.main()