Skip to content

Commit

Permalink
in memory-repository
Browse files Browse the repository at this point in the history
  • Loading branch information
pgorecki committed May 24, 2021
1 parent f4a8744 commit 05bdee2
Show file tree
Hide file tree
Showing 14 changed files with 198 additions and 13 deletions.
129 changes: 128 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ authors = ["Przemysław Górecki <[email protected]>"]
python = "^3.9"
pytest = "^6.2.4"
pydantic = "^1.8.2"
black = "^21.5b1"

[tool.poetry.dev-dependencies]

Expand Down
2 changes: 1 addition & 1 deletion src/modules/listing/domain/entities.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@


class AuctionItem(Entity):
pass
pass
2 changes: 0 additions & 2 deletions src/modules/listing/domain/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,3 @@

class DraftCreatedEvent(DomainEvent):
pass


3 changes: 2 additions & 1 deletion src/modules/listing/domain/rules.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from seedwork.domain.rules import BusinessRule
from seedwork.domain.value_objects import Currency


class AuctionItemPriceMustBeGreaterThanZero(BusinessRule):
message = "Price must be greater that zero"
price: Currency

def is_broken(self) -> bool:
return self.price <= 0
return self.price <= 0
2 changes: 1 addition & 1 deletion src/seedwork/application/command.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@


class Command(BaseModel):
pass
pass
2 changes: 2 additions & 0 deletions src/seedwork/application/exceptions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class EntityNotFoundException(Exception):
pass
8 changes: 6 additions & 2 deletions src/seedwork/domain/entities.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
class Entity:
pass
from pydantic import BaseModel, Field
import uuid


class Entity(BaseModel):
id: uuid.UUID = Field(default_factory=uuid.uuid4)
2 changes: 1 addition & 1 deletion src/seedwork/domain/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@


class DomainEvent(BaseModel):
pass
pass
2 changes: 1 addition & 1 deletion src/seedwork/domain/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ class DomainException(Exception):


class BusinessRuleValidationException(DomainException):
pass
pass
2 changes: 1 addition & 1 deletion src/seedwork/domain/rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ def get_message(self) -> str:
return self.message

def is_broken(self) -> bool:
pass
pass
2 changes: 1 addition & 1 deletion src/seedwork/domain/value_objects.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
class Currency(int):
pass
pass
20 changes: 19 additions & 1 deletion src/seedwork/infrastructure/repository.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,20 @@
from seedwork.domain.entities import Entity
from seedwork.application.exceptions import EntityNotFoundException


class Repository:
pass
pass


class InMemoryRepository(Repository):
def __init__(self) -> None:
self.objects = {}

def get_by_id(self, id) -> Entity:
try:
return self.objects[id]
except KeyError:
raise EntityNotFoundException

def persist(self, entity: Entity):
self.objects[entity.id] = entity
34 changes: 34 additions & 0 deletions src/seedwork/infrastructure/test_repository.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from seedwork.infrastructure.repository import InMemoryRepository
from seedwork.domain.entities import Entity


class Person(Entity):
first_name: str
last_name: str


def test_InMemoryRepository_persist_one():
# arrange
person = Person(first_name="John", last_name="Doe")
repository = InMemoryRepository()

# act
repository.persist(person)

# assert
assert repository.get_by_id(person.id) == person


def test_InMemoryRepository_persist_two():
# arrange
person1 = Person(first_name="John", last_name="Doe")
person2 = Person(first_name="Mary", last_name="Doe")
repository = InMemoryRepository()

# act
repository.persist(person1)
repository.persist(person2)

# assert
assert repository.get_by_id(person1.id) == person1
assert repository.get_by_id(person2.id) == person2

0 comments on commit 05bdee2

Please sign in to comment.