/ tests / Github_.py
Github_.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 Steve Brown <steve@evolvedlight.co.uk>                        #
  6  # Copyright 2013 Vincent Jacques <vincent@vincent-jacques.net>                 #
  7  # Copyright 2014 Tyler Treat <ttreat31@gmail.com>                              #
  8  # Copyright 2014 Vincent Jacques <vincent@vincent-jacques.net>                 #
  9  # Copyright 2016 Peter Buckley <dx-pbuckley@users.noreply.github.com>          #
 10  # Copyright 2018 Svend Sorensen <svend@svends.net>                             #
 11  # Copyright 2018 Wan Liuyang <tsfdye@gmail.com>                                #
 12  # Copyright 2018 sfdye <tsfdye@gmail.com>                                      #
 13  # Copyright 2018 itsbruce <it.is.bruce@gmail.com>                              #
 14  #                                                                              #
 15  # This file is part of PyGithub.                                               #
 16  # http://pygithub.readthedocs.io/                                              #
 17  #                                                                              #
 18  # PyGithub is free software: you can redistribute it and/or modify it under    #
 19  # the terms of the GNU Lesser General Public License as published by the Free  #
 20  # Software Foundation, either version 3 of the License, or (at your option)    #
 21  # any later version.                                                           #
 22  #                                                                              #
 23  # PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY  #
 24  # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS    #
 25  # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #
 26  # details.                                                                     #
 27  #                                                                              #
 28  # You should have received a copy of the GNU Lesser General Public License     #
 29  # along with PyGithub. If not, see <http://www.gnu.org/licenses/>.             #
 30  #                                                                              #
 31  ################################################################################
 32  
 33  from datetime import datetime, timezone
 34  
 35  import github
 36  
 37  from . import Framework
 38  
 39  
 40  class Github(Framework.TestCase):
 41      def testGetGists(self):
 42          self.assertListKeyBegin(
 43              self.g.get_gists(),
 44              lambda g: g.id,
 45              [
 46                  "2729695",
 47                  "2729656",
 48                  "2729597",
 49                  "2729584",
 50                  "2729569",
 51                  "2729554",
 52                  "2729543",
 53                  "2729537",
 54                  "2729536",
 55                  "2729533",
 56                  "2729525",
 57                  "2729522",
 58                  "2729519",
 59                  "2729515",
 60                  "2729506",
 61                  "2729487",
 62                  "2729484",
 63                  "2729482",
 64                  "2729441",
 65                  "2729432",
 66                  "2729420",
 67                  "2729398",
 68                  "2729372",
 69                  "2729371",
 70                  "2729351",
 71                  "2729346",
 72                  "2729316",
 73                  "2729304",
 74                  "2729296",
 75                  "2729276",
 76                  "2729272",
 77                  "2729265",
 78                  "2729195",
 79                  "2729160",
 80                  "2729143",
 81                  "2729127",
 82                  "2729119",
 83                  "2729113",
 84                  "2729103",
 85                  "2729069",
 86                  "2729059",
 87                  "2729051",
 88                  "2729029",
 89                  "2729027",
 90                  "2729026",
 91                  "2729022",
 92                  "2729002",
 93                  "2728985",
 94                  "2728979",
 95                  "2728964",
 96                  "2728937",
 97                  "2728933",
 98                  "2728884",
 99                  "2728869",
100                  "2728866",
101                  "2728855",
102                  "2728854",
103                  "2728853",
104                  "2728846",
105                  "2728825",
106                  "2728814",
107                  "2728813",
108                  "2728812",
109                  "2728805",
110                  "2728802",
111                  "2728800",
112                  "2728798",
113                  "2728797",
114                  "2728796",
115                  "2728793",
116                  "2728758",
117                  "2728754",
118                  "2728751",
119                  "2728748",
120                  "2728721",
121                  "2728716",
122                  "2728715",
123                  "2728705",
124                  "2728701",
125                  "2728699",
126                  "2728697",
127                  "2728688",
128                  "2728683",
129                  "2728677",
130                  "2728649",
131                  "2728640",
132                  "2728625",
133                  "2728620",
134                  "2728615",
135                  "2728614",
136                  "2728565",
137                  "2728564",
138                  "2728554",
139                  "2728523",
140                  "2728519",
141                  "2728511",
142                  "2728497",
143                  "2728496",
144                  "2728495",
145                  "2728487",
146              ],
147          )
148  
149      def testGetGistsWithSince(self):
150          self.assertListKeyBegin(
151              self.g.get_gists(since=datetime(2018, 10, 2, 10, 38, 30, 00)),
152              lambda g: g.id,
153              [
154                  "69b8a5831b74946db944c5451017fa40",
155                  "c22050a8705e93d170e0d4ca9c02e40c",
156                  "a7a95e1a194e07960364a5b32c56ac5f",
157                  "a25d9ace89b574f95bf0724f95a84fc2",
158                  "3195465",
159              ],
160          )
161  
162      def testGetHooks(self):
163          hooks = self.g.get_hooks()
164          hook = hooks[0]
165          self.assertEqual(hook.name, "activecollab")
166          self.assertEqual(hook.supported_events, ["push"])
167          self.assertEqual(hook.events, ["push"])
168          self.assertEqual(
169              hook.schema,
170              [
171                  ["string", "url"],
172                  ["string", "token"],
173                  ["string", "project_id"],
174                  ["string", "milestone_id"],
175                  ["string", "category_id"],
176              ],
177          )
178  
179      def testGetEmojis(self):
180          emojis = self.g.get_emojis()
181          first = emojis.get("+1")
182          self.assertEqual(first, "https://github.global.ssl.fastly.net/images/icons/emoji/+1.png?v5")
183  
184      def testGetHook(self):
185          hook = self.g.get_hook("activecollab")
186          self.assertEqual(hook.name, "activecollab")
187          self.assertEqual(hook.supported_events, ["push"])
188          self.assertEqual(hook.events, ["push"])
189          self.assertEqual(
190              hook.schema,
191              [
192                  ["string", "url"],
193                  ["string", "token"],
194                  ["string", "project_id"],
195                  ["string", "milestone_id"],
196                  ["string", "category_id"],
197              ],
198          )
199          self.assertEqual(repr(hook), 'HookDescription(name="activecollab")')
200  
201      def testGetHookDelivery(self):
202          delivery = self.g.get_hook_delivery(257993, 12345)
203          self.assertEqual(delivery.id, 12345)
204          self.assertEqual(delivery.guid, "abcde-12345")
205          self.assertEqual(
206              delivery.delivered_at,
207              datetime(2012, 5, 27, 6, 0, 32, tzinfo=timezone.utc),
208          )
209          self.assertEqual(delivery.redelivery, False)
210          self.assertEqual(delivery.duration, 0.27)
211          self.assertEqual(delivery.status, "OK")
212          self.assertEqual(delivery.status_code, 200)
213          self.assertEqual(delivery.event, "issues")
214          self.assertEqual(delivery.action, "opened")
215          self.assertEqual(delivery.installation_id, 123)
216          self.assertEqual(delivery.repository_id, 456)
217          self.assertEqual(delivery.url, "https://www.example-webhook.com")
218          self.assertIsInstance(delivery.request, github.HookDelivery.HookDeliveryRequest)
219          self.assertEqual(delivery.request.headers, {"content-type": "application/json"})
220          self.assertEqual(delivery.request.payload, {"action": "opened"})
221          self.assertIsInstance(delivery.response, github.HookDelivery.HookDeliveryResponse)
222          self.assertEqual(delivery.response.headers, {"content-type": "text/html;charset=utf-8"})
223          self.assertEqual(delivery.response.payload, "ok")
224  
225      def testGetHookDeliveries(self):
226          deliveries = list(self.g.get_hook_deliveries(257993))
227          self.assertEqual(len(deliveries), 1)
228          self.assertEqual(deliveries[0].id, 12345)
229          self.assertEqual(deliveries[0].guid, "abcde-12345")
230          self.assertEqual(
231              deliveries[0].delivered_at,
232              datetime(2012, 5, 27, 6, 0, 32, tzinfo=timezone.utc),
233          )
234          self.assertEqual(deliveries[0].redelivery, False)
235          self.assertEqual(deliveries[0].duration, 0.27)
236          self.assertEqual(deliveries[0].status, "OK")
237          self.assertEqual(deliveries[0].status_code, 200)
238          self.assertEqual(deliveries[0].event, "issues")
239          self.assertEqual(deliveries[0].action, "opened")
240          self.assertEqual(deliveries[0].installation_id, 123)
241          self.assertEqual(deliveries[0].repository_id, 456)
242          self.assertEqual(deliveries[0].url, "https://www.example-webhook.com")
243  
244      def testGetRepoFromFullName(self):
245          self.assertEqual(
246              self.g.get_repo("jacquev6/PyGithub").description,
247              "Python library implementing the full Github API v3",
248          )
249  
250      def testGetRepoFromId(self):
251          self.assertEqual(
252              self.g.get_repo(3544490).description,
253              "Python library implementing the full Github API v3",
254          )
255  
256      def testGetGitignoreTemplates(self):
257          self.assertEqual(
258              self.g.get_gitignore_templates(),
259              [
260                  "Actionscript",
261                  "Android",
262                  "AppceleratorTitanium",
263                  "Autotools",
264                  "Bancha",
265                  "C",
266                  "C++",
267                  "CFWheels",
268                  "CMake",
269                  "CSharp",
270                  "CakePHP",
271                  "Clojure",
272                  "CodeIgniter",
273                  "Compass",
274                  "Concrete5",
275                  "Coq",
276                  "Delphi",
277                  "Django",
278                  "Drupal",
279                  "Erlang",
280                  "ExpressionEngine",
281                  "Finale",
282                  "ForceDotCom",
283                  "FuelPHP",
284                  "GWT",
285                  "Go",
286                  "Grails",
287                  "Haskell",
288                  "Java",
289                  "Jboss",
290                  "Jekyll",
291                  "Joomla",
292                  "Jython",
293                  "Kohana",
294                  "LaTeX",
295                  "Leiningen",
296                  "LemonStand",
297                  "Lilypond",
298                  "Lithium",
299                  "Magento",
300                  "Maven",
301                  "Node",
302                  "OCaml",
303                  "Objective-C",
304                  "Opa",
305                  "OracleForms",
306                  "Perl",
307                  "PlayFramework",
308                  "Python",
309                  "Qooxdoo",
310                  "Qt",
311                  "R",
312                  "Rails",
313                  "RhodesRhomobile",
314                  "Ruby",
315                  "Scala",
316                  "Sdcc",
317                  "SeamGen",
318                  "SketchUp",
319                  "SugarCRM",
320                  "Symfony",
321                  "Symfony2",
322                  "SymphonyCMS",
323                  "Target3001",
324                  "Tasm",
325                  "Textpattern",
326                  "TurboGears2",
327                  "Unity",
328                  "VB.Net",
329                  "Waf",
330                  "Wordpress",
331                  "Yii",
332                  "ZendFramework",
333                  "gcov",
334                  "nanoc",
335                  "opencart",
336              ],
337          )
338  
339      def testGetGitignoreTemplate(self):
340          t = self.g.get_gitignore_template("Python")
341          self.assertEqual(t.name, "Python")
342          self.assertEqual(
343              t.source,
344              "*.py[cod]\n\n# C extensions\n*.so\n\n# Packages\n*.egg\n*.egg-info\ndist\nbuild\neggs\nparts\nbin\nvar\nsdist\ndevelop-eggs\n.installed.cfg\nlib\nlib64\n\n# Installer logs\npip-log.txt\n\n# Unit test / coverage reports\n.coverage\n.tox\nnosetests.xml\n\n# Translations\n*.mo\n\n# Mr Developer\n.mr.developer.cfg\n.project\n.pydevproject\n",
345          )
346          self.assertEqual(repr(t), 'GitignoreTemplate(name="Python")')
347  
348          t = self.g.get_gitignore_template("C++")
349          self.assertEqual(t.name, "C++")
350          self.assertEqual(
351              t.source,
352              "# Compiled Object files\n*.slo\n*.lo\n*.o\n\n# Compiled Dynamic libraries\n*.so\n*.dylib\n\n# Compiled Static libraries\n*.lai\n*.la\n*.a\n",
353          )
354  
355      def testStringOfNotSet(self):
356          self.assertEqual(str(github.GithubObject.NotSet), "NotSet")
357  
358      def testGetUserById(self):
359          self.assertEqual(self.g.get_user_by_id(583231).login, "octocat")
360  
361      def testGetUsers(self):
362          self.assertListKeyBegin(
363              self.g.get_users(),
364              lambda u: u.login,
365              [
366                  "mojombo",
367                  "defunkt",
368                  "pjhyett",
369                  "wycats",
370                  "ezmobius",
371                  "ivey",
372                  "evanphx",
373                  "vanpelt",
374                  "wayneeseguin",
375                  "brynary",
376                  "kevinclark",
377                  "technoweenie",
378                  "macournoyer",
379                  "takeo",
380                  "Caged",
381                  "topfunky",
382                  "anotherjesse",
383                  "roland",
384                  "lukas",
385                  "fanvsfan",
386                  "tomtt",
387                  "railsjitsu",
388                  "nitay",
389                  "kevwil",
390                  "KirinDave",
391                  "jamesgolick",
392                  "atmos",
393                  "errfree",
394                  "mojodna",
395                  "bmizerany",
396                  "jnewland",
397                  "joshknowles",
398                  "hornbeck",
399                  "jwhitmire",
400                  "elbowdonkey",
401                  "reinh",
402                  "timocratic",
403                  "bs",
404                  "rsanheim",
405                  "schacon",
406                  "uggedal",
407                  "bruce",
408                  "sam",
409                  "mmower",
410                  "abhay",
411                  "rabble",
412                  "benburkert",
413                  "indirect",
414                  "fearoffish",
415                  "ry",
416                  "engineyard",
417                  "jsierles",
418                  "tweibley",
419                  "peimei",
420                  "brixen",
421                  "tmornini",
422                  "outerim",
423                  "daksis",
424                  "sr",
425                  "lifo",
426                  "rsl",
427                  "imownbey",
428                  "dylanegan",
429                  "jm",
430                  "willcodeforfoo",
431                  "jvantuyl",
432                  "BrianTheCoder",
433                  "freeformz",
434                  "hassox",
435                  "automatthew",
436                  "queso",
437                  "lancecarlson",
438                  "drnic",
439                  "lukesutton",
440                  "danwrong",
441                  "hcatlin",
442                  "jfrost",
443                  "mattetti",
444                  "ctennis",
445                  "lawrencepit",
446                  "marcjeanson",
447                  "grempe",
448                  "peterc",
449                  "ministrycentered",
450                  "afarnham",
451                  "up_the_irons",
452                  "evilchelu",
453                  "heavysixer",
454                  "brosner",
455                  "danielmorrison",
456                  "danielharan",
457                  "kvnsmth",
458                  "collectiveidea",
459                  "canadaduane",
460                  "nate",
461                  "dstrelau",
462                  "sunny",
463                  "dkubb",
464                  "jnicklas",
465                  "richcollins",
466                  "simonjefford",
467              ],
468          )
469  
470      def testGetUsersSince(self):
471          self.assertListKeyBegin(self.g.get_users(since=1000), lambda u: u.login, ["sbecker"])
472  
473      def testGetOrganizations(self):
474          self.assertListKeyBegin(
475              self.g.get_organizations(),
476              lambda u: u.login,
477              [
478                  "errfree",
479                  "engineyard",
480                  "ministrycentered",
481                  "collectiveidea",
482                  "ogc",
483                  "sevenwire",
484                  "entryway",
485              ],
486          )
487  
488      def testGetOrganizationsSince(self):
489          self.assertListKeyBegin(
490              self.g.get_organizations(since=1000),
491              lambda u: u.login,
492              [
493                  "railslove",
494                  "railsdog",
495                  "netguru",
496                  "webhostio",
497                  "animikii",
498                  "sauspiel",
499                  "wherecloud",
500                  "triveos",
501              ],
502          )
503  
504      def testGetRepos(self):
505          self.assertListKeyBegin(
506              self.g.get_repos(),
507              lambda r: r.name,
508              [
509                  "grit",
510                  "merb-core",
511                  "rubinius",
512                  "god",
513                  "jsawesome",
514                  "jspec",
515                  "exception_logger",
516                  "ambition",
517              ],
518          )
519  
520      def testGetReposSince(self):
521          self.assertListKeyBegin(
522              self.g.get_repos(since=1000),
523              lambda r: r.name,
524              [
525                  "jquery-humanize-messages-plugin",
526                  "4slicer",
527                  "fixture-scenarios",
528                  "mongrel_proctitle",
529                  "rails-plugins",
530              ],
531          )
532  
533      def testGetLicenses(self):
534          self.assertListKeyBegin(
535              self.g.get_licenses(),
536              lambda r: r.name,
537              [
538                  "GNU General Public License v3.0",
539                  'BSD 2-Clause "Simplified" License',
540                  "MIT License",
541                  "GNU Lesser General Public License v2.1",
542                  "GNU General Public License v2.0",
543                  "GNU Lesser General Public License v3.0",
544                  "Mozilla Public License 2.0",
545                  'BSD 3-Clause "New" or "Revised" License',
546              ],
547          )
548  
549      def testGetLicense(self):
550          self.assertEqual(
551              self.g.get_license("mit").description,
552              "A short and simple permissive license with conditions only requiring preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code.",
553          )
554  
555      def testGetEvents(self):
556          self.assertListKeyBegin(
557              self.g.get_events(),
558              lambda e: e.type,
559              ["PushEvent", "WatchEvent", "PushEvent", "CommitCommentEvent"],
560          )