55from pydantic import Field , ValidationError
66import pytest
77
8- import docbuild .cli .cmd_build as cmd_build
8+ from docbuild .cli import callback as callback_module
9+ from docbuild .cli .callback import validate_doctypes
910from docbuild .cli .cmd_cli import cli
1011
1112
@@ -14,7 +15,7 @@ def test_validate_doctypes_with_empty_doctypes():
1415 ctx = Context (cmd )
1516 ctx .obj = SimpleNamespace ()
1617
17- result = cmd_build . validate_doctypes (ctx , None , tuple ())
18+ result = validate_doctypes (ctx , None , tuple ())
1819 assert not result
1920 # No ctx.obj.doctypes as this doesn't exist
2021
@@ -29,28 +30,13 @@ def raise_for_invalid(s: str) -> DummyDoctype:
2930 return DummyDoctype (s )
3031
3132 monkeypatch .setattr (
32- cmd_build .Doctype ,
33+ callback_module .Doctype ,
3334 'from_str' ,
3435 staticmethod (raise_for_invalid ),
3536 )
3637
3738 with pytest .raises (Abort , match = 'is not a valid Product' ):
38- cmd_build .validate_doctypes (ctx , None , ('wrong/1/en-us' ,))
39-
40-
41- @pytest .mark .skip ('Replace --role with --env-config' )
42- def test_validate_doctypes_called_from_build (context , fake_envfile , runner ):
43- result = runner .invoke (
44- cli ,
45- ['--role=production' , 'build' , 'sles/17/en-us' ],
46- obj = context ,
47- )
48-
49- assert fake_envfile .mock .call_count == 1
50- assert result .exit_code == 0
51- # assert "Got sles/17@supported/en-us" in result.output
52- assert context .doctypes == [DummyDoctype ('sles/17/en-us' )]
53- assert context .role == 'production'
39+ validate_doctypes (ctx , None , ('wrong/1/en-us' ,))
5440
5541
5642class DummyDoctype :
@@ -68,7 +54,7 @@ def __str__(self):
6854def patch_doctype (monkeypatch ):
6955 # Patch Doctype.from_str to return a DummyDoctype for testing
7056 monkeypatch .setattr (
71- cmd_build ,
57+ callback_module ,
7258 'Doctype' ,
7359 type (
7460 'Doctype' ,
@@ -86,20 +72,20 @@ def patch_doctype(monkeypatch):
8672 ),
8773 )
8874 # Patch merge_doctypes to just return the list for simplicity
89- monkeypatch .setattr (cmd_build , 'merge_doctypes' , lambda * args : list (args ))
75+ monkeypatch .setattr (callback_module , 'merge_doctypes' , lambda * args : list (args ))
9076
9177
9278def test_validate_doctypes_empty (ctx ):
9379 context = ctx (SimpleNamespace ())
94- result = cmd_build . validate_doctypes (context , None , ())
80+ result = validate_doctypes (context , None , ())
9581 assert result == []
9682 assert not hasattr (context .obj , 'doctypes' ) or context .obj .doctypes == []
9783
9884
9985def test_validate_doctypes_valid (ctx ):
10086 context = ctx (SimpleNamespace ())
10187 doctypes = ('foo/1/en-us' , 'bar/2/de-de' )
102- result = cmd_build . validate_doctypes (context , None , doctypes )
88+ result = validate_doctypes (context , None , doctypes )
10389 assert result == [DummyDoctype ('foo/1/en-us' ), DummyDoctype ('bar/2/de-de' )]
10490 assert context .obj .doctypes == result
10591
@@ -113,7 +99,7 @@ def errors(self):
11399 return [{'loc' : ['field' ], 'msg' : 'bad' , 'type' : 'value_error' }]
114100
115101 monkeypatch .setattr (
116- cmd_build ,
102+ callback_module ,
117103 'Doctype' ,
118104 type (
119105 'Doctype' ,
@@ -133,7 +119,7 @@ def errors(self):
133119 ),
134120 )
135121 with pytest .raises (click .Abort ):
136- cmd_build . validate_doctypes (context , None , ('bad/doctype' ,))
122+ validate_doctypes (context , None , ('bad/doctype' ,))
137123
138124
139125@pytest .mark .parametrize (
@@ -151,7 +137,7 @@ def test_validate_doctypes_with_doctypes(ctx, doctypes, expected):
151137 """Test validate_doctypes with different doctype inputs."""
152138 context = ctx (SimpleNamespace (doctypes = []))
153139
154- result = cmd_build . validate_doctypes (context , None , doctypes )
140+ result = validate_doctypes (context , None , doctypes )
155141 assert result == expected
156142 assert context .obj .doctypes == expected
157143
@@ -177,10 +163,10 @@ def mock_from_str(s: str):
177163 return DummyDoctype (s )
178164
179165 # Patch necessary methods
180- monkeypatch .setattr (cmd_build , 'ValidationError' , MockValidationError )
181- monkeypatch .setattr (cmd_build .Doctype , 'from_str' , staticmethod (mock_from_str ))
166+ monkeypatch .setattr (callback_module , 'ValidationError' , MockValidationError )
167+ monkeypatch .setattr (callback_module .Doctype , 'from_str' , staticmethod (mock_from_str ))
182168 monkeypatch .setattr (
183- cmd_build .Doctype ,
169+ callback_module .Doctype ,
184170 'model_fields' ,
185171 {
186172 'product' : type (
@@ -196,7 +182,7 @@ def mock_from_str(s: str):
196182
197183 # Test that the function properly aborts and formats error messages
198184 with pytest .raises (click .Abort ):
199- cmd_build . validate_doctypes (context , None , ('invalid/product/en-us' ,))
185+ validate_doctypes (context , None , ('invalid/product/en-us' ,))
200186
201187 captured = capsys .readouterr ()
202188 assert "ERROR in 'product': Invalid product name" in captured .err
@@ -217,9 +203,9 @@ def mock_merge(*args):
217203 mock_merge_called_with = args
218204 return list (args )
219205
220- monkeypatch .setattr (cmd_build , 'merge_doctypes' , mock_merge )
206+ monkeypatch .setattr (callback_module , 'merge_doctypes' , mock_merge )
221207
222- cmd_build . validate_doctypes (context , None , doctypes )
208+ validate_doctypes (context , None , doctypes )
223209
224210 # Verify merge_doctypes was called with both doctypes
225211 assert len (mock_merge_called_with ) == 2
@@ -233,7 +219,7 @@ def mock_merge(*args):
233219def test_validate_doctypes_echo_outputs (ctx , capsys ):
234220 """Test the echo statements in validate_doctypes."""
235221 context = ctx (SimpleNamespace ())
236- cmd_build . validate_doctypes (context , None , ('sles/15/en-us' ,))
222+ validate_doctypes (context , None , ('sles/15/en-us' ,))
237223
238224 captured = capsys .readouterr ()
239225 assert 'Got sles/15' in captured .out
@@ -254,7 +240,7 @@ def mock_validation_error(*args, **kwargs):
254240 )
255241
256242 monkeypatch .setattr (
257- cmd_build .Doctype ,
243+ callback_module .Doctype ,
258244 'model_fields' ,
259245 {
260246 'product' : Field (
@@ -264,10 +250,10 @@ def mock_validation_error(*args, **kwargs):
264250 ),
265251 },
266252 )
267- monkeypatch .setattr (cmd_build .Doctype , 'from_str' , mock_validation_error )
253+ monkeypatch .setattr (callback_module .Doctype , 'from_str' , mock_validation_error )
268254
269255 with pytest .raises (click .Abort , match = r'Mock validation error' ):
270- cmd_build . validate_doctypes (
256+ validate_doctypes (
271257 click .Context (click .Command ('dummy' )),
272258 None ,
273259 ('foo/bar' ,),
@@ -297,7 +283,7 @@ def mock_validation_error(*args, **kwargs):
297283 )
298284
299285 monkeypatch .setattr (
300- cmd_build .Doctype ,
286+ callback_module .Doctype ,
301287 'model_fields' ,
302288 {
303289 'product' : type (
@@ -310,10 +296,10 @@ def mock_validation_error(*args, **kwargs):
310296 )(),
311297 },
312298 )
313- monkeypatch .setattr (cmd_build .Doctype , 'from_str' , mock_validation_error )
299+ monkeypatch .setattr (callback_module .Doctype , 'from_str' , mock_validation_error )
314300
315301 with pytest .raises (click .Abort , match = r'Mock validation error' ):
316- cmd_build . validate_doctypes (
302+ validate_doctypes (
317303 click .Context (click .Command ('dummy' )),
318304 None ,
319305 ('foo/bar' ,),
@@ -342,7 +328,7 @@ def mock_validation_error(*args, **kwargs):
342328 )
343329
344330 monkeypatch .setattr (
345- cmd_build .Doctype ,
331+ callback_module .Doctype ,
346332 'model_fields' ,
347333 {
348334 'product' : type (
@@ -355,10 +341,10 @@ def mock_validation_error(*args, **kwargs):
355341 )(),
356342 },
357343 )
358- monkeypatch .setattr (cmd_build .Doctype , 'from_str' , mock_validation_error )
344+ monkeypatch .setattr (callback_module .Doctype , 'from_str' , mock_validation_error )
359345
360346 with pytest .raises (click .Abort , match = r'Mock validation error' ):
361- cmd_build . validate_doctypes (
347+ validate_doctypes (
362348 click .Context (click .Command ('dummy' )),
363349 None ,
364350 ('foo/bar' ,),
0 commit comments