from os import link import pytest from compose_viz.parser import Parser from compose_viz.compose import Compose from compose_viz.service import Service from compose_viz.extends import Extends @pytest.mark.parametrize('test_input,expected',[ ('tests/in/000001.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], ), ])), ('tests/in/000010.yaml',Compose([ Service( name='base', image='busybox', ), Service( name='common', extends=Extends(service_name='frontend'), ), Service( name='cli', extends=Extends(service_name='common'), ), ])), ('tests/in/000011.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', networks=['admin'], extends=Extends(service_name='frontend'), ), Service( name='backend', networks=['back-tier', 'admin'], extends=Extends(service_name='frontend'), ), ])), ('tests/in/000100.yaml',Compose([ Service( name='web', image='build from .', ports=['8000:5000'], ), Service( name='redis', image='redis:alpine', ), ])), ('tests/in/000101.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ports=['8000:5000'], networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', ports=['8000:5001'], networks=['admin'], ), Service( name='backend', image='awesome/backend', ports=['8000:5010'], networks=['back-tier', 'admin'], ), ])), ('tests/in/000110.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ports=['8000:5000'], ), Service( name='monitoring', extends=Extends(service_name='frontend'), ), Service( name='backend', extends=Extends(service_name='frontend'), ports=['8000:5001'], ), ])), ('tests/in/000111.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ports=['8000:5000'], networks=['front-tier', 'back-tier'], ), Service( name='monitoring', networks=['admin'], extends=Extends(service_name='frontend'), ), Service( name='backend', ports=['8000:5001'], networks=['back-tier', 'admin'], extends=Extends(service_name='frontend'), ), ])), ('tests/in/001000.yaml',Compose([ Service( name='web', image='build from .', depends_on=['db','redis'], ), Service( name='redis', image='redis', ), Service( name='db', image='postgres', ), ])), ('tests/in/001001.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], depends_on=['monitoring','backend'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], ), ])), ('tests/in/001010.yaml',Compose([ Service( name='web', depends_on=['db','redis'], extends=Extends(service_name='redis'), ), Service( name='redis', image='redis', ), Service( name='db', image='postgres', ), ])), ('tests/in/001011.yaml',Compose([ Service( name='frontend', networks=['front-tier', 'back-tier'], depends_on=['monitoring','backend'], extends=Extends(service_name='backend'), ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], ), ])), ('tests/in/001100.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ports=['8000:5000'], ), Service( name='monitoring', image='awesome/monitoring', depends_on=['backend'], ports=['8000:5010'], ), Service( name='backend', image='awesome/backend', ports=['8000:5001'], ), ])), ('tests/in/001101.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], depends_on=['backend'], ports=['8000:5010'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], ), ])), ('tests/in/001110.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ports=['8000:5000'], ), Service( name='monitoring', depends_on=['backend'], extends=Extends(service_name='frontend'), ports=['8000:5010'], ), Service( name='backend', image='awesome/backend', ports=['8000:5001'], ), ])), ('tests/in/001111.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', networks=['admin'], depends_on=['backend'], extends=Extends(service_name='frontend'), ports=['8000:5010'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], ), ])), ('tests/in/010000.yaml',Compose([ Service( name='backend', image='awesome/backend', volumes=['db-data'], ), ])), ('tests/in/010001.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], volumes=['db-data'], ), ])), ('tests/in/010010.yaml',Compose([ Service( name='common', image='busybox', volumes=['common-volume'], ), Service( name='cli', extends=Extends(service_name='common'), volumes=['cli-volume'], ), ])), ('tests/in/010011.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier', 'admin'], volumes=['db-data'], extends=Extends(service_name='monitoring'), ), ])), ('tests/in/010100.yaml',Compose([ Service( name='backend', image='awesome/backend', volumes=['db-data'], ports=["8000:5000"], ), ])), ('tests/in/010101.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], volumes=['db-data'], ports=['8000:5000'], ), ])), ('tests/in/010110.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', volumes=['db-data'], extends=Extends(service_name='monitoring'), ports=['8000:5000'], ), ])), ('tests/in/010111.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier', 'admin'], volumes=['db-data'], extends=Extends(service_name='monitoring'), ports=['8000:5000'], ), ])), ('tests/in/011000.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', depends_on=['backend'], volumes=['db-data'], ), Service( name='backend', image='awesome/backend', ), ])), ('tests/in/011001.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier','admin'], volumes=['db-data'], depends_on=['monitoring'], ), ])), ('tests/in/011010.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', volumes=['db-data'], depends_on=['monitoring'], extends=Extends(service_name='frontend'), ), ])), ('tests/in/011011.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier','back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier','admin'], volumes=['db-data'], depends_on=['monitoring'], extends=Extends(service_name='frontend'), ), ])), ('tests/in/011100.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', volumes=['db-data'], depends_on=['monitoring'], extends=Extends(service_name='frontend'), ports=['8000:5010'], ), ])), ('tests/in/011101.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], volumes=['db-data'], depends_on=['monitoring'], ports=['8000:5010'], ), ])), ('tests/in/011110.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', volumes=['db-data'], depends_on=['monitoring'], extends=Extends(service_name='frontend'), ports=['8000:5010'], ), ])), ('tests/in/011111.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier', 'admin'], volumes=['db-data'], depends_on=['monitoring'], extends=Extends(service_name='monitoring'), ports=['8000:5010'], ), ])), ('tests/in/100000.yaml',Compose([ Service( name='web', image='build from .', links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/100001.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/100010.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', extends=Extends(service_name='frontend'), links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/100011.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier', 'admin'], extends=Extends(service_name='frontend'), links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/100100.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', image='awesome/backend', ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/100101.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/100110.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', extends=Extends(service_name='frontend'), ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/100111.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier', 'admin'], extends=Extends(service_name='frontend'), ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/101000.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', image='awesome/backend', depends_on=['monitoring'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/101001.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], depends_on=['monitoring'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/101010.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', depends_on=['monitoring'], extends=Extends(service_name='frontend'), links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/101011.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier', 'admin'], depends_on=['monitoring'], extends=Extends(service_name='frontend'), links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/101100.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', image='awesome/backend', depends_on=['monitoring'], ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/101101.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], depends_on=['monitoring'], ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/101110.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', depends_on=['monitoring'], extends=Extends(service_name='frontend'), ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/101111.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier', 'admin'], depends_on=['monitoring'], extends=Extends(service_name='frontend'), ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/110000.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', volumes=['db-data'], links=['db:database'], ), Service( name='backend', image='awesome/backend', ), Service( name='db', image='postgres', ), ])), ('tests/in/110001.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], volumes=['db-data'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/110010.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', volumes=['db-data'], extends=Extends(service_name='frontend'), links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/110011.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier', 'admin'], volumes=['db-data'], extends=Extends(service_name='frontend'), links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/110100.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', image='awesome/backend', volumes=['db-data'], ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/110101.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], volumes=['db-data'], ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/110110.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', volumes=['db-data'], extends=Extends(service_name='frontend'), ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/110111.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier', 'admin'], volumes=['db-data'], extends=Extends(service_name='frontend'), ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/111000.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', depends_on=['backend'], volumes=['db-data'], links=['db:database'], ), Service( name='backend', image='awesome/backend', ), Service( name='db', image='postgres', ), ])), ('tests/in/111001.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], volumes=['db-data'], depends_on=['monitoring'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/111010.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', volumes=['db-data'], depends_on=['monitoring'], extends=Extends(service_name='frontend'), links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/111011.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier', 'admin'], volumes=['db-data'], depends_on=['monitoring'], extends=Extends(service_name='frontend'), links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/111100.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', image='awesome/backend', volumes=['db-data'], depends_on=['monitoring'], ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/111101.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', image='awesome/backend', networks=['back-tier', 'admin'], volumes=['db-data'], depends_on=['monitoring'], ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/111110.yaml',Compose([ Service( name='frontend', image='awesome/webapp', ), Service( name='monitoring', image='awesome/monitoring', ), Service( name='backend', volumes=['db-data'], depends_on=['monitoring'], extends=Extends(service_name='frontend'), ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ('tests/in/111111.yaml',Compose([ Service( name='frontend', image='awesome/webapp', networks=['front-tier', 'back-tier'], ), Service( name='monitoring', image='awesome/monitoring', networks=['admin'], ), Service( name='backend', networks=['back-tier', 'admin'], volumes=['db-data'], depends_on=['monitoring'], extends=Extends(service_name='frontend'), ports=['8000:5010'], links=['db:database'], ), Service( name='db', image='postgres', ), ])), ]) def test_parse_file(test_input, expected): parser = Parser() actual = parser.parse(test_input) assert len(actual.services) == len(expected.services) for actual_service, expected_service in zip(actual.services, expected.services): assert actual_service.name == expected_service.name assert actual_service.image == expected_service.image assert actual_service.ports == expected_service.ports assert actual_service.networks == expected_service.networks assert actual_service.volumes == expected_service.volumes assert actual_service.depends_on == expected_service.depends_on assert actual_service.links == expected_service.links assert actual_service.extends == expected_service.extends