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 )