From 17dc9c51b5c1896316b765baf62bb511a5306bac Mon Sep 17 00:00:00 2001
From: George Katsikas <giorgakis.katsikas@gmail.com>
Date: Mon, 20 Nov 2023 13:02:41 +0100
Subject: [PATCH] add factories for all proceedings models

---
 scipost_django/proceedings/factories.py       | 47 ++++++++++++++-----
 .../proceedings/tests/test_factories.py       | 11 +++++
 2 files changed, 46 insertions(+), 12 deletions(-)
 create mode 100644 scipost_django/proceedings/tests/test_factories.py

diff --git a/scipost_django/proceedings/factories.py b/scipost_django/proceedings/factories.py
index 361f7bfb3..1c8ffc8b1 100644
--- a/scipost_django/proceedings/factories.py
+++ b/scipost_django/proceedings/factories.py
@@ -5,40 +5,63 @@ __license__ = "AGPL v3"
 import random
 
 import factory
-from journals.factories import IssueFactory
+from colleges.factories import FellowshipFactory
+from common.faker import fake
+
+from journals.factories import JournalIssueFactory
 from proceedings.models import Proceedings
-import datetime
 
 
 class ProceedingsFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = Proceedings
 
-    issue = factory.SubFactory(IssueFactory)
+    issue = factory.SubFactory(JournalIssueFactory)
+    minimum_referees = 2
     event_name = factory.Faker("company")
     event_suffix = factory.Faker("company_suffix")
     event_description = factory.Faker("paragraph")
     event_start_date = factory.Faker("date_this_decade")
     event_end_date = factory.LazyAttribute(
-        lambda self: self.event_start_date
-        + datetime.timedelta(
-            seconds=random.randint(0, 60 * 60 * 24 * 365),
+        lambda self: fake.aware.date_between(
+            start_date=self.event_start_date, end_date="+1y"
         )
     )
 
+    logo = factory.django.ImageField()
+    picture = factory.django.ImageField()
+    picture_credit = factory.Faker("sentence")
+    cover_image = factory.django.ImageField()
+
     submissions_open = factory.Faker("date_this_decade")
     submissions_close = factory.LazyAttribute(
-        lambda self: self.submissions_open
-        + datetime.timedelta(
-            seconds=random.randint(0, 60 * 60 * 24 * 365),
+        lambda self: fake.aware.date_between(
+            start_date=self.submissions_open, end_date="+1y"
         )
     )
     submissions_deadline = factory.LazyAttribute(
-        lambda self: self.submissions_close
-        + datetime.timedelta(
-            seconds=random.randint(0, 60 * 60 * 24 * 365),
+        lambda self: fake.aware.date_between(
+            start_date=self.submissions_close, end_date="+14d"
         )
     )
 
     preface_title = factory.Faker("sentence")
     preface_text = factory.Faker("paragraph")
+
+    template_latex_tgz = factory.django.FileField()
+    # lead_fellow = factory.SubFactory("colleges.factories.SeniorFellowshipFactory")
+
+    @factory.post_generation
+    def fellowships(self, create, extracted, **kwargs):
+        if not create:
+            return
+        if extracted:
+            for fellowship in extracted:
+                self.fellowships.add(fellowship)
+        else:
+            self.fellowships.add(
+                *FellowshipFactory.create_batch(
+                    random.randint(1, 5),
+                    college=self.issue.in_journal.college,
+                )
+            )
diff --git a/scipost_django/proceedings/tests/test_factories.py b/scipost_django/proceedings/tests/test_factories.py
new file mode 100644
index 000000000..4fee00063
--- /dev/null
+++ b/scipost_django/proceedings/tests/test_factories.py
@@ -0,0 +1,11 @@
+__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+from django.test import TestCase
+from proceedings.factories import ProceedingsFactory
+
+
+class TestProceedingsFactory(TestCase):
+    def test_can_create_proceedingss(self):
+        proceedings = ProceedingsFactory()
+        self.assertIsNotNone(proceedings)
-- 
GitLab