浏览代码

Unit tests for multiple files

Signed-off-by: Daniel Nephin <[email protected]>
Daniel Nephin 10 年之前
父节点
当前提交
89be7f1fa7
共有 2 个文件被更改,包括 44 次插入5 次删除
  1. 5 3
      compose/config/config.py
  2. 39 2
      tests/unit/config/config_test.py

+ 5 - 3
compose/config/config.py

@@ -166,14 +166,16 @@ def load(config_details):
             for name in set(base) | set(override)
         }
 
-    def combine_configs(override, base):
+    def combine_configs(base, override):
         service_dicts = load_file(base.filename, base.config)
         if not override:
             return service_dicts
 
-        return merge_service_dicts(base.config, override.config)
+        return ConfigFile(
+            override.filename,
+            merge_services(base.config, override.config))
 
-    return reduce(combine_configs, configs, None)
+    return reduce(combine_configs, configs + [None])
 
 
 class ServiceLoader(object):

+ 39 - 2
tests/unit/config/config_test.py

@@ -5,10 +5,10 @@ import shutil
 import tempfile
 from operator import itemgetter
 
-from .. import mock
-from .. import unittest
 from compose.config import config
 from compose.config.errors import ConfigurationError
+from tests import mock
+from tests import unittest
 
 
 def make_service_dict(name, service_dict, working_dir, filename=None):
@@ -92,6 +92,43 @@ class ConfigTest(unittest.TestCase):
                 )
             )
 
+    def test_load_with_multiple_files(self):
+        base_file = config.ConfigFile(
+            'base.yaml',
+            {
+                'web': {
+                    'image': 'example/web',
+                    'links': ['db'],
+                },
+                'db': {
+                    'image': 'example/db',
+                },
+            })
+        override_file = config.ConfigFile(
+            'override.yaml',
+            {
+                'web': {
+                    'build': '/',
+                    'volumes': ['/home/user/project:/code'],
+                },
+            })
+        details = config.ConfigDetails('.', [base_file, override_file])
+
+        service_dicts = config.load(details)
+        expected = [
+            {
+                'name': 'web',
+                'build': '/',
+                'links': ['db'],
+                'volumes': ['/home/user/project:/code'],
+            },
+            {
+                'name': 'db',
+                'image': 'example/db',
+            },
+        ]
+        self.assertEqual(service_sort(service_dicts), service_sort(expected))
+
     def test_config_valid_service_names(self):
         for valid_name in ['_', '-', '.__.', '_what-up.', 'what_.up----', 'whatup']:
             config.load(