Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
3d5242a
[#1438] Refactoring demo_approval_flow seeder to fix mobile users
ifirmawan May 2, 2024
afe6c26
[#1438] Refactoring entities_seeder to populate correct entities base…
ifirmawan May 2, 2024
100b0de
[#1438] Refactoring fake_data_seeder to populate data based on form t…
ifirmawan May 2, 2024
1afe3c3
[#1438] Refactoring fake data claim seeder to handle multiple submiss…
ifirmawan May 2, 2024
13cbe6f
[#1438] Fix all test cases related to fake datapoints seeder
ifirmawan May 2, 2024
72f085b
[#1438] Replace static passcode with decoded from db in api sync test
ifirmawan May 2, 2024
513b9ba
Merge branch 'develop' into feature/1438-fix-data-seeder
ifirmawan May 2, 2024
f0b15f2
[#1438] Assign all administration approval for test only
ifirmawan May 2, 2024
c081e96
[#1438] Reduce default amount fake datapoints seeder
ifirmawan May 2, 2024
e89d72e
[#1438] Replace administration seeder in tests_bulk_data_download
ifirmawan May 2, 2024
72ba853
Merge branch 'develop' into feature/1438-fix-data-seeder
ifirmawan May 2, 2024
3aa6df8
Merge branch 'develop' into feature/1438-fix-data-seeder
ifirmawan May 2, 2024
0b281fb
Merge branch 'develop' into feature/1438-fix-data-seeder
ifirmawan May 3, 2024
532f277
Merge branch 'develop' into feature/1438-fix-data-seeder
ifirmawan May 3, 2024
fcea78b
[#1438] Finalize refactoring, fix invalid mobile_administrations & sa…
ifirmawan May 3, 2024
bea2889
Merge branch 'develop' into feature/1438-fix-data-seeder
dedenbangkit May 4, 2024
cf24918
[#1438] Add answers for meta_uuid and entity question
ifirmawan May 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion backend/api/v1/v1_categories/tests/tests_categories.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ def setUp(self):
token = user_response.json().get("token")

call_command("form_seeder", "--test")
call_command("demo_approval_flow", "--test", True)
call_command("fake_data_seeder", "-r", 1, "-t", True)
self.header = {"HTTP_AUTHORIZATION": f"Bearer {token}"}

Expand Down Expand Up @@ -123,7 +124,8 @@ def test_csv_endpoint(self):
answers = Answers.objects.filter(data_id=data_id).all()
row_value = df[df["id"] == data_id]
for a in answers:
csv_answer = row_value[f"{a.question.id}|{a.question.name}"][0]
csv_answer = row_value[f"{a.question.id}|{a.question.name}"]\
.item()
if csv_answer != csv_answer:
csv_answer = None
db_answer = None
Expand Down
134 changes: 40 additions & 94 deletions backend/api/v1/v1_data/management/commands/fake_data_claim_seeder.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,16 @@
FormCertificationAssignment,
UserForms,
)
from api.v1.v1_profile.models import Administration
from api.v1.v1_profile.constants import UserRoleTypes
from api.v1.v1_users.models import SystemUser
from api.v1.v1_data.functions import refresh_materialized_data
from api.v1.v1_data.management.commands.fake_data_seeder import (
add_fake_answers,
add_fake_answers, get_mobile_user
)
from api.v1.v1_mobile.models import MobileAssignment

fake = Faker()


def get_mobile_user(user: SystemUser, form: Forms):
mobile_assignment = user.mobile_assignments.filter(
forms__id__in=[form.pk]
).first()
if not mobile_assignment:
mobile_assignment = MobileAssignment.objects.create_assignment(
user=user, name=fake.user_name()
)
mobile_assignment.forms.add(form)
return mobile_assignment


def create_certification(assignee, certification, form):
subcounty_path = f"{assignee.path}{assignee.pk}"
certify_assignment = FormCertificationAssignment(assignee=assignee)
Expand All @@ -48,22 +34,15 @@ def create_certification(assignee, certification, form):
)
if entry_user:
UserForms.objects.get_or_create(form=form, user=entry_user)

administration_children = Administration.objects.filter(
parent=entry_user.user_access.administration
).order_by("?")[:2]

mobile_assignment = get_mobile_user(user=entry_user, form=form)
mobile_assignment.administrations.set(administration_children)
mobile_assignment.certifications.set(certification)
get_mobile_user(user=entry_user, form=form)

return certify_assignment


class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument(
"-r", "--repeat", nargs="?", const=10, default=10, type=int
"-r", "--repeat", nargs="?", const=2, default=2, type=int
)
parser.add_argument(
"-t", "--test", nargs="?", const=False, default=False, type=bool
Expand All @@ -79,17 +58,9 @@ def handle(self, *args, **options):
for form in certification_forms:
if not test:
print(f"Seeding - {form.name}")
existing_certifications = FormData.objects.filter(
form=form, submission_type=SubmissionTypes.certification
)
existing_certification_uuids = existing_certifications.values(
"uuid"
)

existing_assignment = FormCertificationAssignment.objects.order_by(
"?"
).first()
if not existing_assignment:
certification_assignment = FormCertificationAssignment.objects \
.order_by("?").first()
if not certification_assignment:
user_assignee = (
SystemUser.objects.filter(
user_access__administration__level__name="Sub-County",
Expand All @@ -98,72 +69,47 @@ def handle(self, *args, **options):
.order_by("?")
.first()
)
certification = FormData.objects.exclude(
administration=user_assignee.user_access.administration
county_path = user_assignee.user_access.administration.path
assignee_path = "{0}{1}".format(
county_path,
user_assignee.user_access.administration.id
)
certification = form.form_form_data.filter(
administration__path__startswith=county_path
).exclude(
administration__path__startswith=assignee_path
).values_list("administration", flat=True)
certification = list(certification)
existing_assignment = create_certification(
assignee=user_assignee.user_access.administration,
assignee = user_assignee.user_access.administration
certification = list(certification)[:4]
certification_assignment = create_certification(
assignee=assignee,
certification=certification,
form=form,
)
assignee_path = "{0}{1}".format(
existing_assignment.assignee.path,
existing_assignment.assignee.id,
)
assignee_children = Administration.objects.filter(
path__startswith=assignee_path
adm_ids = certification_assignment.administrations.values("id")
datapoints = form.form_form_data.filter(
administration__in=adm_ids
).all()

queryset = FormData.objects.filter(
form=form, submission_type=SubmissionTypes.registration
).exclude(uuid__in=existing_certification_uuids)

target_adms = existing_assignment.administrations.values("id")
queryset = queryset.filter(administration_id__in=target_adms)
datapoints = queryset.order_by("-id")[:repeat]
ap = "{0}{1}".format(
certification_assignment.assignee.path,
certification_assignment.assignee.id,
)
for dp in datapoints:
created_by = SystemUser.objects.filter(
user_access__administration__path__startswith=assignee_path
user_access__administration__path__startswith=ap,
user_access__role=UserRoleTypes.user
).first()

mobile_assignment = get_mobile_user(
user=created_by, form=dp.form
)
mobile_assignment.administrations.set(assignee_children)
mobile_assignment.certifications.add(
*list(
existing_assignment.administrations.values_list(
"id", flat=True
)
for i in range(repeat):
data = FormData.objects.create(
uuid=dp.uuid,
name=dp.name,
geo=dp.geo,
form=form,
administration=dp.administration,
created_by=created_by,
submission_type=SubmissionTypes.certification,
)
)

data = FormData.objects.create(
name=f"{dp.name} - certification",
geo=dp.geo,
form=form,
administration=dp.administration,
created_by=created_by,
submission_type=SubmissionTypes.certification,
)
data.save_to_file
data.save()
add_fake_answers(data, form.type)

# multiple certification (add second certificatio data)
for dp in existing_certifications.all():
data = FormData.objects.create(
name=f"{dp.name} - SECOND",
geo=dp.geo,
form=dp.form,
administration=dp.administration,
created_by=dp.created_by,
submission_type=SubmissionTypes.certification,
uuid=dp.uuid,
)
data.save_to_file
data.save()
add_fake_answers(data, form.type)

data.save()
add_fake_answers(data, form.type)
data.save_to_file
refresh_materialized_data()
Loading