Feat: introduce faker for testing assessment aggregate

This commit is contained in:
Bertrand Benjamin 2022-12-20 07:58:50 +01:00
parent e496d86828
commit a3c44321bf
3 changed files with 123 additions and 34 deletions

44
poetry.lock generated
View File

@ -69,6 +69,21 @@ files = [
[package.extras] [package.extras]
test = ["pytest (>=6)"] test = ["pytest (>=6)"]
[[package]]
name = "faker"
version = "15.3.4"
description = "Faker is a Python package that generates fake data for you."
category = "dev"
optional = false
python-versions = ">=3.7"
files = [
{file = "Faker-15.3.4-py3-none-any.whl", hash = "sha256:c2a2ff9dd8dfd991109b517ab98d5cb465e857acb45f6b643a0e284a9eb2cc76"},
{file = "Faker-15.3.4.tar.gz", hash = "sha256:2d5443724f640ce07658ca8ca8bbd40d26b58914e63eec6549727869aa67e2cc"},
]
[package.dependencies]
python-dateutil = ">=2.4"
[[package]] [[package]]
name = "filelock" name = "filelock"
version = "3.8.2" version = "3.8.2"
@ -215,6 +230,21 @@ tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""}
[package.extras] [package.extras]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"]
[[package]]
name = "python-dateutil"
version = "2.8.2"
description = "Extensions to the standard Python datetime module"
category = "dev"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
files = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
[package.dependencies]
six = ">=1.5"
[[package]] [[package]]
name = "pyyaml" name = "pyyaml"
version = "6.0" version = "6.0"
@ -282,6 +312,18 @@ docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-g
testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
[[package]]
name = "six"
version = "1.16.0"
description = "Python 2 and 3 compatibility utilities"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
[[package]] [[package]]
name = "toml" name = "toml"
version = "0.10.2" version = "0.10.2"
@ -330,4 +372,4 @@ testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = "^3.10" python-versions = "^3.10"
content-hash = "46fc924a6d163979f35786e51305f62c91698182566f412c7852b9af31d0a9fc" content-hash = "33109fe55cbdbeafcb5d27085623cd708a9d0ca362dc2838615970db2f6fc1ab"

View File

@ -12,6 +12,7 @@ python = "^3.10"
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
pre-commit = "^2.20.0" pre-commit = "^2.20.0"
pytest = "^7.2.0" pytest = "^7.2.0"
faker = "^15.3.4"
[build-system] [build-system]
requires = ["poetry-core"] requires = ["poetry-core"]

View File

@ -1,56 +1,102 @@
from random import choice, randint
from faker import Faker
from backend.model.assessment import Assessment, Domain, Exercise, Question, Skill from backend.model.assessment import Assessment, Domain, Exercise, Question, Skill
from backend.model.student import Tribe from backend.model.student import Tribe
faker = Faker()
def build_tribe():
return Tribe("plop", "2nd")
def build_tribe_assessment(): def build_tribes(quantity=1):
tribe = build_tribe() return [Tribe(name=faker.words(5), level=faker.words(5)) for _ in range(quantity)]
assessment = Assessment("DS1", tribe, 1)
return tribe, assessment
def build_tribe_assessment_exercise(): def build_tribe_assessment(tribe_qty=1, assessment_per_tribe=1):
tribe, assessment = build_tribe_assessment() tribes = build_tribes(tribe_qty)
exercise = Exercise("ex1", assessment, "today")
return tribe, assessment, exercise assessments = []
for t in tribes:
assessments += [
Assessment("faker.words(5)", t, randint(1, 3))
for _ in range(assessment_per_tribe)
]
return tribes, assessments
def build_skills(): def build_tribe_assessment_exercise(
return [Skill("search", "Searching and finding")] tribe_qty=1, assessment_per_tribe=1, exercise_per_assessment=1
):
tribes, assessments = build_tribe_assessment(tribe_qty, assessment_per_tribe)
exercises = []
for assessment in assessments:
exercises += [
Exercise("faker.words(4)", assessment, "today")
for _ in range(exercise_per_assessment)
]
return tribes, assessments, exercises
def build_domains(): def build_skills(quantity=1):
return [Domain("function", "Functions are great")] return [Skill(faker.words(6), faker.text()) for _ in range(quantity)]
def build_tribe_assessment_exercise_question(): def build_domains(quantity=1):
tribe, assessment, exercise = build_tribe_assessment_exercise() return [Domain(faker.words(6), faker.text()) for _ in range(quantity)]
def build_tribe_assessment_exercise_question(
tribe_qty=1,
assessment_per_tribe=1,
exercise_per_assessment=1,
question_per_exercise=1,
):
tribes, assessments, exercises = build_tribe_assessment_exercise(
tribe_qty, assessment_per_tribe, exercise_per_assessment
)
skills = build_skills() skills = build_skills()
domains = build_domains() domains = build_domains()
question = Question(
"a", questions = []
exercise, for exercise in exercises:
description="desc", questions += [
skill=skills[0], Question(
domain=domains[0], faker.words(2),
is_leveled=True, exercise,
scale=1, description="desc",
) skill=choice(skills),
return tribe, assessment, exercise, question domain=choice(domains),
is_leveled=choice([True, False]),
scale=randint(1, 20),
)
for _ in range(question_per_exercise)
]
return tribes, assessments, exercises, questions
def test_assessement_register_exercise(): def test_assessement_register_exercise():
tribe, assessment, exercise = build_tribe_assessment_exercise() exercise_qty = randint(1, 10)
tribes, assessments, exercises = build_tribe_assessment_exercise(
exercise_per_assessment=exercise_qty
)
assert len(assessment.exercises) == 1 assert len(assessments[0].exercises) == exercise_qty
assert assessment.exercises[0] == exercise assert assessments[0].exercises == exercises
def test_exercise_register_question(): def test_exercise_register_question():
tribe, assessment, exercise, question = build_tribe_assessment_exercise_question() question_qty = randint(1, 10)
(
tribes,
assessments,
exercises,
questions,
) = build_tribe_assessment_exercise_question(question_per_exercise=question_qty)
assert len(exercise.questions) == 1 assert len(exercises[0].questions) == question_qty
assert exercise.questions[0] == question assert exercises[0].questions == questions