Passed
Push — main ( 7962d1...8f22bc )
by Eran
03:04
created

test_materializers.valid_materialization()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
import functools
2
from unittest.mock import patch
3
4
import pytest
5
from matplotlib import pyplot as plt
6
7
import graphinate
8
9
MODAL_RADIOBUTTON_CHOOSER = 'graphinate.materializers.modal_radiobutton_chooser'
10
11
12
def test_materialize(map_graph_model, capsys):
13
    expected_snippet = '"graph": {\n    "name": "Map",'
14
    *_, graph_model = map_graph_model
15
    builder, actualizer = graphinate.materializers.Materializers.D3Graph.value
16
    graphinate.materialize(graph_model, builder=builder, actualizer=actualizer)
17
    captured = capsys.readouterr()
18
    assert expected_snippet in captured.out
19
    assert captured.err == ""
20
21
22
def test_materialize_d3graph(map_graph_model, monkeypatch, capsys):
23
    monkeypatch.setattr(plt, 'show', lambda: None)
24
25
    expected_snippet = '"graph": {\n    "name": "Map",'
26
27
    with patch(MODAL_RADIOBUTTON_CHOOSER) as modal_radiobutton_chooser:
28
        modal_radiobutton_chooser.return_value = ('Test', graphinate.materializers.Materializers.D3Graph.value)
29
30
        *_, graph_model = map_graph_model
31
        graphinate.materialize(graph_model)
32
        captured = capsys.readouterr()
33
        assert expected_snippet in captured.out
34
        assert captured.err == ""
35
36
37
def valid_materialization(graph_model) -> bool:
38
    graphinate.materialize(graph_model)
39
    return True
40
41
42
def test_materialize_graphql(map_graph_model, monkeypatch):
43
    with patch(MODAL_RADIOBUTTON_CHOOSER) as modal_radiobutton_chooser:
44
        import uvicorn
45
        monkeypatch.setattr(uvicorn, "run", lambda *args, **kwargs: None)
46
        modal_radiobutton_chooser.return_value = ('Test', graphinate.materializers.Materializers.GraphQL.value)
47
48
        *_, graph_model = map_graph_model
49
50
        assert valid_materialization(graph_model)
51
52
53
networkx_materializers = [
54
    graphinate.materializers.Materializers.NetworkX.value,
55
    graphinate.materializers.Materializers.NetworkX_with_edge_labels.value,
56
    (graphinate.builders.NetworkxBuilder,
57
     functools.partial(graphinate.materializers.matplotlib.plot, with_node_labels=False))
58
]
59
60
61
@pytest.mark.parametrize('materializer', networkx_materializers)
62
def test_materialize_networkx(map_graph_model, materializer, monkeypatch):
63
    with monkeypatch.context():
64
        monkeypatch.setattr(plt, 'show', lambda: None)
65
        with patch('graphinate.materializers.modal_radiobutton_chooser') as modal_radiobutton_chooser:
66
            modal_radiobutton_chooser.return_value = ('Test', materializer)
67
            *_, graph_model = map_graph_model
68
            assert valid_materialization(graph_model)
69
70
71
def test_materialize_none(map_graph_model, monkeypatch):
72
    with patch(MODAL_RADIOBUTTON_CHOOSER) as modal_radiobutton_chooser:
73
        import uvicorn
74
        monkeypatch.setattr(uvicorn, "run", lambda *args, **kwargs: None)
75
        modal_radiobutton_chooser.return_value = ('Test', (None, None))
76
77
        *_, graph_model = map_graph_model
78
        with pytest.raises(ValueError, match="Missing: builder, actualizer"):
79
            graphinate.materialize(graph_model)
80