Beispiel #1
0
 def generateGIFpage():
     if request.method == 'POST':
         print(request.form.errors)
         if request.form.get('gifLocation'):
             gifLocation = request.form.get('gifLocation')
             giphyobj = Giphy('iTmKRrpWJUCpn6nWMSIp42gmkXA6hpfh')
             # response (below) is the URL for our giphy upload
             response = giphyobj.upload([],
                                        gifLocation,
                                        username="******")
             return render_template('upload.html', response=response)
     return redirect(url_for('homepage'))
Beispiel #2
0
class GiphyTestCase(TestCase):

    def setUp(self):
        self.g = Giphy()

    def test_endpoint(self):
        assert self.g._endpoint('search') == 'http://api.giphy.com/v1/gifs/search'

    def test_check_or_raise_raises(self):
        self.assertRaises(GiphyApiException, self.g._check_or_raise, {'status': 400})

    def test_check_or_raise_no_status(self):
        self.assertRaises(GiphyApiException, self.g._check_or_raise, {})

    def test_check_or_raise(self):
        assert self.g._check_or_raise({'status': 200}) is None

    @patch('giphypop.requests')
    def test_fetch_error_raises(self, requests):
        # api returns error messages sorta like...
        err = {'meta': {'error_type': 'ERROR', 'code': 400, 'error_message': ''}}
        requests.get.return_value = requests
        requests.json.return_value = err

        self.assertRaises(GiphyApiException, self.g._fetch, 'foo')

    @patch('giphypop.requests')
    def test_fetch(self, requests):
        data = {'data': FAKE_DATA, 'meta': {'status': 200}}
        requests.get.return_value = requests
        requests.json.return_value = data

        assert self.g._fetch('foo') == data

    def fake_search_fetch(self, num_results, pages=3):
        self.g._fetch = Mock()
        self.g._fetch.return_value = {
            'data': [FAKE_DATA for x in range(num_results)],
            'pagination': {
                'total_count': pages * num_results,
                'count': 25,
                'offset': 0
            },
            'meta': {'status': 200}
        }

    def fake_trending_fetch(self, num_results, pages=3):
        self.g._fetch = Mock()
        self.g._fetch.return_value = {
            'data': [FAKE_DATA for x in range(num_results)],
            'pagination': {
                'total_count': pages * num_results,
                'count': 25,
                'offset': 0
            },
            'meta': {'status': 200}
        }

    def fake_fetch(self, result=FAKE_DATA):
        self.g._fetch = Mock()
        self.g._fetch.return_value = {
            'data': result or None,
            'meta': {'status': 200}
        }

    def test_search_no_results(self):
        self.fake_search_fetch(0, pages=1)
        results = list(self.g.search('foo'))
        assert len(results) == 0

    def test_search_respects_hard_limit(self):
        self.fake_search_fetch(25)
        results = list(self.g.search('foo', limit=10))
        assert len(results) == 10

    def test_search_handles_pages(self):
        self.fake_search_fetch(25)
        results = list(self.g.search('foo', limit=50))
        assert len(results) == 50

    def test_search_correctly_pages(self):
        self.fake_search_fetch(25, pages=2)
        list(self.g.search('foo', limit=50))
        calls = self.g._fetch.call_args_list

        assert len(calls) == 2
        assert calls[0][1]['offset'] == 0
        assert calls[1][1]['offset'] == 25

    def test_search_no_limit_returns_all(self):
        self.fake_search_fetch(25)
        results = list(self.g.search('foo', limit=None))
        assert len(results) == 75

    def test_search_list_returns_list(self):
        self.fake_search_fetch(25)
        results = self.g.search_list('foo', limit=10)
        assert isinstance(results, list)
        assert len(results) == 10

    def test_search_with_phrase_hyphenates(self):
        self.fake_search_fetch(0, pages=1)
        self.g.search(phrase='foo bar baz')
        assert self.g._fetch.called_with(q='foo-bar-baz')

    def test_translate_with_phrase_hyphenates(self):
        self.fake_fetch()
        self.g.translate(phrase='foo bar baz')
        assert self.g._fetch.called_with(s='foo-bar-baz')

    def test_translate(self):
        self.fake_fetch()
        assert isinstance(self.g.translate('foo'), GiphyImage)
        assert self.g._fetch.called_with('translate')

    def test_trending_no_results(self):
        self.fake_trending_fetch(0, pages=1)
        results = list(self.g.trending())
        assert len(results) == 0

    def test_trending_respects_hard_limit(self):
        self.fake_trending_fetch(25)
        results = list(self.g.trending(limit=10))
        assert len(results) == 10

    def test_trending_handles_pages(self):
        self.fake_trending_fetch(25)
        results = list(self.g.trending(limit=50))
        assert len(results) == 50

    def test_trending_correctly_pages(self):
        self.fake_trending_fetch(25, pages=2)
        list(self.g.trending(limit=50))
        calls = self.g._fetch.call_args_list

        assert len(calls) == 2
        assert calls[0][1]['offset'] == 0
        assert calls[1][1]['offset'] == 25

    def test_trending_no_limit_returns_all(self):
        self.fake_trending_fetch(25)
        results = list(self.g.trending(limit=None))
        assert len(results) == 75

    def test_trending_list_returns_list(self):
        self.fake_trending_fetch(25)
        results = self.g.trending_list(limit=10)
        assert isinstance(results, list)
        assert len(results) == 10

    def test_gif(self):
        self.fake_fetch()
        assert isinstance(self.g.gif('foo'), GiphyImage)
        assert self.g._fetch.called_with('foo')

    def test_screensaver(self):
        self.fake_fetch()
        assert isinstance(self.g.screensaver(), GiphyImage)

    def test_screensaver_passes_tag(self):
        self.fake_fetch()
        self.g.screensaver('foo')
        assert self.g._fetch.called_with(tag='foo')

    def test_random_gif(self):
        self.fake_fetch()
        assert isinstance(self.g.random_gif(), GiphyImage)

    def test_translate_returns_none(self):
        self.fake_fetch(result=None)
        assert self.g.translate('foo') is None

    def test_gif_returns_none(self):
        self.fake_fetch(result=None)
        assert self.g.gif('foo') is None

    def test_screensaver_returns_none(self):
        self.fake_fetch(result=None)
        assert self.g.screensaver('foo') is None

    def test_translate_raises_strict(self):
        self.fake_fetch(result=None)
        self.assertRaises(GiphyApiException, self.g.translate, 'foo', strict=True)

    def test_gif_returns_raises_strict(self):
        self.fake_fetch(result=None)
        self.assertRaises(GiphyApiException, self.g.gif, 'foo', strict=True)

    def test_screensaver_raises_strict(self):
        self.fake_fetch(result=None)
        self.assertRaises(GiphyApiException, self.g.screensaver, 'foo', strict=True)

    def test_strict_for_all(self):
        self.g = Giphy(strict=True)
        self.fake_fetch(result=None)

        self.assertRaises(GiphyApiException, self.g.translate, 'foo', strict=False)
        self.assertRaises(GiphyApiException, self.g.gif, 'foo', strict=False)
        self.assertRaises(GiphyApiException, self.g.screensaver, 'foo', strict=False)

    @patch('requests.post')
    def test_upload(self, post):
        resp = Mock()
        resp.json.return_value = {
            "data": {"id": "testid"},
            "meta": {"status": 200}
        }
        post.return_value = resp
        self.g.gif = Mock(return_value="test")
        self.assertEqual(self.g.upload(['foo', 'bar'], '/dev/null'), "test")
        self.assertTrue(post.called)
        self.g.gif.assert_called_with("testid")