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