@@ -26,17 +26,19 @@ def test_nominal(runner, httpserver):
2626 data = "data2" ,
2727 ),
2828 ]
29- with patch ("scim2_cli.test.check_server" , side_effect = [results ]):
29+ with patch ("scim2_cli.test.check_server" , side_effect = [results ]) as check_server :
3030 result = runner .invoke (
3131 cli ,
3232 ["--url" , httpserver .url_for ("/" ), "test" ],
3333 catch_exceptions = False ,
3434 )
35+ seed = check_server .call_args .kwargs ["seed" ]
3536
3637 expected_output = f"""Performing a SCIM compliance check on http://localhost:{ httpserver .port } / ...
3738SUCCESS test1
3839 reason1
3940ERROR test2
41+ Seed: { seed }
4042"""
4143 assert result .output == expected_output
4244
@@ -59,12 +61,13 @@ def test_verbose(runner, httpserver):
5961 data = "data2" ,
6062 ),
6163 ]
62- with patch ("scim2_cli.test.check_server" , side_effect = [results ]):
64+ with patch ("scim2_cli.test.check_server" , side_effect = [results ]) as check_server :
6365 result = runner .invoke (
6466 cli ,
6567 ["--url" , httpserver .url_for ("/" ), "test" , "--verbose" ],
6668 catch_exceptions = False ,
6769 )
70+ seed = check_server .call_args .kwargs ["seed" ]
6871
6972 expected_output = f"""Performing a SCIM compliance check on http://localhost:{ httpserver .port } / ...
7073SUCCESS test1
@@ -73,6 +76,7 @@ def test_verbose(runner, httpserver):
7376ERROR test2
7477 reason2
7578 data2
79+ Seed: { seed }
7680"""
7781 assert result .output == expected_output
7882
@@ -97,7 +101,7 @@ def test_response_checks_options(runner, httpserver, options, expected):
97101 """Test that the response check options are applied on the client."""
98102 checked = {}
99103
100- def check_server (client ):
104+ def check_server (client , seed ):
101105 checked ["status_codes" ] = client .check_response_status_codes
102106 checked ["content_type" ] = client .check_response_content_type
103107 return []
@@ -140,7 +144,7 @@ def test_resource_type_and_attribute(runner, httpserver):
140144
141145 result = run_checks (runner , httpserver , results )
142146
143- assert result .output .splitlines ()[1 :] == [
147+ assert result .output .splitlines ()[1 :- 1 ] == [
144148 "SUCCESS discovery_methods" ,
145149 "SUCCESS object_creation User" ,
146150 "SUCCESS check_replace_attribute User name.familyName" ,
@@ -209,3 +213,45 @@ def test_status_color_follows_the_outcome(runner, httpserver, status, color):
209213def test_every_outcome_has_a_color ():
210214 """Each outcome of scim2-tester has a color."""
211215 assert set (OUTCOME_COLORS ) == set (Outcome )
216+
217+
218+ def test_seed_is_sent_and_printed (runner , httpserver ):
219+ """The seed passed with --seed generates the values, and is printed at the end."""
220+ with patch ("scim2_cli.test.check_server" , return_value = []) as check_server :
221+ result = runner .invoke (
222+ cli ,
223+ ["--url" , httpserver .url_for ("/" ), "test" , "--seed" , "1234" ],
224+ catch_exceptions = False ,
225+ )
226+
227+ assert check_server .call_args .kwargs ["seed" ] == 1234
228+ assert result .output .splitlines ()[- 1 ] == "Seed: 1234"
229+
230+
231+ def test_each_run_has_its_own_seed (runner , httpserver ):
232+ """Without --seed, each run draws a new seed and prints it."""
233+ seeds = []
234+ for _ in range (2 ):
235+ with patch ("scim2_cli.test.check_server" , return_value = []) as check_server :
236+ result = runner .invoke (
237+ cli ,
238+ ["--url" , httpserver .url_for ("/" ), "test" ],
239+ catch_exceptions = False ,
240+ )
241+ seed = check_server .call_args .kwargs ["seed" ]
242+ assert result .output .splitlines ()[- 1 ] == f"Seed: { seed } "
243+ seeds .append (seed )
244+
245+ assert seeds [0 ] != seeds [1 ]
246+
247+
248+ def test_seed_must_be_an_integer (runner , httpserver ):
249+ """A seed that is not an integer is a usage error."""
250+ with patch ("scim2_cli.test.check_server" ) as check_server :
251+ result = runner .invoke (
252+ cli , ["--url" , httpserver .url_for ("/" ), "test" , "--seed" , "abc" ]
253+ )
254+
255+ assert result .exit_code == 2
256+ assert "'abc' is not a valid integer" in result .output
257+ check_server .assert_not_called ()
0 commit comments