File: build_test.py

package info (click to toggle)
python-dict2xml 1.7.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 184 kB
  • sloc: python: 768; xml: 108; sh: 36; makefile: 7
file content (110 lines) | stat: -rw-r--r-- 3,706 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# coding: spec

import json
import os
from textwrap import dedent
from unittest import mock

import pytest

from dict2xml import Converter, DataSorter, dict2xml

examples = os.path.join(os.path.dirname(__file__), "examples")

describe "Build":
    describe "Convenience Function":

        it "Creates a Converter with *args and **kwargs and calls build on it with provided data":
            data = mock.Mock(name="data")
            serialized = mock.Mock(name="serialized")

            converter = mock.Mock(name="converter")
            converter.build.return_value = serialized

            FakeConverter = mock.Mock(name="Converter", return_value=converter)
            data_sorter = DataSorter.never()

            with mock.patch("dict2xml.Converter", FakeConverter):
                assert (
                    dict2xml(
                        data,
                        wrap="wrap",
                        indent="indent",
                        newlines=False,
                        iterables_repeat_wrap=False,
                        closed_tags_for=["one"],
                        data_sorter=data_sorter,
                    )
                    is serialized
                )

            FakeConverter.assert_called_once_with(wrap="wrap", indent="indent", newlines=False)
            converter.build.assert_called_once_with(
                data, iterables_repeat_wrap=False, closed_tags_for=["one"], data_sorter=data_sorter
            )

    describe "Just Working":

        @pytest.fixture()
        def assertResult(self):
            def assertResult(result, **kwargs):
                data = {"a": [1, 2, 3], "b": {"c": "d", "e": {"f": "g"}}, "d": 1}

                converter = Converter(wrap="all", **kwargs)
                print(converter.build(data))
                assert dedent(result).strip() == converter.build(data)

            return assertResult

        it "with both indentation and newlines", assertResult:
            expected = """
                <all>
                  <a>1</a>
                  <a>2</a>
                  <a>3</a>
                  <b>
                    <c>d</c>
                    <e>
                      <f>g</f>
                    </e>
                  </b>
                  <d>1</d>
                </all>
            """
            assertResult(expected, indent="  ", newlines=True)

        it "with just newlines", assertResult:
            expected = """
                <all>
                <a>1</a>
                <a>2</a>
                <a>3</a>
                <b>
                <c>d</c>
                <e>
                <f>g</f>
                </e>
                </b>
                <d>1</d>
                </all>
            """
            assertResult(expected, indent=None, newlines=True)

        it "with just indentation", assertResult:
            # Indentation requires newlines to work
            expected = "<all><a>1</a><a>2</a><a>3</a><b><c>d</c><e><f>g</f></e></b><d>1</d></all>"
            assertResult(expected, indent="  ", newlines=False)

        it "with no whitespace", assertResult:
            expected = "<all><a>1</a><a>2</a><a>3</a><b><c>d</c><e><f>g</f></e></b><d>1</d></all>"
            assertResult(expected, indent=None, newlines=False)

        it "works on a massive, complex dictionary":
            with open(os.path.join(examples, "python_dict.json"), "r") as fle:
                data = json.load(fle)

            with open(os.path.join(examples, "result.xml"), "r") as fle:
                result = fle.read()

            converter = Converter(wrap="all", indent="  ", newlines=True)
            assert dedent(result).strip() == converter.build(data)