def test_optional_content_normalisation_config(): """Test that the content.target normalisation passes.""" settings = deepcopy(REQUIRED_SETTINGS) settings['content'] = [ { 'source': 'from/here', 'overwrite': 'always' }, ] settings = validate_settings(settings) assert isinstance(settings, dict) is True assert 'content' in settings assert len(settings['content']) == 1 assert 'target' in settings['content'][0] assert settings['content'][0]['target'] == '' settings = deepcopy(REQUIRED_SETTINGS) settings['content'] = [ { 'source': 'from/here', 'target': None, 'overwrite': 'always' }, ] settings = validate_settings(settings) assert isinstance(settings, dict) is True assert 'content' in settings assert len(settings['content']) == 1 assert 'target' in settings['content'][0] assert settings['content'][0]['target'] == ''
def test_invalid_packages_source(): """Test that an invalid packages source fails.""" settings = deepcopy(REQUIRED_SETTINGS) settings['packages'] = {'invalid': ['package1', 'package2']} validated = validate_settings(settings) assert isinstance(validated, list) is True
def test_empty_sources(): """Test that an empty source list passes.""" settings = deepcopy(REQUIRED_SETTINGS) settings['sources'] = {'apt': []} validated = validate_settings(settings) assert isinstance(validated, dict) is True
def test_invalid_default_url(): """Test that an invalid packages source fails.""" settings = deepcopy(REQUIRED_SETTINGS) settings['jupyter_notebook'] = {'default_url': ''} validated = validate_settings(settings) assert isinstance(validated, list) is True
def test_hacks_config(): """Test that the optional hacks settings pass.""" settings = deepcopy(REQUIRED_SETTINGS) settings['hacks'] = ['missing-man1'] validated = validate_settings(settings) assert isinstance(validated, dict) is True
def test_invalid_web_apps_config(): """Test that an invalid web_apps config fails.""" settings = deepcopy(REQUIRED_SETTINGS) settings['web_apps'] = {} validated = validate_settings(settings) assert isinstance(validated, list) is True
def test_invalid_script_type(): """Test that an invalid script type fails.""" settings = deepcopy(REQUIRED_SETTINGS) settings['scripts'] = {'file': ['package1', 'package2']} validated = validate_settings(settings) assert isinstance(validated, list) is True
def test_jupyter_notebook_config(): """Test that the optional packages settings pass.""" settings = deepcopy(REQUIRED_SETTINGS) settings['jupyter_notebook'] = {'default_url': 'default'} validated = validate_settings(settings) assert isinstance(validated, dict) is True
def test_invalid_hacks(): """Test that an invalid packages source fails.""" settings = deepcopy(REQUIRED_SETTINGS) settings['packs'] = ['does-not-exist'] validated = validate_settings(settings) assert isinstance(validated, list) is True assert 'hacks: invalid value does-not-exist'
def test_packs_config(): """Test that the optional packs settings pass.""" settings = deepcopy(REQUIRED_SETTINGS) settings['packs'] = [ 'tutorial-server' ] validated = validate_settings(settings) assert isinstance(validated, dict) is True
def test_missing_part_keys(): """Test that missing part keys fail.""" settings = deepcopy(REQUIRED_SETTINGS) settings['tutorial_server'] = {'parts': [{}], 'default': 'tutorial'} validated = validate_settings(settings) assert isinstance(validated, list) is True assert 'tutorial_server.parts.0.name: required field' in validated assert 'tutorial_server.parts.0.type: required field' in validated assert 'tutorial_server.parts.0.path: required field' in validated
def test_invalid_type_config(): """Test that an invalid type setting fails.""" settings = deepcopy(REQUIRED_SETTINGS) settings['type'] = 'invalid' errors = validate_settings(settings) assert isinstance(errors, list) is True assert len(errors) == 1 assert errors[0] == 'type: unallowed value invalid'
def test_missing_type_config(): """Test that a missing type setting fails.""" settings = deepcopy(REQUIRED_SETTINGS) del settings['type'] errors = validate_settings(settings) assert isinstance(errors, list) is True assert len(errors) == 1 assert errors[0] == 'type: required field'
def test_missing_module_presentation_config(): """Test that a missing module.presentation setting fails.""" settings = deepcopy(REQUIRED_SETTINGS) del settings['module']['presentation'] errors = validate_settings(settings) assert isinstance(errors, list) is True assert len(errors) == 1 assert errors[0] == 'module.presentation: required field'
def test_packages_config(): """Test that the optional packages settings pass.""" settings = deepcopy(REQUIRED_SETTINGS) settings['packages'] = { 'apt': ['package1', 'package2'], 'pip': ['package1', 'package2'] } validated = validate_settings(settings) assert isinstance(validated, dict) is True
def test_missing_keys(): """Test that missing keys generate an error.""" settings = deepcopy(REQUIRED_SETTINGS) settings['sources'] = {'apt': [{}]} validated = validate_settings(settings) assert isinstance(validated, list) is True assert len(validated) == 3 assert 'sources.apt.0.deb: required field' in validated assert 'sources.apt.0.key: required field' in validated assert 'sources.apt.0.name: required field' in validated
def test_invalid_web_app(): """Test that an invalid packages source fails.""" settings = deepcopy(REQUIRED_SETTINGS) settings['web_apps'] = [ {} ] validated = validate_settings(settings) assert isinstance(validated, list) is True assert 'web_apps.0.path: required field' in validated assert 'web_apps.0.cmdline: required field' in validated
def test_scripts_config(): """Test that the optional scripts settings pass.""" settings = deepcopy(REQUIRED_SETTINGS) settings['scripts'] = [{ 'inline': ['line1', 'line2'] }, { 'inline': ['line1', 'line2'] }] validated = validate_settings(settings) assert isinstance(validated, dict) is True
def test_multiple_errors_config(): """Test that multiple missing fields produce multiple errors.""" settings = deepcopy(REQUIRED_SETTINGS) del settings['module']['code'] del settings['module']['presentation'] errors = validate_settings(settings) assert isinstance(errors, list) is True assert len(errors) == 2 assert errors[0] == 'module.code: required field' assert errors[1] == 'module.presentation: required field'
def test_sources_config(): """Test that the optional sources settings pass.""" settings = deepcopy(REQUIRED_SETTINGS) settings['sources'] = { 'apt': [{ 'name': 'source1', 'key': 'https://example.org/url', 'deb': 'deb somewhere dist' }] } validated = validate_settings(settings) assert isinstance(validated, dict) is True
def test_cmdline_must_be_list(): """Tests that the cmdline value must be a list.""" settings = deepcopy(REQUIRED_SETTINGS) settings['web_apps'] = [ { 'path': 'mount', 'cmdline': 'cmd' } ] validated = validate_settings(settings) assert isinstance(validated, list) is True assert 'web_apps.0.cmdline: must be of list type' in validated
def test_invalid_content_source_config(): """Test that an invalid content.source setting fails.""" settings = deepcopy(REQUIRED_SETTINGS) settings['content'] = [{ 'source': '', 'target': 'there', 'overwrite': 'always' }] errors = validate_settings(settings) assert isinstance(errors, list) is True assert len(errors) == 1 assert errors[0] == 'content.0.source: empty values not allowed'
def test_invalid_content_config(): """Test that a non-list content structure fails.""" settings = deepcopy(REQUIRED_SETTINGS) settings['content'] = { 'source': 'from/here', 'target': 'there', 'overwrite': 'always' } errors = validate_settings(settings) assert isinstance(errors, list) is True assert len(errors) == 1 assert errors[0] == 'content: must be of list type'
def test_invalid_content_overwrite_config(): """Test that an invalid content.overwrite setting fails.""" settings = deepcopy(REQUIRED_SETTINGS) settings['content'] = [{ 'source': 'from/here', 'target': 'there', 'overwrite': 'sometimes' }] errors = validate_settings(settings) assert isinstance(errors, list) is True assert len(errors) == 1 assert errors[0] == 'content.0.overwrite: unallowed value sometimes'
def test_empty_values(): """Test that an empty settings fail.""" settings = deepcopy(REQUIRED_SETTINGS) settings['web_apps'] = [ { 'path': '', 'cmdline': [] } ] validated = validate_settings(settings) assert isinstance(validated, list) is True assert 'web_apps.0.path: empty values not allowed' in validated assert 'web_apps.0.cmdline: empty values not allowed' in validated
def test_invalid_types_fail(): """Test that invalid part types fail.""" settings = deepcopy(REQUIRED_SETTINGS) settings['tutorial_server'] = { 'parts': [{ 'name': 'tutorial', 'type': 'files', 'path': '' }], 'default': 'tutorial' } validated = validate_settings(settings) assert isinstance(validated, list) is True assert 'tutorial_server.parts.0.type: unallowed value files' in validated
def test_empty_values_fail(): """Test that empty values fail.""" settings = deepcopy(REQUIRED_SETTINGS) settings['tutorial_server'] = { 'parts': [{ 'name': '', 'type': 'tutorial', 'path': '' }], 'default': '' } validated = validate_settings(settings) assert isinstance(validated, list) is True assert 'tutorial_server.parts.0.name: empty values not allowed' in validated assert 'tutorial_server.default: empty values not allowed' in validated
def test_default_must_be_boolean(): """Tests that the default value must be a boolean value.""" settings = deepcopy(REQUIRED_SETTINGS) settings['web_apps'] = [ { 'path': 'mount', 'cmdline': [ 'cmd', 'param' ], 'default': 'true' } ] validated = validate_settings(settings) assert isinstance(validated, list) is True assert 'web_apps.0.default: must be of boolean type' in validated
def test_default_values(): """Test that the default values are set correctly.""" settings = deepcopy(REQUIRED_SETTINGS) settings['web_apps'] = [ { 'path': 'mount', 'cmdline': [ 'cmd', 'param' ] } ] validated = validate_settings(settings) assert isinstance(validated, dict) is True assert validated['web_apps'][0]['port'] == 0 assert validated['web_apps'][0]['default'] is False
def test_web_apps_config(): """Test that the optional web_apps settings pass.""" settings = deepcopy(REQUIRED_SETTINGS) settings['web_apps'] = [ { 'path': 'mount', 'cmdline': [ 'cmd', 'param' ], 'port': 342, 'default': True } ] validated = validate_settings(settings) assert isinstance(validated, dict) is True