Skip to content
This repository was archived by the owner on Sep 3, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions tests/case/test_case_service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
from dispatch.auth.models import DispatchUser
from dispatch.case.models import Case, CaseUpdate
from dispatch.case.severity.models import CaseSeverity
from dispatch.case.priority.models import CasePriority
from dispatch.case.type.models import CaseType


def test_get(session, case: Case):
from dispatch.case.service import get

t_case = get(db_session=session, case_id=case.id)
assert t_case.id == case.id


def test_get_by_name(session, case: Case):
from dispatch.case.service import get_by_name

t_case = get_by_name(db_session=session, project_id=case.project.id, name=case.name)
assert t_case.name == case.name


def test_get_all(session, case: Case):
from dispatch.case.service import get_all

t_cases = get_all(db_session=session, project_id=case.project.id).all()
assert t_cases


def test_get_all_by_status(session, new_case: Case):
from dispatch.case.service import get_all_by_status
from dispatch.case.enums import CaseStatus

# Some case
t_cases = get_all_by_status(
db_session=session,
project_id=new_case.project.id,
status=CaseStatus.new,
)
assert t_cases

# None case
t_cases = get_all_by_status(
db_session=session,
project_id=new_case.project.id,
status=CaseStatus.closed,
)
assert not t_cases


def test_create(session, case: Case, project):
from dispatch.case.service import create as create_case

# No assignee, No oncall_service, resolves current_user to assignee
current_user = DispatchUser(email="[email protected]", password=bytes("test", "utf-8"))
session.add(current_user)
session.commit()

case.case_type = CaseType(name="Test", project=project)
case.case_severity = CaseSeverity(name="Low", project=project)
case.case_priority = CasePriority(name="Low", project=project)
case.project = project

case_out = create_case(db_session=session, case_in=case, current_user=current_user)
assert case_out
assert case_out.assignee.email == current_user.email


def test_update(session, case: Case, project):
from dispatch.case.service import update as update_case
from dispatch.case.enums import CaseStatus
from dispatch.enums import Visibility

current_user = DispatchUser(email="[email protected]")
case.case_type = CaseType(name="Test", project=project)
case.case_severity = CaseSeverity(name="Low", project=project)
case.case_priority = CasePriority(name="Low", project=project)
case.project = project
case.visibility = Visibility.open

case_in = CaseUpdate(
title="XXX",
description="YYY",
resolution="True Positive",
status=CaseStatus.closed,
visibility=Visibility.restricted,
)

case_out = update_case(
db_session=session, case=case, case_in=case_in, current_user=current_user
)
assert case_out.title == "XXX"
assert case_out.description == "YYY"
assert case_out.resolution == "True Positive"
assert case_out.status == CaseStatus.closed
assert case_out.visibility == Visibility.restricted


def test_delete(session, case: Case):
from dispatch.case.service import delete as case_delete
from dispatch.case.service import get as case_get

case_delete(
db_session=session,
case_id=case.id,
)

t_case = case_get(db_session=session, case_id=case.id)
assert not t_case
23 changes: 23 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
from .factories import (
DispatchUserFactory,
CaseFactory,
CasePriorityFactory,
CaseSeverityFactory,
CaseTypeFactory,
ConferenceFactory,
ConversationFactory,
DefinitionFactory,
Expand Down Expand Up @@ -456,6 +459,26 @@ def case(session):
return CaseFactory()


@pytest.fixture
def new_case(session):
return CaseFactory(status="New")


@pytest.fixture
def case_priority(session):
return CasePriorityFactory()


@pytest.fixture
def case_severity(session):
return CaseSeverityFactory()


@pytest.fixture
def case_type(session):
return CaseTypeFactory()


@pytest.fixture
def incident(session):
return IncidentFactory()
Expand Down
68 changes: 66 additions & 2 deletions tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@

from faker import Faker

from factory import Sequence, post_generation, SubFactory, LazyAttribute
from factory import Sequence, post_generation, SubFactory, LazyAttribute, LazyFunction
from factory.alchemy import SQLAlchemyModelFactory
from factory.fuzzy import FuzzyChoice, FuzzyText, FuzzyDateTime, FuzzyInteger

from dispatch.auth.models import DispatchUser, hash_password # noqa
from dispatch.case.models import Case
from dispatch.case.models import Case, CaseRead, Case
from dispatch.case.priority.models import CasePriority
from dispatch.case.severity.models import CaseSeverity
from dispatch.case.type.models import CaseType
from dispatch.conference.models import Conference
from dispatch.conversation.models import Conversation
from dispatch.definition.models import Definition
Expand Down Expand Up @@ -665,6 +668,19 @@ def incident(self, create, extracted, **kwargs):
self.incident_id = extracted.id


class CaseTypeFactory(BaseFactory):
"""Case Type Factory."""

name = FuzzyText()
description = FuzzyText()
project = SubFactory(ProjectFactory)

class Meta:
"""Factory Configuration."""

model = CaseType


class CaseFactory(BaseFactory):
"""Case Factory."""

Expand All @@ -674,12 +690,60 @@ class CaseFactory(BaseFactory):
description = FuzzyText()
status = FuzzyChoice(["New", "Triage", "Escalated", "Closed"])
project = SubFactory(ProjectFactory)
case_type = SubFactory(CaseTypeFactory)

class Meta:
"""Factory Configuration."""

model = Case

class Params:

status = "New"


class CasePriorityFactory(BaseFactory):
"""Case Priority Factory."""

name = FuzzyText()
description = FuzzyText()
project = SubFactory(ProjectFactory)

class Meta:
"""Factory Configuration."""

model = CasePriority


class CaseSeverityFactory(BaseFactory):
"""Case Severity Factory."""

name = FuzzyText()
description = FuzzyText()
project = SubFactory(ProjectFactory)

class Meta:
"""Factory Configuration."""

model = CaseSeverity


class CaseReadFactory(BaseFactory):
"""CaseRead Factory."""

id = Sequence(lambda n: f"1{n}")
name = FuzzyText()
title = FuzzyText()
case_priority = SubFactory(CasePriorityFactory)
case_severity = SubFactory(CaseSeverityFactory)
case_type = SubFactory(CaseTypeFactory)
project = SubFactory(ProjectFactory)

class Meta:
"""Factory Configuration."""

model = CaseRead


class IncidentFactory(BaseFactory):
"""Incident Factory."""
Expand Down