checkout/src/purchase/tests/factories.py
2023-03-25 20:01:14 +01:00

85 lines
2.6 KiB
Python

import random
from functools import partial
import factory
from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import Group, Permission
from common.models import User
from purchase.models import Basket, BasketItem, PaymentMethod, Product
USER_PASSWORD = "test_password"
class CashierFactory(factory.django.DjangoModelFactory):
class Meta:
model = User
username = factory.Faker("user_name")
password = make_password(USER_PASSWORD)
is_active = True
is_staff = True
@factory.post_generation
def groups(self, create, _extracted, **_kwargs):
if create:
self.groups.add(CashierGroupFactory())
class ProductFactory(factory.django.DjangoModelFactory):
class Meta:
model = Product
name = factory.Faker("text", max_nb_chars=80)
unit_price_cents = factory.LazyFunction(partial(random.randint, 80, 650))
class PaymentMethodFactory(factory.django.DjangoModelFactory):
class Meta:
model = PaymentMethod
name = factory.Faker("text", max_nb_chars=30)
class BasketWithItemsFactory(factory.django.DjangoModelFactory):
class Meta:
model = Basket
payment_method = factory.Iterator(PaymentMethod.objects.all())
@factory.post_generation
def items(self, create, _extracted, **_kwargs):
if create:
products = Product.objects.order_by("?")
quantity = random.randint(1, len(products))
for product in products[:quantity]:
BasketItem.objects.create(
product=product,
basket=self,
quantity=random.randint(1, 4),
unit_price_cents=product.unit_price_cents,
)
class CashierGroupFactory(factory.django.DjangoModelFactory):
class Meta:
model = Group
name = "Caissier"
@factory.post_generation
def permissions(self, create, _extracted, **_kwargs):
if create:
self.permissions.add(
Permission.objects.get(codename="add_basket"),
Permission.objects.get(codename="change_basket"),
Permission.objects.get(codename="delete_basket"),
Permission.objects.get(codename="view_basket"),
Permission.objects.get(codename="add_basketitem"),
Permission.objects.get(codename="change_basketitem"),
Permission.objects.get(codename="delete_basketitem"),
Permission.objects.get(codename="view_basketitem"),
Permission.objects.get(codename="view_paymentmethod"),
Permission.objects.get(codename="view_product"),
)