import pytest

import finoex
import yaml

@pytest.mark.parametrize(('source_object', 'expected_yaml'), [
    [finoex.Sum(1.23, 'EUR'), "!sum '1.23 EUR'\n"],
    [finoex.Sum(20.45, 'US$'), "!sum '20.45 USD'\n"],
    ])
def test_to_yaml(source_object, expected_yaml):
    class Dumper(yaml.Dumper):
        pass
    finoex.Sum.register_yaml_representer(Dumper)
    assert expected_yaml == yaml.dump(source_object, Dumper = Dumper)

@pytest.mark.parametrize(('expected_object', 'source_yaml'), [
    [finoex.Sum(1.23, 'EUR'), "!sum 1.23 EUR"],
    [finoex.Sum(20.45, 'US$'), "!sum 20.45 USD"],
    ])
def test_from_yaml(expected_object, source_yaml):
    class Loader(yaml.Loader):
        pass
    finoex.Sum.register_yaml_constructor(Loader)
    assert expected_object == yaml.load(source_yaml, Loader = Loader)