aboutsummaryrefslogtreecommitdiffstats
path: root/tests/gist_tests.py
blob: 7e31066d6ece54ec262f70a462f9531187f67b3a (plain) (blame)
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()