========================
 A unit doctest
========================

CurrencyData
---------------
    >>> from currency.converter.currency_data import CurrencyData
    >>> currency_data = CurrencyData()
    >>> from currency.converter.interfaces import ICurrencyData
    >>> ICurrencyData.providedBy(currency_data)
    True

Check Methods withought any currency data.
--------------------------------------------------
    >>> currency_data.updated_date()
    False
    >>> currency_data.currency_codes()
    ['EUR']
    >>> currency_data.currency_code_data()
    False
    >>> currency_data.currency_code_tuples()
    [('EUR', (u'Euro', u'\u20ac'))]
    >>> currency_data.days()
    [1]

Check Methods with currency data.
------------------------------------------
    >>> currency_data.currencies = [('2008-08-15', {'USD': '1.4729', 'EEK': '15.6466', 'IDR': '13535.95', 'BGN': '1.9558', 'ISK': '121.13', 'GBP': '0.7907', 'DKK': '7.4586', 'SKK': '30.305', 'CAD': '1.5685', 'MXN': '15.0024', 'HUF': '239.45', 'RON': '3.549', 'MYR': '4.9313', 'SEK': '9.355', 'SGD': '2.0845', 'HKD': '11.509', 'AUD': '1.7031', 'CHF': '1.6158', 'KRW': '1531.37', 'CNY': '10.1188', 'TRY': '1.7474', 'HRK': '7.2177', 'NZD': '2.1044', 'LVL': '0.7032', 'THB': '49.872', 'LTL': '3.4528', 'NOK': '7.9665', 'RUB': '36.132', 'JPY': '162.7', 'CZK': '24.485', 'BRL': '2.3994', 'PLN': '3.338', 'PHP': '66.5', 'ZAR': '11.6987'}), ('2008-08-14', {'USD': '1.4907', 'EEK': '15.6466', 'IDR': '13685.37', 'BGN': '1.9558', 'ISK': '120.63', 'GBP': '0.7953', 'DKK': '7.4591', 'SKK': '30.325', 'CAD': '1.5775', 'MXN': '15.1261', 'HUF': '237.28', 'RON': '3.5265', 'MYR': '4.9655', 'SEK': '9.3838', 'SGD': '2.0984', 'HKD': '11.6426', 'AUD': '1.701', 'CHF': '1.6219', 'KRW': '1549.88', 'CNY': '10.2262', 'TRY': '1.766', 'HRK': '7.1874', 'NZD': '2.1197', 'LVL': '0.7035', 'THB': '50.274', 'LTL': '3.4528', 'NOK': '8.006', 'RUB': '36.2275', 'JPY': '163.36', 'CZK': '24.351', 'BRL': '2.3983', 'PLN': '3.309', 'PHP': '66.86', 'ZAR': '11.6461'}), ('2008-08-13', {'USD': '1.4903', 'IDR': '13680.95', 'BGN': '1.9558', 'ISK': '122.3', 'GBP': '0.7942', 'DKK': '7.4594', 'SKK': '30.337', 'CAD': '1.5916', 'MXN': '15.1556', 'HUF': '237.14', 'RON': '3.5463', 'MYR': '4.9441', 'SEK': '9.3771', 'SGD': '2.0931', 'HKD': '11.6362', 'AUD': '1.712', 'CHF': '1.6211', 'KRW': '1549.17', 'CNY': '10.219', 'TRY': '1.7583', 'HRK': '7.2177', 'NZD': '2.1369', 'LVL': '0.7036', 'THB': '50.201', 'LTL': '3.4528', 'NOK': '7.996', 'RUB': '36.1045', 'JPY': '162.05', 'CZK': '23.942', 'BRL': '2.4127', 'PLN': '3.2861', 'PHP': '66.56', 'ZAR': '11.6612'})]
    >>> currency_data.updated_date()
    '2008-08-15'
    >>> currency_data.currency_codes()
    ['EUR', 'USD', 'EEK', 'IDR', 'BGN', 'ISK', 'GBP', 'DKK', 'SKK', 'CAD', 'JPY', 'HUF', 'RON', 'MYR', 'SEK', 'SGD', 'HKD', 'AUD', 'CHF', 'KRW', 'CNY', 'TRY', 'HRK', 'NZD', 'LVL', 'THB', 'LTL', 'NOK', 'RUB', 'MXN', 'CZK', 'BRL', 'PLN', 'PHP', 'ZAR']
    >>> currency_data.currency_code_data().has_key('USD')
    True
    >>> currency_data.currency_code_tuples()[1]
    ('USD', (u'US Dollar', u'$'))
    >>> average_usd = (1.4729 + 1.4907 + 1.4903) / 3
    >>> currency_data.currency_code_average(3).get('USD') == average_usd
    True
    >>> average_eek = (15.6466 + 15.6466) / 2
    >>> currency_data.currency_code_average(3).get('EEK') == average_eek
    True
    >>> currency_data.days()
    [1, 2, 3]
    >>> currency_data.currency_rate_against_base_code(2, 'EUR').has_key('EUR')
    False
    >>> currency_data.currency_rate_against_base_code(2, 'EUR').get('USD') == (1.4729 + 1.4907) / 2
    True
    >>> currency_data.currency_rate_against_base_code(2, 'USD').has_key('USD')
    False
    >>> currency_data.currency_rate_against_base_code(2, 'USD').get('JPY') == (162.7 + 163.36) / (1.4729 + 1.4907)
    True
    >>> currency_data.currency_rate_against_base_code_with_margin(2, 'USD', 5.00).get('JPY') == currency_data.currency_rate_against_base_code(2, 'USD').get('JPY') * (100 + 5.00) / 100
    True


Creat Mock object for testing BrowserView
----------------------------------------------------
    >>> class Mock(object):
    ...     def __init__(self, **kwargs):
    ...         for k, v in kwargs.items(): setattr(self, k, v)

    >>> portal = Mock()
    >>> context = Mock(portal_url=Mock(getPortalObject=lambda: portal))

    >>> from currency.converter.browser.currency_manager import CurrencyManagerView
    >>> view = CurrencyManagerView(context, None)


