def test_constructor_defaults(self):
     session = JirafeSession(self.site_id)
     self.assertEqual(self.site_id, self.session.site_id)
     self.assertEqual('https://accounts.jirafe.com/oauth2/authorize',
                      session.auth_url)
     self.assertEqual('https://accounts.jirafe.com/oauth2/access_token',
                      session.token_url)
     self.assertEqual('https://accounts.jirafe.com/accounts/profile',
                      session.profile_url)
     self.assertIsNone(self.session.access_token)
     self.assertEqual(requests, session.requests)
 def test_constructor_change(self):
     kwargs = {
         'auth_url': 'a',
         'token_url': 't',
         'profile_url': 'p',
         'requests': Mock()
     }
     session = JirafeSession(self.site_id, **kwargs)
     self.assertEqual('a', session.auth_url)
     self.assertEqual('t', session.token_url)
     self.assertEqual('p', session.profile_url)
     self.assertEqual(kwargs['requests'], session.requests)
 def setUp(self):
     self.site_id = 'id'
     self.mock_requests = Mock()
     self.session = JirafeSession(self.site_id, requests=self.mock_requests)
class TestJirafeSession(unittest.TestCase):
    def setUp(self):
        self.site_id = 'id'
        self.mock_requests = Mock()
        self.session = JirafeSession(self.site_id, requests=self.mock_requests)

    def test_constructor_defaults(self):
        session = JirafeSession(self.site_id)
        self.assertEqual(self.site_id, self.session.site_id)
        self.assertEqual('https://accounts.jirafe.com/oauth2/authorize',
                         session.auth_url)
        self.assertEqual('https://accounts.jirafe.com/oauth2/access_token',
                         session.token_url)
        self.assertEqual('https://accounts.jirafe.com/accounts/profile',
                         session.profile_url)
        self.assertIsNone(self.session.access_token)
        self.assertEqual(requests, session.requests)

    def test_constructor_change(self):
        kwargs = {
            'auth_url': 'a',
            'token_url': 't',
            'profile_url': 'p',
            'requests': Mock()
        }
        session = JirafeSession(self.site_id, **kwargs)
        self.assertEqual('a', session.auth_url)
        self.assertEqual('t', session.token_url)
        self.assertEqual('p', session.profile_url)
        self.assertEqual(kwargs['requests'], session.requests)

    def test_get_header(self):
        self.session.access_token = 'some_token'
        expected = {'Authorization': 'Bearer some_token'}
        self.assertEqual(expected, self.session.get_header())

    def test_update_token(self):
        self.session._get_token = Mock(return_value='token')
        self.assertEqual('token', self.session.update_token())
        self.assertEqual('token', self.session.update_token())
        self.session._get_token.assert_called_once()

    def test_invalidate(self):
        self.session.access_token = 'some_token'
        self.assertEqual('some_token', self.session.access_token)
        self.session.invalidate()
        self.assertIsNone(self.session.access_token)

    def test_get_profile(self):
        json_response = {'a': 'profile'}
        mock_response = Mock()
        mock_response.status_code = 200
        mock_response.json = Mock(return_value=json_response)
        self.mock_requests.get = Mock(return_value=mock_response)
        self.session.get_header = Mock(return_value={'mock': 'header'})

        profile = self.session.get_profile()

        self.assertEqual(json_response, profile)
        mock_response.json.assert_called_once()
        self.mock_requests.get.assert_called_once_with(
            'https://accounts.jirafe.com/accounts/profile',
            headers={'mock': 'header'})

    def test_get_profile_fail(self):
        mock_response = Mock()
        mock_response.status_code = 403
        self.mock_requests.get = Mock(return_value=mock_response)
        self.session.get_header = Mock()
        self.session.invalidate = Mock()

        self.assertIsNone(self.session.get_profile())
        self.session.invalidate.assert_called_once()

    def test_get_site(self):
        profile = {'sites': [{'id': 'id'}]}
        self.session.get_profile = Mock(return_value=profile)

        self.assertEqual({'id': 'id'}, self.session.get_site())

    def test_get_site_empty(self):
        profile = {'sites': []}
        self.session.get_profile = Mock(return_value=profile)

        self.assertIsNone(self.session.get_site())

    def test_get_site_missing(self):
        profile = {'a': 'profile'}
        self.session.get_profile = Mock(return_value=profile)

        self.assertIsNone(self.session.get_site())

    def test__get_token(self):
        self.assertRaises(NotImplementedError, self.session._get_token)
 def setUp(self):
     self.site_id = "id"
     self.mock_requests = Mock()
     self.session = JirafeSession(self.site_id, requests=self.mock_requests)
class TestJirafeSession(unittest.TestCase):
    def setUp(self):
        self.site_id = "id"
        self.mock_requests = Mock()
        self.session = JirafeSession(self.site_id, requests=self.mock_requests)

    def test_constructor_defaults(self):
        session = JirafeSession(self.site_id)
        self.assertEqual(self.site_id, self.session.site_id)
        self.assertEqual("https://accounts.jirafe.com/oauth2/authorize", session.auth_url)
        self.assertEqual("https://accounts.jirafe.com/oauth2/access_token", session.token_url)
        self.assertEqual("https://accounts.jirafe.com/accounts/profile", session.profile_url)
        self.assertIsNone(self.session.access_token)
        self.assertEqual(requests, session.requests)

    def test_constructor_change(self):
        kwargs = {"auth_url": "a", "token_url": "t", "profile_url": "p", "requests": Mock()}
        session = JirafeSession(self.site_id, **kwargs)
        self.assertEqual("a", session.auth_url)
        self.assertEqual("t", session.token_url)
        self.assertEqual("p", session.profile_url)
        self.assertEqual(kwargs["requests"], session.requests)

    def test_get_header(self):
        self.session.access_token = "some_token"
        expected = {"Authorization": "Bearer some_token"}
        self.assertEqual(expected, self.session.get_header())

    def test_update_token(self):
        self.session._get_token = Mock(return_value="token")
        self.assertEqual("token", self.session.update_token())
        self.assertEqual("token", self.session.update_token())
        self.session._get_token.assert_called_once()

    def test_invalidate(self):
        self.session.access_token = "some_token"
        self.assertEqual("some_token", self.session.access_token)
        self.session.invalidate()
        self.assertIsNone(self.session.access_token)

    def test_get_profile(self):
        json_response = {"a": "profile"}
        mock_response = Mock()
        mock_response.status_code = 200
        mock_response.json = Mock(return_value=json_response)
        self.mock_requests.get = Mock(return_value=mock_response)
        self.session.get_header = Mock(return_value={"mock": "header"})

        profile = self.session.get_profile()

        self.assertEqual(json_response, profile)
        mock_response.json.assert_called_once()
        self.mock_requests.get.assert_called_once_with(
            "https://accounts.jirafe.com/accounts/profile", headers={"mock": "header"}
        )

    def test_get_profile_fail(self):
        mock_response = Mock()
        mock_response.status_code = 403
        self.mock_requests.get = Mock(return_value=mock_response)
        self.session.get_header = Mock()
        self.session.invalidate = Mock()

        self.assertIsNone(self.session.get_profile())
        self.session.invalidate.assert_called_once()

    def test_get_site(self):
        profile = {"sites": [{"id": "id"}]}
        self.session.get_profile = Mock(return_value=profile)

        self.assertEqual({"id": "id"}, self.session.get_site())

    def test_get_site_empty(self):
        profile = {"sites": []}
        self.session.get_profile = Mock(return_value=profile)

        self.assertIsNone(self.session.get_site())

    def test_get_site_missing(self):
        profile = {"a": "profile"}
        self.session.get_profile = Mock(return_value=profile)

        self.assertIsNone(self.session.get_site())

    def test__get_token(self):
        self.assertRaises(NotImplementedError, self.session._get_token)