Skip to content

Commit

Permalink
[maykinmedia/objects-api#481] Fix old tests
Browse files Browse the repository at this point in the history
  • Loading branch information
danielmursa-dev committed Dec 9, 2024
1 parent bae8e82 commit 952b2b2
Show file tree
Hide file tree
Showing 12 changed files with 204 additions and 169 deletions.
53 changes: 0 additions & 53 deletions src/objecttypes/setup_configuration/demo.py

This file was deleted.

16 changes: 16 additions & 0 deletions src/objecttypes/setup_configuration/models.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from django.contrib.sites.models import Site

from django_setup_configuration.models import ConfigurationModel
from pydantic import Field

Expand All @@ -21,3 +23,17 @@ class Meta:

class TokenAuthGroupConfigurationModel(ConfigurationModel):
items: list[TokenAuthConfigurationModel] = Field()


class SiteConfigurationModel(ConfigurationModel):
class Meta:
django_model_refs = {
Site: (
"domain",
"name",
)
}


class SiteGroupConfigurationModel(ConfigurationModel):
items: list[SiteConfigurationModel] = Field()
55 changes: 0 additions & 55 deletions src/objecttypes/setup_configuration/objects.py

This file was deleted.

37 changes: 0 additions & 37 deletions src/objecttypes/setup_configuration/site.py

This file was deleted.

67 changes: 44 additions & 23 deletions src/objecttypes/setup_configuration/steps.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import logging

from django.contrib.sites.models import Site
from django.core.exceptions import ValidationError
from django.db import IntegrityError

from django_setup_configuration.configuration import BaseConfigurationStep
from django_setup_configuration.exceptions import ConfigurationRunFailed

from objecttypes.setup_configuration.models import TokenAuthGroupConfigurationModel
from objecttypes.setup_configuration.models import (
SiteGroupConfigurationModel,
TokenAuthGroupConfigurationModel,
)
from objecttypes.token.models import TokenAuth

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -69,32 +73,49 @@ def execute(self, model: TokenAuthGroupConfigurationModel) -> None:
logger.info(f"Configured {item.identifier}")


class SiteConfigurationStep(BaseConfigurationStep[TokenAuthGroupConfigurationModel]):
class SitesConfigurationStep(BaseConfigurationStep[SiteGroupConfigurationModel]):
"""
Configure configuration groups for the Objects API backend
Configure the application site/domain.
"""

verbose_name = "Site Configuration"
required_settings = ["OBJECTTYPES_DOMAIN", "OBJECTTYPES_ORGANIZATION"]
enable_setting = "SITES_CONFIG_ENABLE"
namespace = "objecttypes_sites"
enable_setting = "objecttypes_site_config_enable"

verbose_name = "Configuration to set up Sites for ObjectTypes"
config_model = SiteGroupConfigurationModel

def execute(self, model: SiteGroupConfigurationModel) -> None:
for item in model.items:
logger.info(f"Configuring {item.domain}")

def is_configured(self) -> bool:
site = Site.objects.get_current()
return site.domain == settings.OBJECTTYPES_DOMAIN
model_kwargs = {
"domain": item.domain,
"name": item.name,
}

def configure(self):
site = Site.objects.get_current()
site.domain = settings.OBJECTTYPES_DOMAIN
site.name = f"Objecttypes {settings.OBJECTTYPES_ORGANIZATION}".strip()
site.save()
instance = Site(**model_kwargs)

def test_configuration(self):
full_url = build_absolute_url(reverse("home"))
try:
response = requests.get(full_url)
response.raise_for_status()
except requests.RequestException as exc:
raise SelfTestFailed(f"Could not access home page at '{full_url}'") from exc
try:
instance.full_clean(exclude=("id",), validate_unique=False)
except ValidationError as exception:
exception_message = f"Validation error(s) occured for {item.domain}."
raise ConfigurationRunFailed(exception_message) from exception

"""
logger.debug(f"No validation errors found for {item.domain}")

try:
logger.debug(f"Saving {item.domain}")
Site.objects.update_or_create(
domain=item.domain,
defaults={
key: value
for key, value in model_kwargs.items()
if key != "domain"
},
)

except IntegrityError as exception:
exception_message = f"Failed configuring token {item.domain}."
raise ConfigurationRunFailed(exception_message) from exception

logger.info(f"Configured {item.domain}")
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
objecttypes_site_config_enable: true
objecttypes_sites:
items:
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
objecttypes_site_config_enable: true
objecttypes_sites:
items:
- domain: example-1.com
name: example-1

- domain: example-2.com
name: example-2
93 changes: 93 additions & 0 deletions src/objecttypes/setup_configuration/tests/test_site_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
from pathlib import Path

from django.contrib.sites.models import Site
from django.test import TestCase

from django_setup_configuration.exceptions import (
ConfigurationRunFailed,
PrerequisiteFailed,
)
from django_setup_configuration.test_utils import build_step_config_from_sources

from objecttypes.setup_configuration.steps import SitesConfigurationStep

DIR_FILES = (Path(__file__).parent / "files/sites").resolve()


class SitesConfigurationStepTests(TestCase):
def test_valid_setup_default(self):
sites = Site.objects.order_by("pk")
site = sites[0]
self.assertEqual(sites.count(), 1)
self.assertEqual(site.domain, "example.com")
self.assertEqual(site.name, "example.com")

setup_config = build_step_config_from_sources(
SitesConfigurationStep,
str(DIR_FILES / "valid_setup.yaml"),
)
step = SitesConfigurationStep()
step.execute(setup_config)

sites = Site.objects.order_by("pk")
self.assertEqual(sites.count(), 3)

site = sites[1]
self.assertEqual(site.domain, "example-1.com")
self.assertEqual(site.name, "example-1")

site = sites[2]
self.assertEqual(site.domain, "example-2.com")
self.assertEqual(site.name, "example-2")

def test_valid_update_existing_sites(self):
sites = Site.objects.order_by("pk")
site = sites[0]
self.assertEqual(sites.count(), 1)
self.assertEqual(site.domain, "example.com")
self.assertEqual(site.name, "example.com")

Site.objects.create(domain="example-2.com", name="example-3")
sites = Site.objects.order_by("pk")
self.assertEqual(sites.count(), 2)

setup_config = build_step_config_from_sources(
SitesConfigurationStep,
str(DIR_FILES / "valid_setup.yaml"),
)
step = SitesConfigurationStep()
step.execute(setup_config)

sites = Site.objects.order_by("pk")
self.assertEqual(sites.count(), 3)

site = sites[1]
self.assertEqual(site.domain, "example-2.com")
self.assertEqual(site.name, "example-2")

site = sites[2]
self.assertEqual(site.domain, "example-1.com")
self.assertEqual(site.name, "example-1")

def test_invalid_setup_empty(self):
sites = Site.objects.order_by("pk")
site = sites[0]
self.assertEqual(sites.count(), 1)
self.assertEqual(site.domain, "example.com")
self.assertEqual(site.name, "example.com")

with self.assertRaises(PrerequisiteFailed) as command_error:
setup_config = build_step_config_from_sources(
SitesConfigurationStep,
str(DIR_FILES / "invalid_setup.yaml"),
)
step = SitesConfigurationStep()
step.execute(setup_config)

self.assertTrue("Input should be a valid list" in str(command_error.exception))

sites = Site.objects.order_by("pk")
site = sites[0]
self.assertEqual(sites.count(), 1)
self.assertEqual(site.domain, "example.com")
self.assertEqual(site.name, "example.com")
Loading

0 comments on commit 952b2b2

Please sign in to comment.