• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

OpenDataServices / flatten-tool / 6507626273

13 Oct 2023 11:25AM UTC coverage: 42.006% (-53.7%) from 95.72%
6507626273

Pull #433

github

odscjames
New "Geo" optional dependencies

https://github.com/OpenDataServices/flatten-tool/issues/424
Pull Request #433: New "Geo" optional dependencies

38 of 38 new or added lines in 6 files covered. (100.0%)

1466 of 3490 relevant lines covered (42.01%)

4.16 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

29.79
/flattentool/tests/test_roundtrip.py
1
import json
10✔
2
import os
10✔
3

4
import pytest
10✔
5
import xmltodict
10✔
6

7
from flattentool import flatten, unflatten
10✔
8

9

10
@pytest.mark.parametrize("output_format", ["xlsx", "csv"])
10✔
11
def test_roundtrip(tmpdir, output_format):
8✔
12
    input_name = "flattentool/tests/fixtures/tenders_releases_2_releases.json"
×
13
    base_name = "flattentool/tests/fixtures/tenders_releases_base.json"
×
14
    flatten(
×
15
        input_name=input_name,
16
        output_name=tmpdir.join("flattened").strpath + "." + output_format,
17
        output_format=output_format,
18
        schema="flattentool/tests/fixtures/release-schema.json",
19
        root_list_path="releases",
20
        main_sheet_name="releases",
21
    )
22
    unflatten(
×
23
        input_name=tmpdir.join("flattened").strpath + "." + output_format,
24
        output_name=tmpdir.join("roundtrip.json").strpath,
25
        input_format=output_format,
26
        base_json=base_name,
27
        schema="flattentool/tests/fixtures/release-schema.json",
28
        root_list_path="releases",
29
    )
30
    original_json = json.load(open(input_name))
×
31
    roundtripped_json = json.load(tmpdir.join("roundtrip.json"))
×
32

33
    # Not currently possible to roundtrip Nones
34
    # https://github.com/open-contracting/flattening-ocds/issues/35
35
    for release in roundtripped_json["releases"]:
×
36
        release["tender"]["awardCriteriaDetails"] = None
×
37

38
    assert original_json == roundtripped_json
×
39

40

41
@pytest.mark.parametrize("use_titles", [False, True])
10✔
42
@pytest.mark.parametrize("output_format", ["xlsx", "csv"])
10✔
43
def test_roundtrip_360(tmpdir, output_format, use_titles):
8✔
44
    input_name = (
×
45
        "flattentool/tests/fixtures/fundingproviders-grants_fixed_2_grants.json"
46
    )
47
    flatten(
×
48
        input_name=input_name,
49
        output_name=tmpdir.join("flattened").strpath + "." + output_format,
50
        output_format=output_format,
51
        schema="flattentool/tests/fixtures/360-giving-schema.json",
52
        root_list_path="grants",
53
        root_id="",
54
        use_titles=use_titles,
55
        main_sheet_name="grants",
56
    )
57
    unflatten(
×
58
        input_name=tmpdir.join("flattened").strpath + "." + output_format,
59
        output_name=tmpdir.join("roundtrip.json").strpath,
60
        input_format=output_format,
61
        schema="flattentool/tests/fixtures/360-giving-schema.json",
62
        root_list_path="grants",
63
        root_id="",
64
        convert_titles=use_titles,
65
    )
66
    original_json = json.load(open(input_name))
×
67
    roundtripped_json = json.load(tmpdir.join("roundtrip.json"))
×
68

69
    assert original_json == roundtripped_json
×
70

71

72
@pytest.mark.parametrize("use_titles", [False, True])
10✔
73
def test_roundtrip_360_rollup(tmpdir, use_titles):
8✔
74
    input_name = (
×
75
        "flattentool/tests/fixtures/fundingproviders-grants_fixed_2_grants.json"
76
    )
77
    output_format = "csv"
×
78
    output_name = tmpdir.join("flattened").strpath + "." + output_format
×
79
    moved_name = tmpdir.mkdir("flattened_main_only").strpath
×
80

81
    flatten(
×
82
        input_name=input_name,
83
        output_name=output_name,
84
        output_format=output_format,
85
        schema="flattentool/tests/fixtures/360-giving-schema.json",
86
        root_list_path="grants",
87
        root_id="",
88
        use_titles=use_titles,
89
        rollup=True,
90
        main_sheet_name="grants",
91
    )
92

93
    os.rename(output_name + "/grants.csv", moved_name + "/grants.csv")
×
94

95
    unflatten(
×
96
        input_name=moved_name,
97
        output_name=tmpdir.join("roundtrip.json").strpath,
98
        input_format=output_format,
99
        schema="flattentool/tests/fixtures/360-giving-schema.json",
100
        root_list_path="grants",
101
        root_id="",
102
        convert_titles=use_titles,
103
    )
104

105
    original_json = json.load(open(input_name))
×
106
    roundtripped_json = json.load(tmpdir.join("roundtrip.json"))
×
107
    assert original_json == roundtripped_json
×
108

109

110
@pytest.mark.parametrize("output_format", ["xlsx", "csv"])
10✔
111
def test_roundtrip_xml(tmpdir, output_format):
8✔
112
    input_name = "examples/iati/expected.xml"
×
113
    flatten(
×
114
        input_name=input_name,
115
        output_name=tmpdir.join("flattened").strpath + "." + output_format,
116
        output_format=output_format,
117
        root_list_path="iati-activity",
118
        id_name="iati-identifier",
119
        xml=True,
120
    )
121
    unflatten(
×
122
        input_name=tmpdir.join("flattened").strpath + "." + output_format,
123
        output_name=tmpdir.join("roundtrip.xml").strpath,
124
        input_format=output_format,
125
        root_list_path="iati-activity",
126
        id_name="iati-identifier",
127
        xml=True,
128
    )
129
    original_xml = open(input_name, "rb")
×
130
    roundtripped_xml = tmpdir.join("roundtrip.xml").open("rb")
×
131

132
    # Compare without ordering, by using dict_constructor=dict instead of
133
    # OrderedDict
134
    original = xmltodict.parse(original_xml, dict_constructor=dict)
×
135
    roundtripped = xmltodict.parse(roundtripped_xml, dict_constructor=dict)
×
136
    assert original == roundtripped
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc