From 408801e6b58487b1072ba132be28a9f09b5c993d Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Sun, 4 Mar 2012 08:22:25 +0000 Subject: [PATCH 1/8] Improve integration test --- IntegrationTest.py | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/IntegrationTest.py b/IntegrationTest.py index b3e03ad2..b8f5098b 100644 --- a/IntegrationTest.py +++ b/IntegrationTest.py @@ -99,7 +99,7 @@ class IntegrationTest: tests = argv self.runTests( tests, record ) - if not record: + if self.succeeded: self.analyseCoverage() def prepareRecord( self, test ): @@ -107,8 +107,8 @@ class IntegrationTest: try: import GithubCredentials self.g = Github( GithubCredentials.login, GithubCredentials.password ) - file = open( self.__fileName( test ), "w" ) - httplib.HTTPSConnection = lambda *args, **kwds: RecordingHttpsConnection( file, *args, **kwds ) + self.__file = open( self.__fileName( test ), "w" ) + httplib.HTTPSConnection = lambda *args, **kwds: RecordingHttpsConnection( self.__file, *args, **kwds ) except ImportError: raise RecordReplayException( textwrap.dedent( """\ Please create a 'GithubCredentials.py' file containing:" @@ -118,8 +118,9 @@ class IntegrationTest: def prepareReplay( self, test ): self.avoidError500FromGithub = lambda: 0 try: - file = open( self.__fileName( test ) ) - httplib.HTTPSConnection = lambda *args, **kwds: ReplayingHttpsConnection( file ) + self.__file = None + self.__file = open( self.__fileName( test ) ) + httplib.HTTPSConnection = lambda *args, **kwds: ReplayingHttpsConnection( self.__file ) self.g = Github( "login", "password" ) except IOError: raise RecordReplayException( "This test has never been recorded. Please re-run this script with argument '--record'" ) @@ -131,6 +132,7 @@ class IntegrationTest: return [ f[ 4: ] for f in dir( self ) if f.startswith( "test" ) ] def runTests( self, tests, record ): + self.succeeded = True for test in tests: print print test @@ -141,10 +143,17 @@ class IntegrationTest: else: self.prepareReplay( test ) getattr( self, "test" + test )() + if not record: + if self.__file.readline(): + raise RecordReplayException( "This test has been changed since last record. Please re-run this script with argument '--record'" ) except RecordReplayException, e: print "*" * len( str( e ) ) print e print "*" * len( str( e ) ) + self.succeeded = False + finally: + if self.__file is not None: + self.__file.close() def analyseCoverage( self ): coveredUrls = dict() @@ -177,6 +186,17 @@ class IntegrationTest: print "Not covered (" + str( len( uncoveredMethods ) ) + "):" print "\n".join( sorted( uncoveredMethods ) ) + def testColaborators( self ): + r = self.g.get_user().get_repo( "TestPyGithub" ) + cobaye = self.g.get_user( self.cobayeUser ) + self.printList( "Collaborators", r.get_collaborators(), lambda m: m.login ) + r.add_to_collaborators( cobaye ) + assert r.has_in_collaborators( cobaye ) + self.printList( "Collaborators", r.get_collaborators(), lambda m: m.login ) + r.remove_from_collaborators( cobaye ) + assert not r.has_in_collaborators( cobaye ) + self.printList( "Collaborators", r.get_collaborators(), lambda m: m.login ) + def testCreateForkForOrganization( self ): o = self.g.get_organization( self.cobayeOrganization ) r = self.g.get_user().get_repo( "TestPyGithub" ) @@ -185,11 +205,15 @@ class IntegrationTest: def testCreateRepoForOrganization( self ): o = self.g.get_organization( self.cobayeOrganization ) + self.printList( "Repos", o.get_repos(), lambda r: r.name ) r = o.create_repo( "CreatedByPyGithub", has_wiki = False ) + self.printList( "Repos", o.get_repos(), lambda r: r.name ) def testCreateRepoForUser( self ): u = self.g.get_user() + self.printList( "Repos", u.get_repos(), lambda r: r.name ) r = u.create_repo( "CreatedByPyGithub", has_wiki = False ) + self.printList( "Repos", u.get_repos(), lambda r: r.name ) def testEditAuthenticatedUser( self ): u = self.g.get_user() @@ -401,9 +425,6 @@ class IntegrationTest: def testOrganizationDetails( self ): o = self.g.get_organization( "github" ) print o.login, "(" + o.name + ") is in", o.location - self.printList( "Public members", o.get_public_members(), lambda m: m.login ) - self.printList( "Members", o.get_members(), lambda m: m.login ) - self.printList( "Repos", o.get_repos(), lambda r: r.name ) def testWatch( self ): r = self.g.get_user( "jacquev6" ).get_repo( "PyGithub" ) From 7cc3b44c69b3b8b70143aeb912b4835a8d08b32b Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Sun, 4 Mar 2012 08:36:38 +0000 Subject: [PATCH 2/8] Commit comments --- IntegrationTest.py | 12 ++++++++++++ github/GithubObjects.py | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/IntegrationTest.py b/IntegrationTest.py index b8f5098b..60ee418e 100644 --- a/IntegrationTest.py +++ b/IntegrationTest.py @@ -197,6 +197,18 @@ class IntegrationTest: assert not r.has_in_collaborators( cobaye ) self.printList( "Collaborators", r.get_collaborators(), lambda m: m.login ) + def testCommentCommit( self ): + r = self.g.get_user().get_repo( "TestPyGithub" ) + c = r.get_commits()[ 0 ] + self.printList( "Comments", c.get_comments(), lambda c: c.body ) + com1 = c.create_comment( "Comment created by PyGithub" ) + self.printList( "Comments", c.get_comments(), lambda c: c.body ) + com2 = c.create_comment( "Comment also created by PyGithub", path = "ReadMe.md", line = 1 ) + self.printList( "Comments", c.get_comments(), lambda c: c.body ) + com2.delete() + com1.edit( body = "Comment edited by PyGithub" ) + self.printList( "Comments", c.get_comments(), lambda c: c.body ) + def testCreateForkForOrganization( self ): o = self.g.get_organization( self.cobayeOrganization ) r = self.g.get_user().get_repo( "TestPyGithub" ) diff --git a/github/GithubObjects.py b/github/GithubObjects.py index 723ded55..e3c9806f 100644 --- a/github/GithubObjects.py +++ b/github/GithubObjects.py @@ -297,8 +297,8 @@ Commit = GithubObject( InternalObjectAttribute( "author", NamedUser ), InternalObjectAttribute( "committer", NamedUser ), ExternalListOfObjects( "comments", "comment", CommitComment, - ListGetable( [], [] ), - ElementCreatable( [ "body", "commit_id", "line", "path", "position" ], [] ), + ListGetable( [], [], __modifyAttributesForObjectsReferingReferedRepo ), + ElementCreatable( [ "body" ], [ "commit_id", "line", "path", "position" ], __modifyAttributesForObjectsReferingReferedRepo ), ), ) From 629668beae870ecf5f3c693ffc9ee27d3e580ae6 Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Sun, 4 Mar 2012 09:12:39 +0000 Subject: [PATCH 3/8] PullRequests --- IntegrationTest.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/IntegrationTest.py b/IntegrationTest.py index 60ee418e..a4635df7 100644 --- a/IntegrationTest.py +++ b/IntegrationTest.py @@ -438,6 +438,28 @@ class IntegrationTest: o = self.g.get_organization( "github" ) print o.login, "(" + o.name + ") is in", o.location + def testPullRequest( self ): + r = self.g.get_user().get_repo( "TestPyGithub" ) + self.printList( "Pull requests", r.get_pulls(), lambda p: p.title ) + p1 = r.create_pull( "Pull request created by PyGithub", "", "master", "BeaverSoftware:master" ) + self.printList( "Pull requests", r.get_pulls(), lambda p: p.title ) + p1.edit( state = "closed" ) + self.printList( "Pull requests", r.get_pulls(), lambda p: p.title ) + p2 = r.create_pull( "Pull request also created by PyGithub", "", "master", "BeaverSoftware:master" ) + self.printList( "Pull requests", r.get_pulls(), lambda p: p.title ) + self.printList( "Files", p2.get_files(), lambda f: f.filename ) + self.printList( "Commits", p2.get_commits(), lambda c: c.commit.message ) + self.printList( "Comments", p2.get_comments(), lambda c: c.body ) + com = p2.create_comment( "Comment created by PyGithub", "e4e84560cb5e87f3c0e9f710dae1ddab0eef487b", "foo.bar", 1 ) + self.printList( "Comments", p2.get_comments(), lambda c: c.body ) + com.edit( body = "Comment edited by PyGithub" ) + self.printList( "Comments", p2.get_comments(), lambda c: c.body ) + sameCom = p2.get_comment( com.id ) + sameCom.delete() + self.printList( "Comments", p2.get_comments(), lambda c: c.body ) + p2.edit( state = "closed" ) + self.printList( "Pull requests", r.get_pulls(), lambda p: p.title ) + def testWatch( self ): r = self.g.get_user( "jacquev6" ).get_repo( "PyGithub" ) u = self.g.get_user() From 827dc06d104c47421fd3ff470ddd842c923c2e84 Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Sun, 4 Mar 2012 09:12:57 +0000 Subject: [PATCH 4/8] RepositoryKeys --- IntegrationTest.py | 11 +++++++++++ github/GithubObjects.py | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/IntegrationTest.py b/IntegrationTest.py index a4635df7..b18490e1 100644 --- a/IntegrationTest.py +++ b/IntegrationTest.py @@ -460,6 +460,17 @@ class IntegrationTest: p2.edit( state = "closed" ) self.printList( "Pull requests", r.get_pulls(), lambda p: p.title ) + def testRepositoryKeys( self ): + r = self.g.get_user().get_repo( "TestPyGithub" ) + self.printList( "Keys", r.get_keys(), lambda k: k.title ) + k = r.create_key( "Key created by PyGithub", "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvborozfBBn2a+JETqPekTWZ1tmYjpfH9wTKFPLjIXQmxXjNye6HVgvi+iMI436RdoLsPEFDe3cjrQ6CJa7KzhRJKNTPh5EZbKI13CXfMGr7V1i3tOokXBFSRQKnDx2dj2hnswqxGUk2jXpgC/KA1q71yqnL45CBlWr50eDpwUIEPnmqSrPpRV/0ZGwIlh4o7+6HwPUF9aBhWj945WSkjZubR4UFWlDZl7ROafpkJHs2cQzaxtmBOZnu6dzmfyro0zJsvhZKD2K6d9eKgpDeKaw5rWr6FeOZPd4xyDaV1gctG0YEui8uuSPKhpcykgREUAFf+vmOKt+yXnOoq8P4vIQ==" ) + self.printList( "Keys", r.get_keys(), lambda k: k.title ) + k.edit( "Key edited by PyGithub", "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvborozfBBn2a+JETqPekTWZ1tmYjpfH9wTKFPLjIXQmxXjNye6HVgvi+iMI436RdoLsPEFDe3cjrQ6CJa7KzhRJKNTPh5EZbKI13CXfMGr7V1i3tOokXBFSRQKnDx2dj2hnswqxGUk2jXpgC/KA1q71yqnL45CBlWr50eDpwUIEPnmqSrPpRV/0ZGwIlh4o7+6HwPUF9aBhWj945WSkjZubR4UFWlDZl7ROafpkJHs2cQzaxtmBOZnu6dzmfyro0zJsvhZKD2K6d9eKgpDeKaw5rWr6FeOZPd4xyDaV1gctG0YEui8uuSPKhpcykgREUAFf+vmOKt+yXnOoq8P4vIQ==" ) + self.printList( "Keys", r.get_keys(), lambda k: k.title ) + sameKey = r.get_key( k.id ) + sameKey.delete() + self.printList( "Keys", r.get_keys(), lambda k: k.title ) + def testWatch( self ): r = self.g.get_user( "jacquev6" ).get_repo( "PyGithub" ) u = self.g.get_user() diff --git a/github/GithubObjects.py b/github/GithubObjects.py index e3c9806f..7d925d51 100644 --- a/github/GithubObjects.py +++ b/github/GithubObjects.py @@ -409,9 +409,9 @@ Repository._addAttributePolicy( ) Repository._addAttributePolicy( SeveralAttributePolicies( [ ExternalListOfObjects( "keys", "key", RepositoryKey, - ListGetable( [], [] ), + ListGetable( [], [], __modifyAttributesForObjectsReferingRepo ), ElementGetable( [ "id" ], [], __modifyAttributesForObjectsReferingRepo ), - ElementCreatable( [ "title", "key" ], [] ), + ElementCreatable( [ "title", "key" ], [], __modifyAttributesForObjectsReferingRepo ), ), ExternalListOfObjects( "collaborators", "collaborator", NamedUser, ListGetable( [], [] ), From 231ae0778e0bebaac3dc87fa8f602c1560b8164f Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Sun, 4 Mar 2012 09:18:40 +0000 Subject: [PATCH 5/8] Team.edit --- IntegrationTest.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IntegrationTest.py b/IntegrationTest.py index b18490e1..a5fa537a 100644 --- a/IntegrationTest.py +++ b/IntegrationTest.py @@ -250,7 +250,8 @@ class IntegrationTest: r = o.get_repo( "TestPyGithub" ) self.printList( "Teams", o.get_teams(), lambda t: t.name ) - t = o.create_team( "PyGithubTesters", permission = "push" ) + t = o.create_team( "PyGithubTesters" ) + t.edit( "PyGithubTesters", permission = "push" ) self.printList( "Teams", o.get_teams(), lambda t: t.name ) u = self.g.get_user( self.cobayeUser ) From 6b89c02872cbcb179d79cb4ceb2436fee02425d0 Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Sun, 4 Mar 2012 09:21:59 +0000 Subject: [PATCH 6/8] Downloads --- IntegrationTest.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/IntegrationTest.py b/IntegrationTest.py index a5fa537a..f5f1b899 100644 --- a/IntegrationTest.py +++ b/IntegrationTest.py @@ -227,6 +227,15 @@ class IntegrationTest: r = u.create_repo( "CreatedByPyGithub", has_wiki = False ) self.printList( "Repos", u.get_repos(), lambda r: r.name ) + def testDownloads( self ): + r = self.g.get_user().get_repo( "TestPyGithub" ) + self.printList( "Downloads", r.get_downloads(), lambda d: d.name ) + d = r.create_download( "DownloadCreatedByPyGithub.txt", 1024 ) + self.printList( "Downloads", r.get_downloads(), lambda d: d.name ) + sameDownload = r.get_download( d.id ) + sameDownload.delete() + self.printList( "Downloads", r.get_downloads(), lambda d: d.name ) + def testEditAuthenticatedUser( self ): u = self.g.get_user() originalName = u.name From e0c04877a9a00766d099251512a8bb512a1d37c2 Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Sun, 4 Mar 2012 09:34:02 +0000 Subject: [PATCH 7/8] AuthenticatedUserDetails --- IntegrationTest.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/IntegrationTest.py b/IntegrationTest.py index f5f1b899..a4cc5030 100644 --- a/IntegrationTest.py +++ b/IntegrationTest.py @@ -186,6 +186,10 @@ class IntegrationTest: print "Not covered (" + str( len( uncoveredMethods ) ) + "):" print "\n".join( sorted( uncoveredMethods ) ) + def testAuthenticatedUserDetails( self ): + u = self.g.get_user() + self.printList( "Organizations", u.get_orgs(), lambda o: o.login ) + def testColaborators( self ): r = self.g.get_user().get_repo( "TestPyGithub" ) cobaye = self.g.get_user( self.cobayeUser ) From 3a83cc0b1e40788483398eb89e3671b91d648251 Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Sun, 4 Mar 2012 09:38:09 +0000 Subject: [PATCH 8/8] RepositoryDetails --- IntegrationTest.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/IntegrationTest.py b/IntegrationTest.py index a4cc5030..690031a9 100644 --- a/IntegrationTest.py +++ b/IntegrationTest.py @@ -474,6 +474,21 @@ class IntegrationTest: p2.edit( state = "closed" ) self.printList( "Pull requests", r.get_pulls(), lambda p: p.title ) + def testRepositoryDetails( self ): + r1 = self.g.get_user().get_repo( "PyGithub" ) + r2 = self.g.get_user().get_repo( "TestPyGithub" ) + self.printList( "Branches", r1.get_branches(), lambda b: b.name ) + self.printList( "Comments", r2.get_comments(), lambda c: c.body ) + r2.get_comment( r2.get_comments()[ 0 ].id ) + self.printList( "Contributors", r1.get_contributors(), lambda m: m.login ) + self.printList( "Forks", r2.get_forks(), lambda r: r.owner.login ) + print "Languages:", r1.get_languages() + self.printList( "Tags", r1.get_tags(), lambda t: t.name ) + self.printList( "Watchers", r1.get_watchers(), lambda m: m.login ) + + r3 = self.g.get_organization( "BeaverSoftware" ).get_repo( "TestPyGithub" ) + self.printList( "Teams", r3.get_teams(), lambda t: t.name ) + def testRepositoryKeys( self ): r = self.g.get_user().get_repo( "TestPyGithub" ) self.printList( "Keys", r.get_keys(), lambda k: k.title )