# -*- coding: utf-8 -*- # ----------------------------------------------------------------------------- # Copyright (c) 2016, Anaconda, Inc. All rights reserved. # # Licensed under the terms of the BSD 3-Clause License. # The full license is in the file LICENSE.txt, distributed with this software. # ----------------------------------------------------------------------------- from anaconda_project.project import Project from anaconda_project.project_file import DEFAULT_PROJECT_FILENAME from anaconda_project.requirements_registry.requirements.service import ServiceRequirement from anaconda_project.internal.test.tmpfile_utils import with_directory_contents_completing_project_file def _load_service_requirement(dirname): project = Project(dirname) assert [] == project.problems for req in project.requirements(project.default_env_spec_name): if isinstance(req, ServiceRequirement): return req raise RuntimeError("no ServiceRequirement found") def test_service_dict_with_options(): def check(dirname): req = _load_service_requirement(dirname) assert req.options == dict(type='redis', foo='bar', default='hello') assert req.env_var == 'FOOBAR' with_directory_contents_completing_project_file( {DEFAULT_PROJECT_FILENAME: """ services: FOOBAR: { type: redis, foo: bar, default: hello } """}, check) def test_service_dict_with_bad_value(): def check(dirname): project = Project(dirname) assert ["Service FOOBAR should have a service type string or a dictionary as its value."] == project.problems with_directory_contents_completing_project_file( {DEFAULT_PROJECT_FILENAME: """ services: FOOBAR: - 42 """}, check) def test_service_with_bad_service_type(): def check(dirname): project = Project(dirname) assert ["Service FOOBAR has an unknown type 'not_a_service'."] == project.problems with_directory_contents_completing_project_file( {DEFAULT_PROJECT_FILENAME: """ services: FOOBAR: not_a_service """}, check) def test_service_dict_with_no_service_type(): def check(dirname): project = Project(dirname) assert ["Service FOOBAR doesn't contain a 'type' field."] == project.problems with_directory_contents_completing_project_file({DEFAULT_PROJECT_FILENAME: """ services: FOOBAR: {} """}, check) def test_service_dict_bad_default(): def check(dirname): project = Project(dirname) assert ["default value for variable FOOBAR must be null, a string, or a number, not []."] == project.problems with_directory_contents_completing_project_file( {DEFAULT_PROJECT_FILENAME: """ services: FOOBAR: { type: redis, default: [] } """}, check)