1414
1515from apps .common .utils import decode_tasks , remove_object_keys
1616from apps .contributor .factories import ContributorUserFactory
17+ from apps .contributor .models import ContributorUserGroup
18+ from apps .mapping .firebase .pull import pull_results_from_firebase
19+ from apps .mapping .models import (
20+ MappingSession ,
21+ MappingSessionResult ,
22+ MappingSessionResultTemp ,
23+ MappingSessionUserGroup ,
24+ MappingSessionUserGroupTemp ,
25+ )
1726from apps .project .models import Organization , Project
1827from apps .tutorial .models import Tutorial
1928from apps .user .factories import UserFactory
@@ -27,7 +36,7 @@ def create_override():
2736 def pre_save_override (sender : typing .Any , instance : typing .Any , ** kwargs ): # type: ignore[reportMissingParameterType]
2837 if sender == Tutorial :
2938 instance .firebase_id = f"tutorial_{ instance .client_id } "
30- elif sender in {Project , Organization }:
39+ elif sender in {Project , Organization , ContributorUserGroup }:
3140 instance .firebase_id = instance .client_id
3241
3342 pre_save .connect (pre_save_override )
@@ -254,6 +263,34 @@ class Mutation:
254263 }
255264 """
256265
266+ CREATE_CONTRIBUTOR_USER_GROUP = """
267+ mutation CreateContributorUserGroup($data: ContributorUserGroupCreateInput!) {
268+ createContributorUserGroup(data: $data) {
269+ ... on OperationInfo {
270+ __typename
271+ messages {
272+ code
273+ field
274+ kind
275+ message
276+ }
277+ }
278+ ... on ContributorUserGroupTypeMutationResponseType {
279+ errors
280+ ok
281+ result {
282+ id
283+ name
284+ description
285+ clientId
286+ isArchived
287+ firebaseId
288+ }
289+ }
290+ }
291+ }
292+ """
293+
257294 @pytest .mark .vcr ("assets/tests/projects/validate/cassette" )
258295 def test_validate_project_e2e (self ):
259296 # TODO(susilnem): Add more test with filters
@@ -533,3 +570,55 @@ def _test_project(self, filename: str):
533570 assert sanitized_tasks_actual == sanitized_tasks_expected , (
534571 "Differences found between expected and actual tasks on project in firebase."
535572 )
573+
574+ # Create contributor user group
575+ old_contributor_user_group_data = test_data ["create_contributor_user_group" ]
576+ for input_data in old_contributor_user_group_data :
577+ usergroup_content = self .query_check (
578+ self .Mutation .CREATE_CONTRIBUTOR_USER_GROUP ,
579+ variables = {
580+ "data" : input_data ,
581+ },
582+ )
583+ usergroup_response = usergroup_content ["data" ]["createContributorUserGroup" ]
584+ assert usergroup_response is not None , "usergroup create response is None"
585+ assert usergroup_response ["ok" ]
586+
587+ # Pull results from firebase
588+ input_data = test_data ["create_results" ]
589+ ref_results = self .firebase_helper .ref (f"/v2/results/{ project_fb_id } " )
590+ ref_results .set (input_data )
591+
592+ fb_results_data = ref_results .get ()
593+ assert fb_results_data is not None
594+
595+ assert [
596+ MappingSession .objects .count (),
597+ MappingSessionResult .objects .count (),
598+ MappingSessionUserGroup .objects .count (),
599+ MappingSessionUserGroupTemp .objects .count (),
600+ MappingSessionResultTemp .objects .count (),
601+ ] == [0 , 0 , 0 , 0 , 0 ], "Mapping session data should be empty before pull from firebase"
602+
603+ project = Project .objects .get (id = project_id )
604+ assert project .progress == 0
605+
606+ with self .captureOnCommitCallbacks (execute = True ):
607+ pull_results_from_firebase ()
608+
609+ assert [
610+ MappingSession .objects .count (),
611+ MappingSessionResult .objects .count (),
612+ MappingSessionUserGroup .objects .count (),
613+ MappingSessionUserGroupTemp .objects .count (),
614+ MappingSessionResultTemp .objects .count (),
615+ ] == [
616+ test_data ["expected_pulled_results_data" ]["mapping_session_count" ],
617+ test_data ["expected_pulled_results_data" ]["mapping_session_results_count" ],
618+ test_data ["expected_pulled_results_data" ]["mapping_session_user_groups_count" ],
619+ 0 ,
620+ 0 ,
621+ ], "Difference found for pulled results data."
622+
623+ project .refresh_from_db ()
624+ assert project .progress == test_data ["expected_pulled_results_data" ]["progress" ]
0 commit comments