Skip to content
This repository has been archived by the owner on Feb 21, 2022. It is now read-only.

Commit

Permalink
chore(entity): tests and fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Jaroslav Sevcik committed Jul 13, 2021
1 parent 0add7ca commit c09142e
Show file tree
Hide file tree
Showing 12 changed files with 402 additions and 85 deletions.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@


@pytest.fixture
def generate_base_component(base_component_factory, link_factory, group_factory):
def generate_base_component(component_base_factory, link_factory, group_factory):
group = group_factory(id=1, product_owner="john", project_owner="doe")
group.save()
component = base_component_factory(
component = component_base_factory(
id=1,
name="base",
type="database",
Expand All @@ -34,20 +34,20 @@ def generate_base_component(base_component_factory, link_factory, group_factory)
name="Datadog",
url="https://dashboard.datadog.com",
icon="poop",
component=component,
entity=component,
)
link_factory(
id=2,
name="Sentry",
url="https://sentry.skypicker.com",
component=component,
entity=component,
)


def test_generate_base_component(generate_base_component):
expected = """
- apiVersion: v1alpha1
kind: component
kind_: component
metadata:
name: base
owner: platform
Expand All @@ -65,7 +65,7 @@ def test_generate_base_component(generate_base_component):
url: https://sentry.skypicker.com
icon: null
spec:
type: database
type_: database
"""
repository = Repository.objects.get(pk=1)
content = generate(repository)
Expand Down
262 changes: 262 additions & 0 deletions test/entities/test_yaml_to_objects.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,262 @@
import pytest

import zoo.repos.tasks as uut
from zoo.entities.models import Entity
from zoo.libraries.models import Library
from zoo.services.models import Service

pytestmark = pytest.mark.django_db


def test_create_base_component(mocker, repository_factory):
repository = repository_factory(
id=1,
remote_id=11,
name="test_proj1",
owner="john_doe1",
url="https://github.co m/john_doe1/test_proj1",
provider="github",
)
repository_dict = {"id": repository.remote_id, "provider": repository.provider}

base_component = """
- apiVersion: v1alpha1
kind_: component
metadata:
name: base
owner: platform
group:
product_owner: john
project_owner: doe
maintainers: []
description: This is my fancy component
tags: []
links:
- name: Datadog
url: https://dashboard.datadog.com
icon: poop
- name: Sentry
url: https://sentry.skypicker.com
spec:
type_: database
"""

mocker.patch("zoo.repos.tasks.get_entity_file_content", return_value=base_component)
uut.update_project_from_entity_file(proj=repository_dict)
component_entity = Entity.objects.first()
assert Entity.objects.all().count() == 1
assert component_entity.kind == "component"
assert component_entity.name == "base"
assert component_entity.owner == "platform"
assert component_entity.service is None
assert component_entity.library is None
assert component_entity.type == "database"
assert component_entity.links.all().count() == 2
assert component_entity.group


def test_create_base_component_and_service(mocker, repository_factory):
repository = repository_factory(
id=1,
remote_id=11,
name="test_proj1",
owner="john_doe1",
url="https://github.co m/john_doe1/test_proj1",
provider="github",
)
repository_dict = {"id": repository.remote_id, "provider": repository.provider}

service_component = """
- apiVersion: v1alpha1
kind_: component
metadata:
name: base
owner: platform
group:
product_owner: john
project_owner: doe
maintainers: []
description: This is my fancy component
tags: []
links:
- name: Datadog
url: https://dashboard.datadog.com
icon: poop
- name: Sentry
url: https://sentry.skypicker.com
spec:
type_: service
environments:
- name: production
dashboard_url: https://dashboard.datadog.com
health_check_url: https://dashboard.datadog.com
service_urls:
- https://service.prod.com
- name: sandbox
dashboard_url: https://dashboard.datadog.sandbox.com
health_check_url: https://dashboard.datadog.sandbox.com
service_urls:
- https://service.sandbox.com
impact: profit
integrations:
pagerduty_service: pagerduty_service1234
sentry_project: sentry project 15234
lifecycle: production
"""

mocker.patch(
"zoo.repos.tasks.get_entity_file_content", return_value=service_component
)
uut.update_project_from_entity_file(proj=repository_dict)
component_entity = Entity.objects.first()
assert Entity.objects.all().count() == 1
assert Service.objects.all().count() == 1
assert component_entity.kind == "component"
assert component_entity.name == "base"
assert component_entity.owner == "platform"
assert component_entity.library is None
assert component_entity.type == "service"
assert component_entity.links.all().count() == 2
assert component_entity.group
assert component_entity.service is not None
assert component_entity.service.environments.all().count() == 2


def test_create_base_component_and_library(mocker, repository_factory):
repository = repository_factory(
id=1,
remote_id=11,
name="test_proj1",
owner="john_doe1",
url="https://github.co m/john_doe1/test_proj1",
provider="github",
)
repository_dict = {"id": repository.remote_id, "provider": repository.provider}

library_component = """
- apiVersion: v1alpha1
kind_: component
metadata:
name: base_lib
owner: platform
group:
product_owner: john
project_owner: doe
maintainers: []
description: This is my fancy component
tags: []
links:
- name: Datadog
url: https://dashboard.datadog.com
icon: poop
- name: Sentry
url: https://sentry.skypicker.com
spec:
type_: library
impact: profit
integrations:
sonarqube_project: sonarqube
lifecycle: production
"""

mocker.patch(
"zoo.repos.tasks.get_entity_file_content", return_value=library_component
)
uut.update_project_from_entity_file(proj=repository_dict)
component_entity = Entity.objects.first()
assert Entity.objects.all().count() == 1
assert Library.objects.all().count() == 1
assert component_entity.kind == "component"
assert component_entity.name == "base_lib"
assert component_entity.owner == "platform"
assert component_entity.type == "library"
assert component_entity.links.all().count() == 2
assert component_entity.group
assert component_entity.service is None
assert component_entity.library is not None


def test_create_multiple_components(mocker, repository_factory):
multiple_components = """
- apiVersion: v1alpha1
kind_: component
metadata:
name: base
owner: platform
group:
product_owner: john
project_owner: doe
maintainers: []
description: This is my fancy component
tags: []
links:
- name: Datadog
url: https://dashboard.datadog.com
icon: poop
- name: Sentry
url: https://sentry.skypicker.com
spec:
type_: database
---
- apiVersion: v1alpha1
kind_: component
metadata:
name: service
owner: platform
group:
product_owner: john
project_owner: doe
maintainers: []
description: This is my fancy component
tags: []
links:
- name: Datadog
url: https://service.dashboard.datadog.com
icon: poop
- name: Sentry
url: https://service..skypicker.com
spec:
type_: service
environments:
- name: production
dashboard_url: https://dashboard.datadog.com
health_check_url: https://dashboard.datadog.com
service_urls:
- https://service.prod.com
- name: sandbox
dashboard_url: https://dashboard.datadog.sandbox.com
health_check_url: https://dashboard.datadog.sandbox.com
service_urls:
- https://service.sandbox.com
impact: profit
integrations:
pagerduty_service: pagerduty_service1234
sentry_project: sentry project 15234
lifecycle: production
"""

repository = repository_factory(
id=1,
remote_id=11,
name="test_proj1",
owner="john_doe1",
url="https://github.com/john_doe1/test_proj1",
provider="github",
)
repository_dict = {"id": repository.remote_id, "provider": repository.provider}
mocker.patch(
"zoo.repos.tasks.get_entity_file_content", return_value=multiple_components
)
uut.update_project_from_entity_file(proj=repository_dict)
component_entity = Entity.objects.first()
assert Entity.objects.all().count() == 2
assert Service.objects.all().count() == 1

# assert component_entity.kind == "component"
# assert component_entity.name == "base_lib"
# assert component_entity.owner == "platform"
# assert component_entity.type == "library"
# assert component_entity.links.all().count() == 2
# assert component_entity.group
# assert component_entity.service is None
# assert component_entity.library is not None
Loading

0 comments on commit c09142e

Please sign in to comment.