class TestQuotationProvider(unittest.TestCase):

    def setUp(self):
        self.provider = QuotationProvider(quotation_url='http://localhost/?')

    @patch('os.environ.get')
    def test_constructor_empty_quotation_env_var(self, mock_env_get):
        mock_env_get.return_value = ''

        try:
            QuotationProvider()
            self.fail("Should not be able to instantiate provider without mongo")
        except SettingsError as e:
            error = "You must supply quotation_url or set the QUOTATION_URL environment variable."
            self.assertEqual(error, '{0}'.format(e))

    @patch('os.environ.get')
    def test_constructor_with_quotation_env_var(self, mock_env_get):
        mock_env_get.return_value = 'http://localhost/?'

        provider = QuotationProvider()

        self.assertEqual('http://localhost/?', provider.BASE_URL)

    @patch('requests.get')
    def test_create_error_no_hashtags(self, mock_get):
        mock_get.return_value = MagicMock(status_code=500)

        quotation = self.provider.create({}, 140)

        self.assertEqual('No quotations found', quotation)
        mock_get.assert_called_with('http://localhost/?')

    @patch('requests.get')
    def test_create_error_with_hashtags(self, mock_get):
        mock_get.return_value = MagicMock(status_code=500)
        mention = {'entities': {'hashtags': [{'text': 'love'}, {'text': 'hate'}]}}

        quotation = self.provider.create(mention, 140)

        self.assertEqual('No quotations found matching #love #hate', quotation)
        mock_get.assert_called_with('http://localhost/?&search=love'
                                    '&search=hate')

    @patch('requests.get')
    def test_create_no_quotations(self, mock_get):
        mock_result = MagicMock(status_code=200)
        mock_result.json.return_value = {'results': []}
        mock_get.return_value = mock_result

        quotation = self.provider.create({}, 140)

        self.assertEqual('No quotations found', quotation)
        mock_get.assert_called_with('http://localhost/?')

    @patch('requests.get')
    def test_create_success(self, mock_get):
        mock_result = MagicMock(status_code=200)
        mock_result.json.return_value = {'results': [{
            'text': 'Here I stay',
            'author': 'Henrietta'
        }]}
        mock_get.return_value = mock_result

        message = self.provider.create({}, 140)

        self.assertEqual('Here I stay - Henrietta', message)
 def setUp(self):
     self.provider = QuotationProvider(quotation_url='http://localhost/?')