diff --git a/scipost_django/finances/factories.py b/scipost_django/finances/factories.py index 13210f224267bd557d5c61ff6c5c41113e1d90b1..e101b9fd5ab60c2adcdc9f79bddf1b36731c4d9a 100644 --- a/scipost_django/finances/factories.py +++ b/scipost_django/finances/factories.py @@ -1,16 +1,29 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" +import datetime import random import factory -from finances.models import WorkLog +from affiliates.models import subsidy +from finances.constants import SUBSIDY_TYPES +from finances.models.pubfrac import PubFrac + +from .models import ( + PeriodicReport, + PeriodicReportType, + Subsidy, + SubsidyAttachment, + SubsidyPayment, + WorkLog, +) from production.constants import PRODUCTION_ALL_WORK_LOG_TYPES from scipost.factories import UserFactory -from common.faker import LazyRandEnum, fake +from common.faker import LazyAwareDate, LazyRandEnum, fake +# work_log.py class WorkLogFactory(factory.django.DjangoModelFactory): class Meta: model = WorkLog @@ -22,6 +35,106 @@ class WorkLogFactory(factory.django.DjangoModelFactory): work_date = factory.Faker("date_this_year") created = factory.Faker("past_date", start_date="-1y") - content_type = None - object_id = None - content = None + +class ProductionStreamWorkLogFactory(WorkLogFactory): + class Params: + stream = factory.SubFactory("production.factories.ProductionStreamFactory") + + content = factory.LazyAttribute(lambda self: self.stream) + + +# subsidy.py +class SubsidyFactory(factory.django.DjangoModelFactory): + class Meta: + model = Subsidy + + algorithm = Subsidy.ALGORITHM_RESERVES + algorithm_data = {} + organization = factory.SubFactory("organizations.factories.OrganizationFactory") + subsidy_type = LazyRandEnum(SUBSIDY_TYPES) + description = factory.Faker("sentence") + amount = factory.Faker("pyint") + amount_publicly_shown = True + status = LazyRandEnum(SUBSIDY_TYPES) + date_from = LazyAwareDate("date_this_decade") + paid_on = factory.LazyAttribute( + lambda self: fake.aware.date_between(start_date=self.date_from, end_date="+1y") + ) + date_until = factory.LazyAttribute( + lambda self: fake.aware.date_between(start_date=self.date_from, end_date="+1y") + ) + renewable = False + + +# subsidy_attachment.py +class SubsidyAttachmentFactory(factory.django.DjangoModelFactory): + class Meta: + model = SubsidyAttachment + + subsidy = factory.SubFactory(SubsidyFactory) + attachment = factory.django.FileField() + git_url = factory.Faker("url") + kind = LazyRandEnum(SubsidyAttachment.KIND_CHOICES) + date = LazyAwareDate("date_this_year") + description = factory.Faker("sentence") + visibility = LazyRandEnum(SubsidyAttachment.VISIBILITY_FINADMINONLY) + + +# subsidy_payment.py +class SubsidyPaymentFactory(factory.django.DjangoModelFactory): + class Meta: + model = SubsidyPayment + + subsidy = factory.SubFactory(SubsidyFactory) + reference = factory.Faker("iban") + amount = factory.Faker("pyint") + date_scheduled = LazyAwareDate("date_this_year") + invoice = factory.RelatedFactory( + "finances.factories.SubsidyAttachmentFactory", + factory_related_name="invoice_for", + kind=SubsidyAttachment.KIND_INVOICE, + description=factory.lazy_attribute( + lambda self: "Invoice for " + self.subsidy.organization.name + ), + ) + proof_of_payment = factory.RelatedFactory( + "finances.factories.SubsidyAttachmentFactory", + factory_related_name="proof_of_payment_for", + kind=SubsidyAttachment.KIND_PROOF_OF_PAYMENT, + description=factory.lazy_attribute( + lambda self: "Proof of payment for " + self.subsidy.organization.name + ), + ) + + +# periodic_report.py +class PeriodicReportTypeFactory(factory.django.DjangoModelFactory): + class Meta: + model = PeriodicReportType + + name = factory.Faker("word") + description = factory.Faker("paragraph") + + +class PeriodicReportFactory(factory.django.DjangoModelFactory): + class Meta: + model = PeriodicReport + + _type = factory.SubFactory(PeriodicReportTypeFactory) + _file = factory.django.FileField() + created_on = LazyAwareDate("date_this_year") + for_year = factory.Faker("year") + + +# pubfrac.py +class PubFracFactory(factory.django.DjangoModelFactory): + class Meta: + model = PubFrac + + organization = factory.SubFactory("organizations.factories.OrganizationFactory") + publication = factory.SubFactory("journals.factories.JournalPublicationFactory") + fraction = factory.Faker("pydecimal", left_digits=1, right_digits=3) + compensated_by = factory.SubFactory(SubsidyFactory) + cf_value = factory.LazyAttribute( + lambda self: self.fraction * self.publication.expenditures + ) diff --git a/scipost_django/finances/tests.py b/scipost_django/finances/tests.py deleted file mode 100644 index ddef03c4df91383dfce15a034976e3a469d77d70..0000000000000000000000000000000000000000 --- a/scipost_django/finances/tests.py +++ /dev/null @@ -1,7 +0,0 @@ -__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" -__license__ = "AGPL v3" - - -from django.test import TestCase - -# Create your tests here. diff --git a/scipost_django/finances/tests/__init__.py b/scipost_django/finances/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/scipost_django/finances/tests/test_factories.py b/scipost_django/finances/tests/test_factories.py new file mode 100644 index 0000000000000000000000000000000000000000..e5eeccafcd4d71da0e0a159fae6296c58d5fde71 --- /dev/null +++ b/scipost_django/finances/tests/test_factories.py @@ -0,0 +1,59 @@ +from django.test import TestCase +from ..factories import ( + PeriodicReportFactory, + PeriodicReportTypeFactory, + ProductionStreamWorkLogFactory, + PubFracFactory, + SubsidyAttachmentFactory, + SubsidyFactory, + SubsidyPaymentFactory, + WorkLogFactory, +) + + +class TestWorkLogFactory(TestCase): + def test_can_create_work_logs(self): + work_log = WorkLogFactory() + self.assertIsNotNone(work_log) + + +class TestProductionStreamWorkLogFactory(TestCase): + def test_can_create_production_stream_work_logs(self): + production_stream_work_log = ProductionStreamWorkLogFactory() + self.assertIsNotNone(production_stream_work_log) + + +class TestSubsidyFactory(TestCase): + def test_can_create_subsidies(self): + subsidy = SubsidyFactory() + self.assertIsNotNone(subsidy) + + +class TestSubsidyAttachmentFactory(TestCase): + def test_can_create_subsidy_attachments(self): + subsidy_attachment = SubsidyAttachmentFactory() + self.assertIsNotNone(subsidy_attachment) + + +class TestSubsidyPaymentFactory(TestCase): + def test_can_create_subsidy_payments(self): + subsidy_payment = SubsidyPaymentFactory() + self.assertIsNotNone(subsidy_payment) + + +class TestPeriodicReportTypeFactory(TestCase): + def test_can_create_period_report_types(self): + period_report_type = PeriodicReportTypeFactory() + self.assertIsNotNone(period_report_type) + + +class TestPeriodicReportFactory(TestCase): + def test_can_create_period_reports(self): + period_report = PeriodicReportFactory() + self.assertIsNotNone(period_report) + + +class TestPubFracFactory(TestCase): + def test_can_create_pubfracs(self): + pubfrac = PubFracFactory() + self.assertIsNotNone(pubfrac)