1
1
"""Test Git-JSON-Tree library."""
2
2
3
+ import json
3
4
from string import printable
4
5
5
6
import hypothesis .strategies as st
6
7
import pytest
8
+ from click .testing import CliRunner
7
9
from dulwich .repo import Repo
8
10
from hypothesis import assume , given , settings
9
11
10
- from git_json_tree import decode , encode
12
+ from git_json_tree import cli , decode , encode
11
13
12
14
13
15
@pytest .fixture ()
@@ -16,6 +18,12 @@ def repo(tmpdir):
16
18
yield Repo .init_bare (str (tmpdir ))
17
19
18
20
21
+ @pytest .fixture ()
22
+ def runner (repo ):
23
+ """Define a click runner."""
24
+ return CliRunner ()
25
+
26
+
19
27
def json_data ():
20
28
"""Generate JSON data."""
21
29
return st .recursive (
@@ -33,7 +41,7 @@ def json_data():
33
41
),
34
42
children ,
35
43
),
36
- max_leaves = 500 ,
44
+ max_leaves = 50 ,
37
45
)
38
46
39
47
@@ -43,3 +51,27 @@ def test_encode_decode(data, repo):
43
51
"""Test (d)encoding."""
44
52
assume (isinstance (data , (dict , list )))
45
53
assert decode (repo , encode (repo , data )) == data
54
+
55
+
56
+ @given (data = json_data ())
57
+ @settings (max_examples = 100 , deadline = 10000 )
58
+ def test_cli_encoder (data , runner ):
59
+ """Test cli encoder."""
60
+ assume (isinstance (data , (dict , list )) and data )
61
+ encoded = runner .invoke (cli , ['encode' ], input = json .dumps (data ))
62
+ assert encoded .exit_code == 0
63
+ decoded = runner .invoke (cli , ['decode' , encoded .output .strip ()])
64
+ assert decoded .exit_code == 0
65
+ assert json .loads (decoded .output_bytes .decode ('utf-8' )) == data
66
+
67
+
68
+ @given (data = json_data ())
69
+ @settings (max_examples = 100 , deadline = 10000 )
70
+ def test_smudge_clean (data , runner ):
71
+ """Test Git integration."""
72
+ assume (isinstance (data , (dict , list )) and data )
73
+ cleaned = runner .invoke (cli , ['clean' ], input = json .dumps (data ))
74
+ assert cleaned .exit_code == 0
75
+ smudged = runner .invoke (cli , ['smudge' ], input = cleaned .output )
76
+ assert smudged .exit_code == 0
77
+ assert json .loads (smudged .output_bytes .decode ('utf-8' )) == data
0 commit comments