import uuid import factory import factory.fuzzy from functools import partial from django.utils import timezone from yandex_money.models import Payment from factories.courses import CourseFactory, TopicFactory, LessonFactory from factories.users import UserFactory from finance.models import Invoice Faker = partial(factory.Faker, locale='ru_RU') class BillFactory(factory.django.DjangoModelFactory): class Meta: model = 'finance.Bill' user = factory.SubFactory(UserFactory) opener = factory.SubFactory(UserFactory) description = Faker('text') @factory.lazy_attribute def course_token(self): course = CourseFactory() topic = TopicFactory( course=course ) LessonFactory( topic=topic ) return course.token class InvoiceFactory(factory.django.DjangoModelFactory): class Meta: model = 'finance.Invoice' status = factory.fuzzy.FuzzyChoice( (choice[0] for choice in Invoice.BILL_STATUSES) ) price = factory.fuzzy.FuzzyDecimal(1000) real_price = factory.fuzzy.FuzzyDecimal(1000) method = factory.fuzzy.FuzzyChoice( (choice[0] for choice in Invoice.BILL_METHOD) ) key = factory.Faker('pyint') yandex_pay = factory.SubFactory('factories.finance.PaymentFactory') comment = Faker('word') bill = factory.SubFactory(BillFactory) class PaymentFactory(factory.django.DjangoModelFactory): class Meta: model = 'yandex_money.Payment' user = factory.SubFactory(UserFactory) pub_date = timezone.now() order_amount = factory.fuzzy.FuzzyDecimal(1000) payment_type = factory.fuzzy.FuzzyChoice( (choice[0] for choice in Payment.PAYMENT_TYPE.CHOICES) ) order_number = factory.LazyFunction(uuid.uuid4) status = factory.fuzzy.FuzzyChoice( (choice[0] for choice in Payment.STATUS.CHOICES) ) invoice_id = factory.Faker('pyint') shop_amount = factory.fuzzy.FuzzyDecimal(1000) performed_datetime = timezone.now()