class TestCurrencyConverter(unittest.TestCase):

    def setUp(self):
        self.converter = CurrencyConverter()

    def test_rates_exist(self):
        self.assertTrue(self.converter.rates)
        self.assertTrue(self.converter.available_currency_codes())

    def test_calc(self):
        self.assertEqual(self.converter.calc(100, 'USD', 'USD'), 100)

    def test_codes(self):
        self.assertEqual(self.converter.check_currency('USD'), 'USD')
        self.assertEqual(self.converter.check_currency('CZK'), 'CZK')

    def test_symbols(self):
        for symb, code in self.converter.symbols.items():
                self.assertEqual(self.converter.check_currency(symb), code)

    def test_wrong_code(self):
        self.assertRaises(ValueError, self.converter.check_currency, 'CZR')
        self.assertRaises(ValueError, self.converter.check_currency, '')
        self.assertRaises(ValueError, self.converter.check_currency, '*')

    def test_convert(self):
        self.converter.rates = {
            'EUR': 1,
            'USD': 0.885015,
            'CZK': 0.0388622
        }
        
        result = self.converter.convert('EUR', 1, None)
        inside = ['currency', 'EUR', 'amount', '1.0', 'output', 'USD', '1.13', 'CZK', '25.73']
        for s in inside:
            self.assertIn(s, result)

        result2 = self.converter.convert('EUR', 1, 'CZK')
        inside = ['currency', 'EUR', 'amount', '1.0', 'output', 'CZK', '25.73']
        for s in inside:
            self.assertIn(s, result2)