def test_fetch(self, mock_utcnow):
        """Test whether it fetches data from the Google Search API"""

        mock_utcnow.return_value = datetime.datetime(2017, 1, 1,
                                                     tzinfo=dateutil.tz.tzutc())
        setup_http_server()

        backend = GoogleHits(['bitergia'])
        items = [item for item in backend.fetch()]

        self.assertEqual(len(items), 1)
        item = items[0]
        self.assertEqual(item['data']['fetched_on'], 1483228800.0)
        self.assertEqual(item['data']['id'], '18e8f9809f9c539bfe0ac5ad2724323873931825')
        self.assertEqual(item['data']['keywords'], ['bitergia'])
        self.assertEqual(item['uuid'], '119b60909d6560e2d22a579404c30c98f5cdc33d')
        self.assertEqual(item['origin'], 'https://www.google.com/search')
        self.assertEqual(item['updated_on'], 1483228800.0)
        self.assertEqual(item['category'], CATEGORY_HITS)
        self.assertEqual(item['tag'], 'https://www.google.com/search')

        backend = GoogleHits(['bitergia', 'grimoirelab'])
        items = [item for item in backend.fetch()]

        self.assertEqual(len(items), 1)
        item = items[0]

        self.assertEqual(item['data']['fetched_on'], 1483228800.0)
        self.assertEqual(item['data']['id'], '2aaa5f3ab512ca6c451cb3c21c77da3d4510f75c')
        self.assertEqual(item['data']['keywords'], ['bitergia', 'grimoirelab'])
        self.assertEqual(item['uuid'], '3a83dfa224891986d091e708a2afd165df59576b')
        self.assertEqual(item['origin'], 'https://www.google.com/search')
        self.assertEqual(item['updated_on'], 1483228800.0)
        self.assertEqual(item['category'], CATEGORY_HITS)
        self.assertEqual(item['tag'], 'https://www.google.com/search')
    def test_fetch_no_hits(self, mock_utcnow):
        """Test whether it handles queries which have no hits"""

        mock_utcnow.return_value = datetime.datetime(
            2017, 1, 1, tzinfo=dateutil.tz.tzutc())
        setup_http_server(no_hits=True)

        backend = GoogleHits(['bitergia'])

        with self.assertLogs() as cm:
            items = [item for item in backend.fetch()]
            self.assertEqual(
                cm.output[-2],
                "WARNING:perceval.backends.core.googlehits:No hits for ['bitergia']"
            )

        self.assertEqual(len(items), 1)
        item = items[0]
        self.assertEqual(item['data']['fetched_on'], 1483228800.0)
        self.assertEqual(item['data']['id'],
                         '18e8f9809f9c539bfe0ac5ad2724323873931825')
        self.assertEqual(item['data']['hits'], 0)
        self.assertEqual(item['data']['keywords'], ['bitergia'])
        self.assertEqual(item['uuid'],
                         '119b60909d6560e2d22a579404c30c98f5cdc33d')
        self.assertEqual(item['origin'], 'https://www.google.com/search')
        self.assertEqual(item['updated_on'], 1483228800.0)
        self.assertEqual(item['category'], CATEGORY_HITS)
        self.assertEqual(item['tag'], 'https://www.google.com/search')
    def test_search_fields(self, mock_utcnow):
        """Test whether the search_fields is properly set"""

        mock_utcnow.return_value = datetime.datetime(
            2017, 1, 1, tzinfo=dateutil.tz.tzutc())
        setup_http_server()

        backend = GoogleHits(['bitergia'])
        items = [item for item in backend.fetch()]

        item = items[0]
        self.assertEqual(backend.metadata_id(item['data']),
                         item['search_fields']['item_id'])
        self.assertListEqual(item['data']['keywords'], ['bitergia'])
        self.assertListEqual(item['data']['keywords'],
                             item['search_fields']['keywords'])