/ tests / NamedUser.py
NamedUser.py
  1  ############################ Copyrights and license ############################
  2  #                                                                              #
  3  # Copyright 2012 Vincent Jacques <vincent@vincent-jacques.net>                 #
  4  # Copyright 2012 Zearin <zearin@gonk.net>                                      #
  5  # Copyright 2013 Vincent Jacques <vincent@vincent-jacques.net>                 #
  6  # Copyright 2014 Vincent Jacques <vincent@vincent-jacques.net>                 #
  7  # Copyright 2016 Jannis Gebauer <ja.geb@me.com>                                #
  8  # Copyright 2016 Peter Buckley <dx-pbuckley@users.noreply.github.com>          #
  9  # Copyright 2017 Simon <spam@esemi.ru>                                         #
 10  # Copyright 2018 namc <namratachaudhary@users.noreply.github.com>              #
 11  # Copyright 2018 sfdye <tsfdye@gmail.com>                                      #
 12  # Copyright 2018 itsbruce <it.is.bruce@gmail.com>                              #
 13  #                                                                              #
 14  # This file is part of PyGithub.                                               #
 15  # http://pygithub.readthedocs.io/                                              #
 16  #                                                                              #
 17  # PyGithub is free software: you can redistribute it and/or modify it under    #
 18  # the terms of the GNU Lesser General Public License as published by the Free  #
 19  # Software Foundation, either version 3 of the License, or (at your option)    #
 20  # any later version.                                                           #
 21  #                                                                              #
 22  # PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY  #
 23  # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS    #
 24  # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #
 25  # details.                                                                     #
 26  #                                                                              #
 27  # You should have received a copy of the GNU Lesser General Public License     #
 28  # along with PyGithub. If not, see <http://www.gnu.org/licenses/>.             #
 29  #                                                                              #
 30  ################################################################################
 31  
 32  from datetime import datetime, timezone
 33  
 34  from . import Framework
 35  
 36  
 37  class NamedUser(Framework.TestCase):
 38      def setUp(self):
 39          super().setUp()
 40          self.user = self.g.get_user("jacquev6")
 41  
 42      def testAttributesOfOtherUser(self):
 43          self.user = self.g.get_user("nvie")
 44          self.assertEqual(
 45              self.user.avatar_url,
 46              "https://secure.gravatar.com/avatar/c5a7f21b46df698f3db31c37ed0cf55a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
 47          )
 48          self.assertEqual(self.user.bio, None)
 49          self.assertEqual(self.user.blog, "http://nvie.com")
 50          self.assertEqual(self.user.collaborators, None)
 51          self.assertEqual(self.user.company, "3rd Cloud")
 52          self.assertEqual(
 53              self.user.created_at,
 54              datetime(2009, 5, 12, 21, 19, 38, tzinfo=timezone.utc),
 55          )
 56          self.assertEqual(self.user.disk_usage, None)
 57          self.assertEqual(self.user.email, "vincent@3rdcloud.com")
 58          self.assertEqual(self.user.followers, 296)
 59          self.assertEqual(self.user.following, 41)
 60          self.assertEqual(self.user.gravatar_id, "c5a7f21b46df698f3db31c37ed0cf55a")
 61          self.assertFalse(self.user.hireable)
 62          self.assertEqual(self.user.html_url, "https://github.com/nvie")
 63          self.assertEqual(self.user.id, 83844)
 64          self.assertEqual(self.user.location, "Netherlands")
 65          self.assertEqual(self.user.login, "nvie")
 66          self.assertEqual(self.user.name, "Vincent Driessen")
 67          self.assertEqual(self.user.owned_private_repos, None)
 68          self.assertEqual(self.user.plan, None)
 69          self.assertEqual(self.user.private_gists, None)
 70          self.assertEqual(self.user.public_gists, 16)
 71          self.assertEqual(self.user.public_repos, 61)
 72          self.assertEqual(self.user.suspended_at, None)
 73          self.assertEqual(self.user.total_private_repos, None)
 74          self.assertEqual(self.user.twitter_username, "nvie")
 75          self.assertEqual(self.user.type, "User")
 76          self.assertEqual(self.user.url, "https://api.github.com/users/nvie")
 77          self.assertEqual(self.user.node_id, "MDQ6VXNlcjgzODQ0")
 78          self.assertEqual(repr(self.user), 'NamedUser(login="nvie")')
 79  
 80      def testAttributesOfSelf(self):
 81          self.assertEqual(
 82              self.user.avatar_url,
 83              "https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
 84          )
 85          self.assertEqual(self.user.bio, "")
 86          self.assertEqual(self.user.blog, "http://vincent-jacques.net")
 87          self.assertEqual(self.user.collaborators, 0)
 88          self.assertEqual(self.user.company, "Criteo")
 89          self.assertEqual(
 90              self.user.created_at,
 91              datetime(2010, 7, 9, 6, 10, 6, tzinfo=timezone.utc),
 92          )
 93          self.assertEqual(self.user.disk_usage, 17080)
 94          self.assertEqual(self.user.email, "vincent@vincent-jacques.net")
 95          self.assertEqual(self.user.followers, 13)
 96          self.assertEqual(self.user.following, 24)
 97          self.assertEqual(self.user.gravatar_id, "b68de5ae38616c296fa345d2b9df2225")
 98          self.assertFalse(self.user.hireable)
 99          self.assertEqual(self.user.html_url, "https://github.com/jacquev6")
100          self.assertEqual(self.user.id, 327146)
101          self.assertEqual(self.user.location, "Paris, France")
102          self.assertEqual(self.user.login, "jacquev6")
103          self.assertEqual(self.user.name, "Vincent Jacques")
104          self.assertEqual(self.user.owned_private_repos, 5)
105          self.assertEqual(self.user.plan.name, "micro")
106          self.assertEqual(self.user.plan.collaborators, 1)
107          self.assertEqual(self.user.plan.space, 614400)
108          self.assertEqual(self.user.plan.private_repos, 5)
109          self.assertEqual(self.user.private_gists, 5)
110          self.assertEqual(self.user.public_gists, 2)
111          self.assertEqual(self.user.public_repos, 11)
112          self.assertEqual(
113              self.user.suspended_at,
114              datetime(2013, 8, 10, 7, 11, 7, tzinfo=timezone.utc),
115          )
116          self.assertEqual(self.user.total_private_repos, 5)
117          self.assertIsNone(self.user.twitter_username)
118          self.assertEqual(self.user.type, "User")
119          self.assertEqual(self.user.url, "https://api.github.com/users/jacquev6")
120          self.assertEqual(self.user.node_id, "MDQ6VXNlcjMyNzE0Ng==")
121          self.assertEqual(repr(self.user), 'NamedUser(login="jacquev6")')
122          self.assertEqual(repr(self.user.plan), 'Plan(name="micro")')
123  
124      def testGetGists(self):
125          self.assertListKeyEqual(
126              self.user.get_gists(),
127              lambda g: g.description,
128              [
129                  "Gist created by PyGithub",
130                  "FairThreadPoolPool.cpp",
131                  "How to error 500 Github API v3, as requested by Rick (GitHub Staff)",
132                  "Cadfael: order of episodes in French DVD edition",
133              ],
134          )
135          self.assertListKeyEqual(
136              self.user.get_gists(since=datetime(2012, 3, 1, 17, 0, 0)),
137              lambda g: g.description,
138              ["Gist created by PyGithub", "FairThreadPoolPool.cpp"],
139          )
140  
141      def testGetFollowers(self):
142          self.assertListKeyEqual(
143              self.user.get_followers(),
144              lambda f: f.login,
145              [
146                  "jnorthrup",
147                  "brugidou",
148                  "regisb",
149                  "walidk",
150                  "afzalkhan",
151                  "sdanzan",
152                  "vineus",
153                  "gturri",
154                  "fjardon",
155                  "cjuniet",
156                  "jardon-u",
157                  "kamaradclimber",
158                  "L42y",
159              ],
160          )
161  
162      def testGetFollowing(self):
163          self.assertListKeyEqual(
164              self.user.get_following(),
165              lambda f: f.login,
166              [
167                  "nvie",
168                  "schacon",
169                  "jamis",
170                  "chad",
171                  "unclebob",
172                  "dabrahams",
173                  "jnorthrup",
174                  "brugidou",
175                  "regisb",
176                  "walidk",
177                  "tanzilli",
178                  "fjardon",
179                  "r3c",
180                  "sdanzan",
181                  "vineus",
182                  "cjuniet",
183                  "gturri",
184                  "ant9000",
185                  "asquini",
186                  "claudyus",
187                  "jardon-u",
188                  "s-bernard",
189                  "kamaradclimber",
190                  "Lyloa",
191              ],
192          )
193  
194      def testHasInFollowing(self):
195          nvie = self.g.get_user("nvie")
196          self.assertTrue(self.user.has_in_following(nvie))
197  
198      def testGetOrgs(self):
199          self.assertListKeyEqual(self.user.get_orgs(), lambda o: o.login, ["BeaverSoftware"])
200  
201      def testGetOrganizationMembership(self):
202          o = self.user.get_orgs()
203          membership = self.user.get_organization_membership(o[0])
204          self.assertEqual(
205              repr(membership),
206              'Membership(url="https://api.github.com/orgs/BeaverSoftware/memberships/jacquev6")',
207          )
208          self.assertEqual(self.user.login, membership.user.login)
209          self.assertEqual(membership.state, "active")
210          self.assertEqual(membership.role, "member")
211          self.assertEqual(
212              membership.url,
213              "https://api.github.com/orgs/BeaverSoftware/memberships/jacquev6",
214          )
215          self.assertEqual(membership.organization.login, "BeaverSoftware")
216          self.assertEqual(membership.organization_url, "https://api.github.com/orgs/BeaverSoftware")
217  
218      def testGetOrganizationMembershipNotMember(self):
219          from github import UnknownObjectException
220  
221          self.assertRaises(
222              UnknownObjectException,
223              self.user.get_organization_membership,
224              "BeaverSoftware",
225          )
226  
227      def testGetRepo(self):
228          self.assertEqual(
229              self.user.get_repo("PyGithub").description,
230              "Python library implementing the full Github API v3",
231          )
232  
233      def testGetRepos(self):
234          self.assertListKeyEqual(
235              self.user.get_repos(),
236              lambda r: r.name,
237              [
238                  "TestPyGithub",
239                  "django",
240                  "PyGithub",
241                  "developer.github.com",
242                  "acme-public-website",
243                  "C4Planner",
244                  "DrawTurksHead",
245                  "DrawSyntax",
246                  "QuadProgMm",
247                  "Boost.HierarchicalEnum",
248                  "ViDE",
249              ],
250          )
251  
252      def testGetReposWithAllArgs(self):
253          self.assertListKeyEqual(
254              self.user.get_repos(type="owner", sort="created", direction="asc"),
255              lambda r: r.name,
256              [
257                  "DrawTurksHead",
258                  "vincent-jacques.net",
259                  "IpMap",
260                  "MockMockMock",
261                  "ActionTree",
262                  "InteractiveCommandLine",
263                  "RecursiveDocument",
264                  "MarblesCollide",
265                  "jacquev6.github.io",
266                  "LowVoltage",
267              ],
268          )
269  
270      def testGetWatched(self):
271          self.assertListKeyEqual(
272              self.user.get_watched(),
273              lambda r: r.name,
274              [
275                  "git",
276                  "boost.php",
277                  "capistrano",
278                  "boost.perl",
279                  "git-subtree",
280                  "git-hg",
281                  "homebrew",
282                  "celtic_knot",
283                  "twisted-intro",
284                  "markup",
285                  "hub",
286                  "gitflow",
287                  "murder",
288                  "boto",
289                  "agit",
290                  "d3",
291                  "pygit2",
292                  "git-pulls",
293                  "django_mathlatex",
294                  "scrumblr",
295                  "developer.github.com",
296                  "python-github3",
297                  "PlantUML",
298                  "bootstrap",
299                  "drawnby",
300                  "django-socketio",
301                  "django-realtime",
302                  "playground",
303                  "BozoCrack",
304                  "FatherBeaver",
305                  "PyGithub",
306                  "django",
307                  "django",
308                  "TestPyGithub",
309              ],
310          )
311  
312      def testGetStarred(self):
313          self.assertListKeyEqual(
314              self.user.get_starred(),
315              lambda r: r.name,
316              [
317                  "git",
318                  "boost.php",
319                  "capistrano",
320                  "boost.perl",
321                  "git-subtree",
322                  "git-hg",
323                  "homebrew",
324                  "celtic_knot",
325                  "twisted-intro",
326                  "markup",
327                  "hub",
328                  "gitflow",
329                  "murder",
330                  "boto",
331                  "agit",
332                  "d3",
333                  "pygit2",
334                  "git-pulls",
335                  "django_mathlatex",
336                  "scrumblr",
337                  "developer.github.com",
338                  "python-github3",
339                  "PlantUML",
340                  "bootstrap",
341                  "drawnby",
342                  "django-socketio",
343                  "django-realtime",
344                  "playground",
345                  "BozoCrack",
346                  "FatherBeaver",
347                  "amaunet",
348                  "django",
349                  "django",
350                  "moviePlanning",
351                  "folly",
352              ],
353          )
354  
355      def testGetSubscriptions(self):
356          self.assertListKeyEqual(
357              self.user.get_subscriptions(),
358              lambda r: r.name,
359              [
360                  "ViDE",
361                  "Boost.HierarchicalEnum",
362                  "QuadProgMm",
363                  "DrawSyntax",
364                  "DrawTurksHead",
365                  "PrivateStuff",
366                  "vincent-jacques.net",
367                  "Hacking",
368                  "C4Planner",
369                  "developer.github.com",
370                  "PyGithub",
371                  "PyGithub",
372                  "django",
373                  "CinePlanning",
374                  "PyGithub",
375                  "PyGithub",
376                  "PyGithub",
377                  "IpMap",
378                  "PyGithub",
379                  "PyGithub",
380                  "PyGithub",
381                  "PyGithub",
382                  "PyGithub",
383                  "PyGithub",
384                  "PyGithub",
385                  "PyGithub",
386                  "PyGithub",
387                  "PyGithub",
388                  "PyGithub",
389                  "PyGithub",
390              ],
391          )
392  
393      def testGetEvents(self):
394          self.assertListKeyBegin(
395              self.user.get_events(),
396              lambda e: e.type,
397              ["GistEvent", "IssueCommentEvent", "PushEvent", "IssuesEvent"],
398          )
399  
400      def testGetPublicEvents(self):
401          self.assertListKeyBegin(
402              self.user.get_public_events(),
403              lambda e: e.type,
404              ["PushEvent", "CreateEvent", "GistEvent", "IssuesEvent"],
405          )
406  
407      def testGetPublicReceivedEvents(self):
408          self.assertListKeyBegin(
409              self.user.get_public_received_events(),
410              lambda e: e.type,
411              [
412                  "IssueCommentEvent",
413                  "IssueCommentEvent",
414                  "IssueCommentEvent",
415                  "IssueCommentEvent",
416              ],
417          )
418  
419      def testGetReceivedEvents(self):
420          self.assertListKeyBegin(
421              self.user.get_received_events(),
422              lambda e: e.type,
423              [
424                  "IssueCommentEvent",
425                  "IssueCommentEvent",
426                  "IssueCommentEvent",
427                  "IssueCommentEvent",
428              ],
429          )
430  
431      def testGetKeys(self):
432          self.assertListKeyEqual(
433              self.user.get_keys(),
434              lambda k: k.id,
435              [3557894, 3791954, 3937333, 4051357, 4051492],
436          )
437  
438      def testUserEquality(self):
439          u1 = self.g.get_user("nvie")
440          u2 = self.g.get_user("nvie")
441          self.assertTrue(u1 == u2)
442          self.assertEqual(u1, u2)
443          self.assertEqual(u1.__hash__(), u2.__hash__())