# -*- coding: utf-8 -*- import pytest import os import yaml import dingguo import difflib import datetime def get_figure_a(): return dingguo.Figure(12.3, u'km') def get_figure_b(): return dingguo.Figure(12300, u'米') def get_sum_a(): return dingguo.Sum(1.23, u'EUR') def get_sum_b(): return dingguo.Sum(20.45, u'€') def get_item_a(): return dingguo.Item( name = u'item a', price_brutto = get_sum_a(), ) def get_item_b(): return dingguo.Item( name = u'item β', price_brutto = get_sum_b(), ) def get_order_a(): order = dingguo.Order( platform = u'platformπ', order_id = u'id', order_date = datetime.datetime(2016, 5, 8, 0, 18, 17), customer_id = u'customer', ) order.items.append(get_item_a()) order.items.append(get_item_b()) return order def to_yaml(data): return yaml.dump(data, default_flow_style = False, allow_unicode = True).decode('utf-8') def yaml_diff(a, b): return '\n'.join(difflib.ndiff( to_yaml(a).split('\n'), to_yaml(b).split('\n'), )) def test_figure_to_yaml(): assert to_yaml(get_figure_a()) == u"""!figure unit: km value: 12.3 """ def test_figure_to_yaml_unicode(): assert to_yaml(get_figure_b()) == u"""!figure unit: 米 value: 12300 """ def test_figure_from_yaml(): assert get_figure_a() == yaml.load(u"""!figure unit: km value: 12.3 """) def test_figure_to_yaml_unicode(): assert get_figure_b() == yaml.load(u"""!figure unit: 米 value: 12300 """) def test_sum_to_yaml_a(): assert to_yaml(get_sum_a()) == u"!sum 'EUR 1.23'\n" def test_sum_to_yaml_b(): assert to_yaml(get_sum_b()) == u"!sum 'EUR 20.45'\n" def test_sum_from_yaml_a(): assert get_sum_a() == yaml.load(u"!sum EUR 1.23") def test_sum_from_yaml_a_sign(): assert get_sum_a() == yaml.load(u"!sum € 1.23") def test_sum_from_yaml_a_quotes(): assert get_sum_a() == yaml.load(u"!sum 'EUR 1.23'") def test_item_to_yaml_a(): assert to_yaml(get_item_a()) == u"""!item name: item a price_brutto: !sum 'EUR 1.23' """ def test_item_to_yaml_b(): assert to_yaml(get_item_b()) == u"""!item name: item β price_brutto: !sum 'EUR 20.45' """ def test_item_from_yaml_a(): assert get_item_a() == yaml.load(u"""!item name: item a price_brutto: !sum 'EUR 1.23' """) def test_item_from_yaml_b(): assert get_item_b() == yaml.load(u"""!item name: item β price_brutto: !sum 'EUR 20.45' """) def test_order_to_yaml(): assert to_yaml(get_order_a()) == u"""!order customer_id: customer discounts: [] items: - !item name: item a price_brutto: !sum 'EUR 1.23' - !item name: item β price_brutto: !sum 'EUR 20.45' order_date: 2016-05-08 order_id: id platform: platformπ """ def test_order_from_yaml(): order_loaded = yaml.load(u"""!order customer_id: customer discounts: [] items: - !item name: item a price_brutto: !sum 'EUR 1.23' - !item name: item β price_brutto: !sum 'EUR 20.45' order_date: 2016-05-08 order_id: id platform: platformπ """) order_expected = get_order_a() assert order_expected == order_loaded, yaml_diff(order_expected, order_loaded)