Beispiel #1
0
class TestFlickrService(object):
    class Res(object):
        def __init__(self, status, data):
            self.status = status
            self.data = data

    def setUp(self):
        self.flickr = FlickrService()
        self.token = {'oauth_token_secret': u'secret', 'oauth_token': u'token'}
        self.user = {'username': u'palotespaco', 'user_nsid': u'user'}
        self.flickr = FlickrService()
        self.flickr.client = MagicMock()
        self.flickr.app = MagicMock()

    def test_flickr_get_token_returns_None_if_no_token(self):
        session = {}

        token = self.flickr.get_token(session)

        assert token is None, token


    def test_flickr_get_token_returns_existing_token_as_a_tuple(self):
        session = {'flickr_token': self.token}

        token = self.flickr.get_token(session)

        assert token == (u'token', u'secret'), token


    def test_save_credentials_stores_token_and_user(self):
        session = {}

        self.flickr.save_credentials(session, self.token, self.user)

        assert session.get('flickr_token') is self.token
        assert session.get('flickr_user') is self.user


    def test_remove_token_deletes_token(self):
        session = {'flickr_token': self.token, 'flickr_user': self.user}

        self.flickr.remove_credentials(session)

        assert session.get('flickr_token') is None
        assert session.get('flickr_user') is None


    def test_get_user_albums_calls_flickr_api_endpoint(self):
        session = {'flickr_token': self.token, 'flickr_user': self.user}
        url = ('https://api.flickr.com/services/rest/?'
               'method=flickr.photosets.getList&user_id=user'
               '&primary_photo_extras=url_q'
               '&format=json&nojsoncallback=1')

        self.flickr.get_user_albums(session)

        # The request MUST NOT include a valid token, to avoid private photos
        self.flickr.client.get.assert_called_with(url, token='')


    def test_get_user_albums_return_empty_list_on_request_error(self):
        response = self.Res(404, 'not found')
        self.flickr.client.get.return_value = response

        session = {'flickr_token': self.token, 'flickr_user': self.user}

        albums = self.flickr.get_user_albums(session)

        assert albums == [], albums


    def test_get_user_albums_return_empty_list_on_request_fail(self):
        data = {'stat': 'fail', 'code': 1, 'message': 'User not found'}
        response = self.Res(200, data)
        self.flickr.client.get.return_value = response

        session = {'flickr_token': self.token, 'flickr_user': self.user}

        albums = self.flickr.get_user_albums(session)

        assert albums == [], albums


    def test_get_user_albums_log_response_on_request_fail(self):
        data = {'stat': 'fail', 'code': 1, 'message': 'User not found'}
        response = self.Res(200, data)
        self.flickr.client.get.return_value = response
        log_error_msg = ("Bad response from Flickr:\nStatus: %s, Content: %s"
            % (response.status, response.data))
        session = {'flickr_token': self.token, 'flickr_user': self.user}

        albums = self.flickr.get_user_albums(session)

        self.flickr.app.logger.error.assert_called_with(log_error_msg)


    def test_get_user_albums_return_list_with_album_info(self):
        data = {
            u'stat': u'ok',
            u'photosets': {
                u'total': 2,
                u'perpage': 2,
                u'photoset':
                [{u'date_update': u'1421313791',
                  u'visibility_can_see_set': 1,
                  u'description': {u'_content': u'mis mejores vacaciones'},
                  u'videos': 0, u'title': {u'_content': u'vacaciones'},
                  u'farm': 9, u'needs_interstitial': 0,
                  u'primary': u'16284868505',
                  u'primary_photo_extras': {
                      u'height_t': u'63',
                      u'width_t': u'100',
                      u'url_q': u'https://farm9.staticflickr.com/8597/16284868505_c4a032a62e_t.jpg'},
                  u'server': u'8597',
                  u'date_create': u'1421313790',
                  u'photos': u'3',
                  u'secret': u'c4a032a62e',
                  u'count_comments': u'0',
                  u'count_views': u'1',
                  u'can_comment': 0,
                  u'id': u'72157649886540037'}],
                u'page': 1,
                u'pages': 1}}
        response = self.Res(200, data)
        self.flickr.client.get.return_value = response
        session = {'flickr_token': self.token, 'flickr_user': self.user}

        albums = self.flickr.get_user_albums(session)

        expected_album = response.data['photosets']['photoset'][0]
        expected_album_info = {
            'photos': expected_album['photos'],
            'thumbnail_url': expected_album['primary_photo_extras']['url_q'],
            'id': expected_album['id'],
            'title': expected_album['title']['_content']}

        assert albums == [expected_album_info], albums