From 2e13c4772b5cf73c6c0b51cec707bc0ff81645a4 Mon Sep 17 00:00:00 2001 From: dandds Date: Mon, 30 Jul 2018 15:50:33 -0400 Subject: [PATCH] domain repos for PE numbers and task orders --- atst/domain/pe_numbers.py | 15 ++++++++++++++ atst/domain/task_orders.py | 18 +++++++++++++++++ tests/domain/test_pe_numbers.py | 34 ++++++++++++++++++++++++++++++++ tests/domain/test_task_orders.py | 34 ++++++++++++++++++++++++++++++++ tests/factories.py | 12 ++++++++++- 5 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 atst/domain/pe_numbers.py create mode 100644 atst/domain/task_orders.py create mode 100644 tests/domain/test_pe_numbers.py create mode 100644 tests/domain/test_task_orders.py diff --git a/atst/domain/pe_numbers.py b/atst/domain/pe_numbers.py new file mode 100644 index 00000000..07d79585 --- /dev/null +++ b/atst/domain/pe_numbers.py @@ -0,0 +1,15 @@ +from atst.models.pe_number import PENumber +from .exceptions import NotFoundError + + +class PENumbers(object): + + def __init__(self, db_session): + self.db_session = db_session + + def get(self, number): + pe_number = self.db_session.query(PENumber).get(number) + if not pe_number: + raise NotFoundError("pe_number") + + return pe_number diff --git a/atst/domain/task_orders.py b/atst/domain/task_orders.py new file mode 100644 index 00000000..cbc4cc4e --- /dev/null +++ b/atst/domain/task_orders.py @@ -0,0 +1,18 @@ +from sqlalchemy.orm.exc import NoResultFound + +from atst.models.task_order import TaskOrder +from .exceptions import NotFoundError + + +class TaskOrders(object): + + def __init__(self, db_session): + self.db_session = db_session + + def get(self, order_number): + try: + task_order = self.db_session.query(TaskOrder).filter_by(number=order_number).one() + except NoResultFound: + raise NotFoundError("task_order") + + return task_order diff --git a/tests/domain/test_pe_numbers.py b/tests/domain/test_pe_numbers.py new file mode 100644 index 00000000..ba9025be --- /dev/null +++ b/tests/domain/test_pe_numbers.py @@ -0,0 +1,34 @@ +import pytest + +from atst.domain.exceptions import NotFoundError +from atst.domain.pe_numbers import PENumbers + +from tests.factories import PENumberFactory + + +@pytest.fixture() +def pe_numbers(db): + return PENumbers(db) + +@pytest.fixture(scope="function") +def new_pe_number(db): + def make_pe_number(**kwargs): + pen = PENumberFactory.create(**kwargs) + db.add(pen) + db.commit() + + return pen + + return make_pe_number + + +def test_can_get_pe_number(pe_numbers, new_pe_number): + new_pen = new_pe_number(number="0101969F", description="Combat Support - Offensive") + pen = pe_numbers.get(new_pen.number) + + assert pen.number == new_pen.number + + +def test_nonexistent_pe_number_raises(pe_numbers): + with pytest.raises(NotFoundError): + pe_numbers.get("some fake number") diff --git a/tests/domain/test_task_orders.py b/tests/domain/test_task_orders.py new file mode 100644 index 00000000..9b7c0882 --- /dev/null +++ b/tests/domain/test_task_orders.py @@ -0,0 +1,34 @@ +import pytest + +from atst.domain.exceptions import NotFoundError +from atst.domain.task_orders import TaskOrders + +from tests.factories import TaskOrderFactory + + +@pytest.fixture() +def task_orders(db): + return TaskOrders(db) + +@pytest.fixture(scope="function") +def new_task_order(db): + def make_task_order(**kwargs): + to = TaskOrderFactory.create(**kwargs) + db.add(to) + db.commit() + + return to + + return make_task_order + + +def test_can_get_task_order(task_orders, new_task_order): + new_to = new_task_order(number="0101969F") + to = task_orders.get(new_to.number) + + assert to.id == to.id + + +def test_nonexistent_task_order_raises(task_orders): + with pytest.raises(NotFoundError): + task_orders.get("some fake number") diff --git a/tests/factories.py b/tests/factories.py index 1c870308..582ce461 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -1,7 +1,9 @@ import factory from uuid import uuid4 -from atst.models import Request +from atst.models import Request, RequestStatusEvent +from atst.models.pe_number import PENumber +from atst.models.task_order import TaskOrder class RequestFactory(factory.Factory): @@ -9,3 +11,11 @@ class RequestFactory(factory.Factory): model = Request id = factory.Sequence(lambda x: uuid4()) + +class PENumberFactory(factory.Factory): + class Meta: + model = PENumber + +class TaskOrderFactory(factory.Factory): + class Meta: + model = TaskOrder