1- import os
2-
31import pytest
42
53from stackconfig .stackconfig import StackConfigCompose
64from stackconfig .utils .jinja2_utils import render_jijnja2_compose
75
86
9- def test_merge_compose_files ():
7+ @pytest .fixture ()
8+ def mock_success_subprocess (mocker ):
9+ mocker .patch ('subprocess.getoutput' , return_value = {"Additional property z_dummy is not allowed" : "test" })
10+
11+
12+ @pytest .fixture ()
13+ def mock_error_subprocess (mocker ):
14+ mocker .patch ('subprocess.getoutput' , return_value = {"Error" : "test" })
15+
16+
17+ def test_merge_compose_files (mock_success_subprocess ):
1018 override_file = "tests/example_override.yml"
1119 templates = render_jijnja2_compose (
1220 [override_file ], data_file = "tests/data_example.yml"
@@ -15,33 +23,35 @@ def test_merge_compose_files():
1523 ["tests/example_compose.yml" ] + templates , "/tmp/temp_result.yml"
1624 )
1725 c .merge_stack_compose ()
18- assert c .compose_dict ["version" ] == "3.3"
26+ assert c .compose_dict ["version" ] == "3.8"
27+ assert "deploy" in c .compose_dict ["services" ]["ui" ]
28+ assert "placement" in c .compose_dict ["services" ]["ui" ]["deploy" ]
29+ assert "max_replicas_per_node" in c .compose_dict ["services" ]["ui" ]["deploy" ]["placement" ]
30+ assert c .compose_dict ["services" ]["ui" ]["deploy" ]["placement" ]["max_replicas_per_node" ] == 1
1931
2032
21- def test_merge_compose_files_invalid_syntax ():
33+ def test_merge_compose_files_invalid_syntax (mock_success_subprocess ):
2234 override_file = "tests/example_override_invalid.yml"
2335 with pytest .raises (Exception ) as err :
2436 templates = render_jijnja2_compose (
2537 [override_file ], data_file = "tests/data_example.yml"
2638 )
27- c = StackConfigCompose (
28- ["tests/example_compose.yml" ] + templates , "/tmp/temp_result.yml"
29- )
30- c .merge_stack_compose ()
3139 assert f"Please be sure the template { override_file } is valid" in str (err )
3240
3341
34- @pytest .mark .parametrize ("version, version_result " , [(None , "3.3" ), ("3.8" , "3.8 " )])
35- def test_merge_compose_files_invalid (version , version_result ):
42+ @pytest .mark .parametrize ("version" , [(None ), ("3.9 " )])
43+ def test_merge_compose_files_invalid (version , mock_success_subprocess ):
3644 c = StackConfigCompose (
3745 ["tests/example_compose.yml" ], "/tmp/temp_result_invalid.yml" , version
3846 )
3947 c .merge_stack_compose ()
40- assert c .compose_dict ["version" ] == version_result
48+ if not version :
49+ version = "3.8"
50+ assert c .compose_dict ["version" ] == version
4151 assert "depends_on" not in c .compose_dict ["services" ]["api" ]
4252
4353
44- def test_merge_compose_files_syntax_error ():
54+ def test_merge_compose_files_syntax_error (mock_success_subprocess ):
4555 with open ("/tmp/invalid-compose.yml" , "+w" ) as file :
4656 file .writelines ("{}\n tests: test_value" .format ("test" ))
4757 with pytest .raises (Exception ) as exc :
@@ -51,3 +61,16 @@ def test_merge_compose_files_syntax_error():
5161 )
5262 c .merge_stack_compose ()
5363 assert "mapping values are not allowed here" in str (exc )
64+
65+
66+ def test_merge_compose_files_invalid_syntax_compose_validation (mock_error_subprocess ):
67+ override_file = "tests/example_override_invalid2.yml"
68+ with pytest .raises (Exception ) as err :
69+ templates = render_jijnja2_compose (
70+ [override_file ], data_file = "tests/data_example.yml"
71+ )
72+ c = StackConfigCompose (
73+ ["tests/example_compose.yml" ] + templates , "/tmp/temp_result.yml"
74+ )
75+ c .merge_stack_compose ()
76+ assert f"services.service_custom.deploy.replicas contains an invalid type" in str (err )
0 commit comments