<reponame>olson-sean-k/peru
from peru.cache import Cache
from peru.merge import merge_imports_tree

from shared import create_dir, assert_contents, PeruTest, make_synchronous


class MergeTest(PeruTest):

    @make_synchronous
    def setUp(self):
        self.cache_dir = create_dir()
        self.cache = yield from Cache(self.cache_dir)

        # These tests use this simple one-file tree as module contents.
        content = {'a': 'a'}
        content_dir = create_dir(content)
        self.content_tree = yield from self.cache.import_tree(content_dir)

    @make_synchronous
    def test_merge_from_map(self):
        imports = {'foo': ('path1',), 'bar': ('path2',)}
        target_trees = {'foo': self.content_tree, 'bar': self.content_tree}

        merged_tree = yield from merge_imports_tree(
            self.cache, imports, target_trees)

        merged_dir = create_dir()
        yield from self.cache.export_tree(merged_tree, merged_dir)
        expected_content = {'path1/a': 'a', 'path2/a': 'a'}
        assert_contents(merged_dir, expected_content)

    @make_synchronous
    def test_merge_from_multimap(self):
        # This represents a list of key-value pairs in YAML, for example:
        #     imports:
        #         foo:
        #           - path1
        #           - path2
        imports = {'foo': ('path1', 'path2')}
        target_trees = {'foo': self.content_tree}

        merged_tree = yield from merge_imports_tree(
            self.cache, imports, target_trees)

        merged_dir = create_dir()
        yield from self.cache.export_tree(merged_tree, merged_dir)
        expected_content = {'path1/a': 'a', 'path2/a': 'a'}
        assert_contents(merged_dir, expected_content)

from peru.cache import Cache
from peru.merge import merge_imports_tree

from shared import create_dir, assert_contents, PeruTest, make_synchronous


class MergeTest(PeruTest):

    @make_synchronous
    def setUp(self):
        self.cache_dir = create_dir()
        self.cache = yield from Cache(self.cache_dir)

        # These tests use this simple one-file tree as module contents.
        content = {'a': 'a'}
        content_dir = create_dir(content)
        self.content_tree = yield from self.cache.import_tree(content_dir)

    @make_synchronous
    def test_merge_from_map(self):
        imports = {'foo': ('path1',), 'bar': ('path2',)}
        target_trees = {'foo': self.content_tree, 'bar': self.content_tree}

        merged_tree = yield from merge_imports_tree(
            self.cache, imports, target_trees)

        merged_dir = create_dir()
        yield from self.cache.export_tree(merged_tree, merged_dir)
        expected_content = {'path1/a': 'a', 'path2/a': 'a'}
        assert_contents(merged_dir, expected_content)

    @make_synchronous
    def test_merge_from_multimap(self):
        # This represents a list of key-value pairs in YAML, for example:
        #     imports:
        #         foo:
        #           - path1
        #           - path2
        imports = {'foo': ('path1', 'path2')}
        target_trees = {'foo': self.content_tree}

        merged_tree = yield from merge_imports_tree(
            self.cache, imports, target_trees)

        merged_dir = create_dir()
        yield from self.cache.export_tree(merged_tree, merged_dir)
        expected_content = {'path1/a': 'a', 'path2/a': 'a'}
        assert_contents(merged_dir, expected_content)
# These tests use this simple one-file tree as module contents. # This represents a list of key-value pairs in YAML, for example: #     imports: #         foo: #           - path1 #           - path2