1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
#
# author: Antti Kaihola
from datetime import datetime
import json
from mock import MagicMock, Mock, patch
import unittest
import github3.api
import github3.handlers.gists
import github3.handlers.user
import github3.models
GIST_RESPONSE = '{"user":{"gravatar_id":"123","url":"https://api.github.com/users/testuser","avatar_url":"https://secure.gravatar.com/avatar/123?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-1.png","login":"testuser","id":12345},"url":"https://api.github.com/gists/791920","history":[{"version":"deadbeefdeadbeefdeadbeefdeadbeefdeadbeef","url":"https://api.github.com/gists/791920/deadbeefdeadbeefdeadbeefdeadbeefdeadbeef","user":{"gravatar_id":"123","url":"https://api.github.com/users/testuser","avatar_url":"https://secure.gravatar.com/avatar/123?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-1.png","login":"testuser","id":12345},"committed_at":"2011-11-09T08:50:53Z","change_status":{"deletions":0,"additions":1,"total":1}}],"description":"description","created_at":"2011-11-09T08:50:53Z","public":true,"comments":0,"updated_at":"2011-11-09T08:50:53Z","git_pull_url":"git://gist.github.com/791920.git","forks":[],"git_push_url":"git@gist.github.com:791920.git","html_url":"https://gist.github.com/791920","id":"791920","files":{"filename.ext":{"raw_url":"https://gist.github.com/raw/791920/badafadacadafadabadacadafadabadabadacada/filename.ext","type":"text/plain","content":"content","size":7,"language":null,"filename":"filename.ext"}}}'
class GistsTestCase(unittest.TestCase):
def test_create_gist(self):
"""The HTTP request for creating a gist is correct"""
g = github3.api.Github()
g.session.auth = ('testuser', 'password')
u = github3.handlers.user.AuthUser(g)
gists = github3.handlers.gists.Gist(g)
OpenerDirector = MagicMock(name='OpenerDirector')
opener = OpenerDirector.return_value
response = opener.open.return_value
response.read.return_value = GIST_RESPONSE
response.code = 201
with patch('urllib2.OpenerDirector', OpenerDirector):
gist = gists.create_gist(
'description',
files={'filename.ext': {'content': 'content'}})
request = opener.open.call_args[0][0]
self.assertEqual(request.method, 'POST')
self.assertEqual(request.get_full_url(),
'https://api.github.com/gists?per_page=100')
self.assertEqual(request.headers['Authorization'],
'Basic dGVzdHVzZXI6cGFzc3dvcmQ=')
self.assertEqual(json.loads(request.data),
{u'description': u'description',
u'files': {u'filename.ext': {u'content': u'content'}},
u'public': True})
class GistHandlerTestCase(unittest.TestCase):
def test_response_conversion(self):
"""A gist response is decoded correctly to a Gist object"""
g = github3.api.Github()
handler = github3.handlers.gists.Gist(g)
converter = handler._get_converter()
converter.inject(github3.models.Gist)
gist = converter.loads(json.loads(GIST_RESPONSE))
self.assertEqual(
{filename: value.__dict__
for filename, value in gist.files.iteritems()},
{u'filename.ext': {
'content': u'content',
'filename': u'filename.ext',
'raw_url': (u'https://gist.github.com/'
u'raw/791920/'
u'badafadacadafadabadacadafadabadabadacada/'
u'filename.ext'),
'size': 7,
'type': u'text/plain'}})
self.assertEqual(gist.description, u'description')
self.assertEqual(gist.url, u'https://api.github.com/gists/791920')
self.assertEqual(gist.created_at, datetime(2011, 11, 9, 8, 50, 53))
self.assertEqual(gist.html_url, u'https://gist.github.com/791920')
self.assertEqual(gist.public, True)
self.assertEqual(
gist.user.__dict__,
{'avatar_url': (u'https://secure.gravatar.com/avatar/123'
u'?d=https://a248.e.akamai.net/'
u'assets.github.com%2Fimages%2Fgravatars'
u'%2Fgravatar-1.png'),
'id': 12345,
'login': u'testuser',
'url': u'https://api.github.com/users/testuser'})
self.assertEqual(gist.git_pull_url, u'git://gist.github.com/791920.git')
self.assertEqual(gist.git_push_url, u'git@gist.github.com:791920.git')
self.assertEqual(gist.id, u'791920')
self.assertEqual(len(gist.history), 1)
h = gist.history[0]
self.assertEqual(h.change_status.__dict__, {'additions': 1, 'total': 1})
self.assertEqual(h.committed_at, datetime(2011, 11, 9, 8, 50, 53))
self.assertEqual(h.url,
u'https://api.github.com/gists/791920/'
u'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef')
self.assertEqual(h.user.__dict__, gist.user.__dict__)
self.assertEqual(h.version, u'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef')
if __name__ == '__main__':
unittest.main()
|