Passed
Push — master ( c968e9...1af3af )
by Matěj
04:05 queued 11s
created

any_test_help   A

Complexity

Total Complexity 42

Size/Duplication

Total Lines 260
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 170
dl 0
loc 260
rs 9.0399
c 0
b 0
f 0
wmc 42

24 Functions

Rating   Name   Duplication   Size   Complexity  
A any_test_create_node_dict_for_JsTree() 0 5 2
A get_dict_of_simple_tree() 0 2 1
A get_questions_with_option_show_failed_rules() 0 6 2
A compare_results_json() 0 10 1
A compare_results_html() 0 12 5
A get_parser() 0 2 1
A get_src() 0 4 1
A any_get_test_data_json() 0 3 2
A if_not_installed_inquirer_with_option_show_not_selected_rules_and_show_failed_rules() 0 9 2
A any_test_tree_to_dict_of_tree() 0 2 1
A get_questions_not_selected_and_show_failed_rules() 0 7 1
A if_not_installed_inquirer_with_option_show_failed_rules() 0 7 2
A any_test_treeEvaluation_with_tree() 0 2 1
A any_test_dict_to_tree() 0 3 1
A get_simple_tree() 0 30 1
A any_test_transformation_tree_to_Json_for_JsTree() 0 10 1
A any_test_parsing_and_evaluate_scan_rule() 0 4 1
B any_test_treeEvaluation() 0 21 8
A get_questions_not_selected() 0 17 1
A find_any_node() 0 3 1
A get_Converter_simple_tree() 0 2 1
A any_get_tested_file() 0 3 2
A if_not_installed_inquirer_with_option_show_not_selected_rules() 0 8 2
A get_random_dir_in_tmp() 0 2 1

How to fix   Complexity   

Complexity

Complex classes like any_test_help often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
import os
2
import json
3
import sys
4
import mock
5
import pytest
6
import uuid
7
import tempfile
8
import re
9
10
from oval_graph.oval_node import restore_dict_to_tree, OvalNode
11
from oval_graph.converter import Converter
12
from oval_graph.xml_parser import XmlParser
13
14
15
def any_test_treeEvaluation(tree, expect, file_name=None):
16
    if file_name is not None and tree is None:
17
        if file_name.startswith('AND'):
18
            dir = 'test_data_and'
19
        elif file_name.startswith('OR'):
20
            dir = 'test_data_or'
21
        elif file_name.startswith('XOR'):
22
            dir = 'test_data_xor'
23
        elif file_name.startswith('ONE'):
24
            dir = 'test_data_one'
25
        else:
26
            dir = 'test_data_NONE'
27
28
        src = 'test_data/' + dir + '/' + file_name
29
        data = dict()
30
        with open(get_src(src), "r") as f:
31
            data = json.load(f)
32
        assert restore_dict_to_tree(
33
            data).evaluate_tree() == expect
34
    else:
35
        assert tree.evaluate_tree() == expect
36
37
38
def any_test_parsing_and_evaluate_scan_rule(src, rule_id, result):
39
    parser = XmlParser(get_src(src))
40
    oval_tree = parser.get_oval_tree(rule_id)
41
    any_test_treeEvaluation(oval_tree, result)
42
43
44
def get_random_dir_in_tmp():
45
    return os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))
46
47
48
def any_get_test_data_json(src):
49
    with open(get_src(src), 'r') as f:
50
        return json.load(f)
51
52
53
def any_get_tested_file(src):
54
    with open(get_src(src), 'r') as f:
55
        return f.readlines()
56
57
58
def get_Converter_simple_tree():
59
    return Converter(get_simple_tree())
60
61
62
def any_test_create_node_dict_for_JsTree(tree, json_src):
63
    data = dict()
64
    with open(get_src(json_src), "r") as f:
65
        data = json.load(f)
66
    assert Converter(tree).to_JsTree_dict() == data
67
68
69
def get_simple_tree():
70
    return OvalNode(
71
        node_id=1,
72
        node_type='operator',
73
        value='and',
74
        children=[
75
            OvalNode(
76
                node_id=2,
77
                node_type='value',
78
                value='true',
79
            ),
80
            OvalNode(
81
                node_id=3,
82
                node_type='value',
83
                value='false',
84
            ),
85
            OvalNode(
86
                node_id=4,
87
                node_type='operator',
88
                value='or',
89
                children=[
90
                    OvalNode(
91
                        node_id=5,
92
                        node_type='value',
93
                        value='false',
94
                    ),
95
                    OvalNode(
96
                        node_id=6,
97
                        node_type='value',
98
                        value="true",
99
                    ),
100
                ]
101
            )
102
        ]
103
    )
104
105
106
def get_dict_of_simple_tree():
107
    return get_simple_tree().save_tree_to_dict()
108
109
110
def any_test_transformation_tree_to_Json_for_JsTree(
111
        src, test_data_src, rule_id):
112
    test_data = any_get_test_data_json(test_data_src)
113
114
    parser = XmlParser(get_src(src))
115
    oval_tree = parser.get_oval_tree(rule_id)
116
117
    assert oval_tree.node_id == rule_id
118
    out_data = Converter(oval_tree).to_JsTree_dict()
119
    assert out_data == test_data
120
121
122
def any_test_tree_to_dict_of_tree(tree, dict_of_tree):
123
    assert tree.save_tree_to_dict() == dict_of_tree
124
125
126
def find_any_node(tree, node_id):
127
    findTree = tree.find_node_with_ID(node_id)
128
    assert findTree.node_id == node_id
129
130
131
def any_test_treeEvaluation_with_tree(tree, expect):
132
    assert tree.evaluate_tree() == expect
133
134
135
def any_test_dict_to_tree(dict_of_tree):
136
    treedict_of_tree = restore_dict_to_tree(dict_of_tree)
137
    assert treedict_of_tree.save_tree_to_dict() == dict_of_tree
138
139
140
def get_parser(src):
141
    return XmlParser(get_src(src))
142
143
144
def get_src(src):
145
    _dir = os.path.dirname(os.path.realpath(__file__))
146
    FIXTURE_DIR = os.path.join(_dir, src)
147
    return str(FIXTURE_DIR)
148
149
150
def compare_results_html(result):
151
    result_ = any_get_tested_file(result)
152
    referenc_pattern = any_get_tested_file(
153
        'test_data/referenc_pattern_html_report.txt')
154
    matched_rows = []
155
    for row in result_:
156
        for row_in_pattern in referenc_pattern:
157
            if row == row_in_pattern:
158
                matched_rows.append(row)
159
            if len(matched_rows) == len(referenc_pattern):
160
                break
161
    assert matched_rows == referenc_pattern
162
163
164
def compare_results_json(result):
165
    result = any_get_test_data_json(result)
166
    referenc_result = any_get_test_data_json(
167
        'test_data/referenc_result_data_json.json')
168
    rule_name = "xccdf_org.ssgproject.content_rule_package_abrt_removed"
169
    result_rule_name = [
170
        x for x in result.keys() if re.search(
171
            rule_name, x)]
172
    assert (result[result_rule_name[0]]
173
            == referenc_result[rule_name])
174
175
176
def get_questions_not_selected(capsys, client):
177
    out = client.get_questions()[0].choices
178
    outResult = [
179
        'xccdf_org.ssgproject.content_rule_package_abrt_removed',
180
        'xccdf_org.ssgproject.content_rule_package_sendmail_removed']
181
    assert out == outResult
182
    captured = capsys.readouterr()
183
# Problem with CI when si called function test_arf_to_hml.test_get_question_not_selected
184
# other calls work with ==.
185
    assert (('== The not selected rule IDs ==\n'
186
             'xccdf_org.ssgproject.content_rule_package_nis_removed(Not selected)\n'
187
             'xccdf_org.ssgproject.content_rule_package_ntpdate_removed(Not selected)\n'
188
             'xccdf_org.ssgproject.content_rule_package_telnetd_removed(Not selected)\n'
189
             'xccdf_org.ssgproject.content_rule_package_gdm_removed(Not selected)\n'
190
             'xccdf_org.ssgproject.content_rule_package_setroubleshoot_removed(Not selected)\n'
191
             'xccdf_org.ssgproject.content_rule_package_mcstrans_removed(Not selected)\n')
192
            in captured.out)
193
194
195
def get_questions_not_selected_and_show_failed_rules(capsys, client):
196
    out = client.get_questions()[0].choices
197
    outResult = ['xccdf_org.ssgproject.content_rule_package_abrt_removed']
198
    assert out == outResult
199
    captured = capsys.readouterr()
200
    assert captured.out == (
201
        '== The not selected rule IDs ==\n'
202
        'xccdf_org.ssgproject.content_rule_package_nis_removed(Not selected)\n'
203
        'xccdf_org.ssgproject.content_rule_package_ntpdate_removed(Not selected)\n'
204
        'xccdf_org.ssgproject.content_rule_package_telnetd_removed(Not selected)\n'
205
        'xccdf_org.ssgproject.content_rule_package_gdm_removed(Not selected)\n'
206
        'xccdf_org.ssgproject.content_rule_package_setroubleshoot_removed(Not selected)\n'
207
        'xccdf_org.ssgproject.content_rule_package_mcstrans_removed(Not selected)\n')
208
209
210
def get_questions_with_option_show_failed_rules(client):
211
    out = client.get_questions()[0].choices
212
    rule1 = 'xccdf_org.ssgproject.content_rule_package_abrt_removed'
213
    assert out[0] == rule1
214
    with pytest.raises(Exception, match="list index out of range"):
215
        assert out[2] is None
216
217
218
def if_not_installed_inquirer_with_option_show_failed_rules(capsys, client):
219
    with mock.patch.dict(sys.modules, {'inquirer': None}):
220
        out = client.run_gui_and_return_answers()
221
        assert out is None
222
        captured = capsys.readouterr()
223
        assert captured.out == (
224
            '== The Rule IDs ==\n'
225
            "'xccdf_org.ssgproject.content_rule_package_abrt_removed\\b'\n"
226
            "You haven't got installed inquirer lib. Please copy id rule with you"
227
            " want use and put it in command\n")
228
229
230
def if_not_installed_inquirer_with_option_show_not_selected_rules(
231
        capsys, client):
232
    with mock.patch.dict(sys.modules, {'inquirer': None}):
233
        out = client.run_gui_and_return_answers()
234
        assert out is None
235
        captured = capsys.readouterr()
236
        assert captured.out == (
237
            '== The Rule IDs ==\n'
238
            "'xccdf_org.ssgproject.content_rule_package_abrt_removed\\b'\n"
239
            "'xccdf_org.ssgproject.content_rule_package_sendmail_removed\\b'\n"
240
            '== The not selected rule IDs ==\n'
241
            'xccdf_org.ssgproject.content_rule_package_nis_removed(Not selected)\n'
242
            'xccdf_org.ssgproject.content_rule_package_ntpdate_removed(Not selected)\n'
243
            'xccdf_org.ssgproject.content_rule_package_telnetd_removed(Not selected)\n'
244
            'xccdf_org.ssgproject.content_rule_package_gdm_removed(Not selected)\n'
245
            'xccdf_org.ssgproject.content_rule_package_setroubleshoot_removed(Not selected)\n'
246
            'xccdf_org.ssgproject.content_rule_package_mcstrans_removed(Not selected)\n'
247
            "You haven't got installed inquirer lib. Please copy id rule with you"
248
            " want use and put it in command\n")
249
250
251
def if_not_installed_inquirer_with_option_show_not_selected_rules_and_show_failed_rules(
252
        capsys,
253
        client):
254
    with mock.patch.dict(sys.modules, {'inquirer': None}):
255
        out = client.run_gui_and_return_answers()
256
        assert out is None
257
        captured = capsys.readouterr()
258
        assert captured.out == (
259
            '== The Rule IDs ==\n'
260
            "'xccdf_org.ssgproject.content_rule_package_abrt_removed\\b'\n"
261
            '== The not selected rule IDs ==\n'
262
            'xccdf_org.ssgproject.content_rule_package_nis_removed(Not selected)\n'
263
            'xccdf_org.ssgproject.content_rule_package_ntpdate_removed(Not selected)\n'
264
            'xccdf_org.ssgproject.content_rule_package_telnetd_removed(Not selected)\n'
265
            'xccdf_org.ssgproject.content_rule_package_gdm_removed(Not selected)\n'
266
            'xccdf_org.ssgproject.content_rule_package_setroubleshoot_removed(Not selected)\n'
267
            'xccdf_org.ssgproject.content_rule_package_mcstrans_removed(Not selected)\n'
268
            "You haven't got installed inquirer lib. Please copy id rule with you"
269
            " want use and put it in command\n")
270