system-pri/backend/tests/factory.py

106 lines
3.0 KiB
Python

import datetime
from factory import Sequence, alchemy
from factory.faker import Faker
from factory.fuzzy import FuzzyDateTime, FuzzyInteger
from app.base.mode import ModeGroups
from app.dependencies import db
from app.examination_schedule.models import (
ExaminationSchedule,
TemporaryAvailability,
TermOfDefence,
)
from app.project_supervisor.models import ProjectSupervisor
from app.students.models import Group, Student, YearGroup
class YearGroupFactory(alchemy.SQLAlchemyModelFactory):
class Meta:
model = YearGroup
sqlalchemy_session = db.session
name = "2022/2023"
mode = ModeGroups.STATIONARY.value
class ProjectSupervisorFactory(alchemy.SQLAlchemyModelFactory):
class Meta:
model = ProjectSupervisor
sqlalchemy_session = db.session
first_name = Faker("first_name")
last_name = Faker("last_name")
email = Faker("email")
limit_group = 4
class GroupFactory(alchemy.SQLAlchemyModelFactory):
class Meta:
model = Group
sqlalchemy_session = db.session
name = Sequence(lambda n: f"Group-{n}")
points_for_first_term = FuzzyInteger(1, 100)
points_for_second_term = FuzzyInteger(1, 100)
grade_for_first_term = FuzzyInteger(2, 5)
grade_for_second_term = FuzzyInteger(2, 5)
class StudentFactory(alchemy.SQLAlchemyModelFactory):
class Meta:
model = Student
sqlalchemy_session = db.session
first_name = Faker("first_name")
last_name = Faker("last_name")
email = Faker("email")
index = Sequence(lambda n: 400_000 + n)
class ExaminationScheduleFactory(alchemy.SQLAlchemyModelFactory):
class Meta:
model = ExaminationSchedule
sqlalchemy_session = db.session
title = Sequence(lambda n: f"Examination schedule {n}")
duration_time = 30
start_date = FuzzyDateTime(
datetime.datetime(2020, 1, 1, tzinfo=datetime.timezone.utc),
datetime.datetime(2020, 1, 5, tzinfo=datetime.timezone.utc),
)
end_date = FuzzyDateTime(
datetime.datetime(2020, 1, 10, tzinfo=datetime.timezone.utc),
datetime.datetime(2020, 1, 20, tzinfo=datetime.timezone.utc),
)
class TermOfDefenceFactory(alchemy.SQLAlchemyModelFactory):
class Meta:
model = TermOfDefence
sqlalchemy_session = db.session
start_date = Sequence(
lambda n: datetime.datetime(2020, 1, 1, tzinfo=datetime.timezone.utc)
+ datetime.timedelta(n * 30)
)
end_date = Sequence(
lambda n: datetime.datetime(2020, 1, 1, tzinfo=datetime.timezone.utc)
+ datetime.timedelta(n * 30 + 30)
)
class TemporaryAvailabilityFactory(alchemy.SQLAlchemyModelFactory):
class Meta:
model = TemporaryAvailability
sqlalchemy_session = db.session
start_date = Sequence(
lambda n: datetime.datetime(2020, 1, 1, tzinfo=datetime.timezone.utc)
+ datetime.timedelta(n * 30)
)
end_date = Sequence(
lambda n: datetime.datetime(2020, 1, 1, tzinfo=datetime.timezone.utc)
+ datetime.timedelta(n * 30 + 30)
)