Beispiel #1
0
    def setUp(self):
        # Open non-persisted db
        repository = Rates(':memory:', True)

        # Pre-register some exchange rates
        self.__knownRates = [('PSD', 2.0), ('USD', 1.6), ('RUB', 1.9),
                             ('TRY', 0.725)]
        for (currency, rate) in self.__knownRates:
            repository.setRate(currency, rate)

        self.__converter = Converter(repository)
Beispiel #2
0
class ConverterTests(unittest.TestCase):
    def setUp(self):
        # Open non-persisted db
        repository = Rates(':memory:', True)

        # Pre-register some exchange rates
        self.__knownRates = [('PSD', 2.0), ('USD', 1.6), ('RUB', 1.9),
                             ('TRY', 0.725)]
        for (currency, rate) in self.__knownRates:
            repository.setRate(currency, rate)

        self.__converter = Converter(repository)

    def test_someConversions(self):
        asserts = [('RUB', 'TRY', '4.85', '1.85'), \
                   ('EUR', 'USD', '3.70', '5.92'), \
                   ('TRY', 'TRY', '0.45', '0.45'), \
                   ('EUR', 'EUR', '4.85', '4.85'), \
                   ('PSD', 'USD', '0.00', '0.00'), \
                   ('TRY', 'EUR', '7.87', '10.86'), \
                  ]

        for (fromCurrency, toCurrency, value, expectedValue) in asserts:
            self.assertEqual(
                self.__converter.convert_and_round(fromCurrency, toCurrency,
                                                   Decimal(value)),
                Decimal(expectedValue))

    def test_someInvalidConversions(self):
        asserts = [('RUB', 'CCC'), \
                   ('CCC', 'USD'), \
                   ('CCC', 'CCC'), \
                  ]

        for (fromCurrency, toCurrency) in asserts:
            self.assertRaises(ValueError, self.__converter.convert_and_round,
                              fromCurrency, toCurrency, Decimal('1.00'))

    def test_idempotency(self):
        for value in list(
                map(Decimal, ['1246.87', '0.15', '875.00', '122.36', '0.01'])):
            for (from_currency, _) in self.__knownRates:
                for (to_currency, _) in self.__knownRates:
                    converted_value = self.__converter.convert(
                        to_currency, from_currency, value)
                    idempotent_value = self.__converter.convert_and_round(
                        from_currency, to_currency, converted_value)
                    self.assertEqual(idempotent_value, value)
 def setUp(self):
     server.server.config['TESTING'] = True
     self.app = server.server.test_client()
     rates = Rates(':memory:', True)
     server.converter = Converter(rates)
     rates.setRate('USD', 1.45)
     rates.setRate('TYR', 0.723)
     rates.setRate('KD', 1.45)
     rates.setRate('RTATATTATATA', 1.45)
    def setUp(self):
        # Open non-persisted db
        repository = Rates(':memory:', True)

        # Pre-register some exchange rates
        self.__knownRates = [('PSD', 2.0), ('USD', 1.6), ('RUB', 1.9), ('TRY', 0.725)]
        for (currency, rate) in self.__knownRates:
            repository.setRate(currency, rate)

        self.__converter = Converter(repository)
class ConverterTests(unittest.TestCase):
    def setUp(self):
        # Open non-persisted db
        repository = Rates(':memory:', True)

        # Pre-register some exchange rates
        self.__knownRates = [('PSD', 2.0), ('USD', 1.6), ('RUB', 1.9), ('TRY', 0.725)]
        for (currency, rate) in self.__knownRates:
            repository.setRate(currency, rate)

        self.__converter = Converter(repository)

    def test_someConversions(self):
        asserts = [('RUB', 'TRY', '4.85', '1.85'), \
                   ('EUR', 'USD', '3.70', '5.92'), \
                   ('TRY', 'TRY', '0.45', '0.45'), \
                   ('EUR', 'EUR', '4.85', '4.85'), \
                   ('PSD', 'USD', '0.00', '0.00'), \
                   ('TRY', 'EUR', '7.87', '10.86'), \
                  ]

        for (fromCurrency, toCurrency, value, expectedValue) in asserts:
            self.assertEqual(self.__converter.convert_and_round(fromCurrency, toCurrency, Decimal(value)), Decimal(expectedValue))

    def test_someInvalidConversions(self):
        asserts = [('RUB', 'CCC'), \
                   ('CCC', 'USD'), \
                   ('CCC', 'CCC'), \
                  ]

        for (fromCurrency, toCurrency) in asserts:
            self.assertRaises(ValueError, self.__converter.convert_and_round, fromCurrency, toCurrency, Decimal('1.00'))

    def test_idempotency(self):
        for value in list(map(Decimal, ['1246.87', '0.15', '875.00', '122.36', '0.01'])):
            for (from_currency, _) in self.__knownRates:
                for (to_currency, _) in self.__knownRates:
                    converted_value = self.__converter.convert(to_currency, from_currency, value)
                    idempotent_value = self.__converter.convert_and_round(from_currency, to_currency, converted_value)
                    self.assertEqual(idempotent_value, value)
Beispiel #6
0
    if not query:
        return make_error_response()

    value, origin_currency, target_currency = query

    try:
        converted_value = converter.convert_and_round(origin_currency, target_currency, value)
    except:
        return make_error_response()

    result = '%s %s = %s %s' % (value, origin_currency, converted_value, target_currency)
    return jsonify(answer = result)

def make_error_response():
    return jsonify(answer = "I' sorry Dave. I'm afraid. I can't do that"), '500 UnknownError'

if __name__ == "__main__":
     # Parse arguments
    db_file = sys.argv[1] if len(sys.argv) > 1 else "rates.pdl"
    debug = '--debug' in sys.argv

    # Load data from db
    rates = Rates(db_file, False)
    print("%s exchange rates loaded from %s" % (rates.getRatesCount(), db_file))

    # Create converter service
    converter = Converter(rates)

    # Start server
    server.run(debug=True)