chore: Introduce card factory

This commit is contained in:
Paul Harrison 2022-11-18 20:27:21 +00:00
parent 6be02c447d
commit 68bfee17f1
2 changed files with 35 additions and 18 deletions

24
tests/conftest.py Normal file
View File

@ -0,0 +1,24 @@
from typing import Any, Callable, TypeVar
import pytest
from mypy_extensions import KwArg
from poker.constants import Suit, Value
from poker.models import Card
T = TypeVar("T")
Factory = Callable[[KwArg(Any)], T]
@pytest.fixture(scope="session")
def card_factory() -> Factory[Card]:
"""Get Card object factory."""
default = {
"suit": Suit.CLUBS,
"value": Value.ACE,
}
def factory(**kwargs: Any) -> Card:
return Card(**(default | kwargs))
return factory

View File

@ -1,28 +1,21 @@
import pytest
from pydantic import ValidationError
from poker.constants import Suit, Value
from poker.constants import Value
from poker.models import Card, Hand
from tests.conftest import Factory
def test_hand_should_contain_unique_cards() -> None:
def test_hand_should_contain_unique_cards(card_factory: Factory[Card]) -> None:
cards = [
Value.ACE,
Value.TWO,
Value.THREE,
Value.FOUR,
]
with pytest.raises(ValidationError):
_ = Hand(
cards=(
Card(suit=Suit.CLUBS, value=Value.ACE),
Card(suit=Suit.CLUBS, value=Value.TWO),
Card(suit=Suit.CLUBS, value=Value.THREE),
Card(suit=Suit.CLUBS, value=Value.FOUR),
Card(suit=Suit.CLUBS, value=Value.FOUR),
)
cards=tuple(card_factory(value=value) for value in cards + [Value.FOUR])
)
_ = Hand(
cards=(
Card(suit=Suit.CLUBS, value=Value.ACE),
Card(suit=Suit.CLUBS, value=Value.TWO),
Card(suit=Suit.CLUBS, value=Value.THREE),
Card(suit=Suit.CLUBS, value=Value.FOUR),
Card(suit=Suit.CLUBS, value=Value.FIVE),
)
)
_ = Hand(cards=tuple(card_factory(value=value) for value in cards + [Value.FIVE]))