def update_user_in_es(sender, couch_user, **kwargs): """ Automatically sync the user to elastic directly on save or delete """ from corehq.pillows.user import transform_user_for_elasticsearch send_to_elasticsearch("users", transform_user_for_elasticsearch(couch_user.to_json()), delete=couch_user.to_be_deleted())
def update_user_in_es(sender, couch_user, **kwargs): """ Automatically sync the user to elastic directly on save or delete """ from corehq.pillows.user import transform_user_for_elasticsearch send_to_elasticsearch("users", transform_user_for_elasticsearch(couch_user.to_json()), delete=couch_user.to_be_deleted())
def _send_user_to_es(self, _id=None, username=None, user_data=None): user = CommCareUser( domain=self.domain, username=username or self.username, _id=_id or uuid.uuid4().hex, first_name=self.first_name, last_name=self.last_name, user_data=user_data or {}, is_active=True, ) with patch('corehq.pillows.user.Group.by_user', return_value=[]): send_to_elasticsearch('users', transform_user_for_elasticsearch(user.to_json())) self.es.indices.refresh(USER_INDEX) return user
def _send_user_to_es(self, _id=None, username=None, user_data=None): user = CommCareUser( domain=self.domain, username=username or self.username, _id=_id or uuid.uuid4().hex, first_name=self.first_name, last_name=self.last_name, user_data=user_data or {}, is_active=True, ) with patch('corehq.pillows.user.get_group_id_name_map_by_user', return_value=[]): send_to_elasticsearch('users', transform_user_for_elasticsearch(user.to_json())) self.es.indices.refresh(USER_INDEX) return user
def test_users_assigned(self): self.es = get_es_new() ensure_index_deleted(USER_INDEX) initialize_index_and_mapping(self.es, USER_INDEX_INFO) user = CommCareUser.create(self.domain, 'pentagon', '*****', None, None, metadata={ PROFILE_SLUG: self.profile5.id, }) self.addCleanup(user.delete, self.domain, deleted_by=None) send_to_elasticsearch('users', transform_user_for_elasticsearch(user.to_json())) self.es.indices.refresh(USER_INDEX) self.assertFalse(self.profile3.has_users_assigned) self.assertEqual([], self.profile3.user_ids_assigned()) self.assertTrue(self.profile5.has_users_assigned) self.assertEqual([user._id], self.profile5.user_ids_assigned()) ensure_index_deleted(USER_INDEX)
def setUpClass(cls): super().setUpClass() # Set up domains cls.domains = [ create_domain('state'), create_domain('county'), create_domain('staging'), ] # Set up users cls.web_user = WebUser.create('state', 'webu', 'badpassword', None, None, email='*****@*****.**', is_admin=True) cls.web_user.add_domain_membership('county') cls.web_user.add_domain_membership('staging') cls.web_user.save() cls.mobile_users = [ CommCareUser.create('state', "state_u", "123", None, None), CommCareUser.create("county", "county_u", "123", None, None), CommCareUser.create("staging", "staging_u", "123", None, None), ] # Set up permissions create_enterprise_permissions(cls.web_user.username, 'state', ['county'], ['staging']) cls.es = get_es_new() ensure_index_deleted(USER_INDEX) initialize_index_and_mapping(cls.es, USER_INDEX_INFO) for user_obj in cls.mobile_users: send_to_elasticsearch( 'users', transform_user_for_elasticsearch(user_obj.to_json())) cls.es.indices.refresh(USER_INDEX)
def transform_doc(doc): doc['username.exact'] = doc.get('username', '') return transform_user_for_elasticsearch(doc)
def _send_user_to_es(self, is_active=True): self.user.is_active = is_active send_to_elasticsearch('users', transform_user_for_elasticsearch(self.user.to_json())) self.es.indices.refresh(USER_INDEX)
def transform_doc(doc): doc['username.exact'] = doc.get('username', '') return transform_user_for_elasticsearch(doc)
def _send_users_to_es(self): for user_obj in self.user_list: send_to_elasticsearch( 'users', transform_user_for_elasticsearch(user_obj.to_json())) self.es.indices.refresh(USER_INDEX)
def setUpClass(cls): super().setUpClass() cls.es = get_es_new() initialize_index_and_mapping(cls.es, USER_INDEX_INFO) initialize_index_and_mapping(cls.es, XFORM_INDEX_INFO) cls.date_start, cls.date_end = get_start_and_end_dates_of_month( 2021, 11) cls.domain = Domain.get_or_create_with_name('test-partner-analytics', is_active=True) # Data for Mobile Workers Tests DomainUserHistory.objects.create(domain=cls.domain.name, record_date=cls.date_end, num_users=3) DomainUserHistory.objects.create(domain=cls.domain.name, record_date=cls.date_start - datetime.timedelta(days=1), num_users=6) DomainUserHistory.objects.create(domain=cls.domain.name, record_date=cls.date_end + datetime.timedelta(days=1), num_users=9) # Data for Web Users tests cls.users = [ WebUser.create(cls.domain.name, '*****@*****.**', 'testpwd', None, None, date=cls.date_start + datetime.timedelta(days=5)), WebUser.create(cls.domain.name, '*****@*****.**', 'testpwd', None, None, date=cls.date_start - datetime.timedelta(days=1)), WebUser.create(cls.domain.name, '*****@*****.**', 'testpwd', None, None, date=cls.date_end + datetime.timedelta(days=1)), WebUser.create(cls.domain.name, '*****@*****.**', 'testpwd', None, None, date=cls.date_start + datetime.timedelta(days=6)), ] for user in cls.users: elastic_user = transform_user_for_elasticsearch(user.to_json()) send_to_elasticsearch('users', elastic_user) invitations = [ Invitation.objects.create( domain=cls.domain.name, email='*****@*****.**', invited_by='*****@*****.**', invited_on=cls.date_start + datetime.timedelta(days=5), ), Invitation.objects.create( domain=cls.domain.name, email='*****@*****.**', invited_by='*****@*****.**', invited_on=cls.date_start - datetime.timedelta(days=1), ), Invitation.objects.create( domain=cls.domain.name, email='*****@*****.**', invited_by='*****@*****.**', invited_on=cls.date_end + datetime.timedelta(days=1), ), ] for invitation in invitations: invitation.is_accepted = True invitation.save() # Data for forms tests forms = [ create_form_for_test(cls.domain.name, received_on=cls.date_start - datetime.timedelta(days=1)), create_form_for_test(cls.domain.name, received_on=cls.date_end + datetime.timedelta(days=1)), create_form_for_test(cls.domain.name, received_on=cls.date_start + datetime.timedelta(days=3)), create_form_for_test(cls.domain.name, received_on=cls.date_start + datetime.timedelta(days=12)), ] for form in forms: elastic_form = transform_xform_for_elasticsearch(form.to_json()) send_to_elasticsearch('forms', elastic_form) cls.es.indices.refresh(USER_INDEX_INFO.alias) cls.es.indices.refresh(XFORM_INDEX_INFO.alias)
def setUpClass(cls): super().setUpClass() cls.es = get_es_new() initialize_index_and_mapping(cls.es, USER_INDEX_INFO) initialize_index_and_mapping(cls.es, XFORM_INDEX_INFO) today = datetime.datetime.utcnow() one_year_ago = add_months_to_date(today.date(), -12) enterprise_plan = get_enterprise_software_plan() cls.billing_account = get_enterprise_account() cls.domains = [ create_domain('test-emw-settings-001'), create_domain('test-emw-settings-002'), ] add_domains_to_enterprise_account(cls.billing_account, cls.domains, enterprise_plan, one_year_ago) cls.emw_settings = EnterpriseMobileWorkerSettings.objects.create( account=cls.billing_account, enable_auto_deactivation=True, ) cls.active_user1 = CommCareUser.create( domain=cls.domains[0].name, username='******', password='******', created_by=None, created_via=None, is_active=True, ) cls.active_user2 = CommCareUser.create( domain=cls.domains[0].name, username='******', password='******', created_by=None, created_via=None, is_active=True, ) cls.active_user3 = CommCareUser.create( domain=cls.domains[1].name, username='******', password='******', created_by=None, created_via=None, is_active=True, ) cls.active_user4 = CommCareUser.create( domain=cls.domains[1].name, username='******', password='******', created_by=None, created_via=None, is_active=True, ) cls.active_user5 = CommCareUser.create( domain=cls.domains[1].name, username='******', password='******', created_by=None, created_via=None, is_active=True, ) cls.active_user5.created_on = today - datetime.timedelta( days=cls.emw_settings.inactivity_period) cls.active_user5.save() cls.active_user6 = CommCareUser.create( domain=cls.domains[1].name, username='******', password='******', created_by=None, created_via=None, is_active=True, ) cls.users = [ cls.active_user1, cls.active_user2, cls.active_user3, cls.active_user4, cls.active_user5, cls.active_user6, CommCareUser.create(domain=cls.domains[0].name, username='******', password='******', created_by=None, created_via=None, is_active=False), CommCareUser.create(domain=cls.domains[1].name, username='******', password='******', created_by=None, created_via=None, is_active=False), ] form_submissions = [ (TestFormMetadata( domain=cls.domains[0].name, received_on=today - datetime.timedelta( days=cls.emw_settings.inactivity_period - 1), user_id=cls.active_user1.user_id, username=cls.active_user1.username, ), cls.active_user1), (TestFormMetadata( domain=cls.domains[0].name, received_on=today - datetime.timedelta(days=cls.emw_settings.inactivity_period), user_id=cls.active_user2.user_id, username=cls.active_user2.username, ), cls.active_user2), (TestFormMetadata( domain=cls.domains[1].name, received_on=today - datetime.timedelta( days=cls.emw_settings.inactivity_period - 10), user_id=cls.active_user3.user_id, username=cls.active_user3.username, ), cls.active_user3), (TestFormMetadata( domain=cls.domains[1].name, received_on=today - datetime.timedelta( days=cls.emw_settings.inactivity_period + 1), user_id=cls.active_user6.user_id, username=cls.active_user6.username, ), cls.active_user6), ] for form_metadata, user in form_submissions: # ensure users are as old as the received_on dates of their submissions user.created_on = form_metadata.received_on user.save() form_pair = make_es_ready_form(form_metadata) send_to_elasticsearch('forms', form_pair.json_form) mark_latest_submission(form_metadata.domain, user, form_metadata.app_id, "build-id", "2", {'deviceID': 'device-id'}, form_metadata.received_on) for user in cls.users: fresh_user = CommCareUser.get_by_user_id(user.user_id) elastic_user = transform_user_for_elasticsearch( fresh_user.to_json()) send_to_elasticsearch('users', elastic_user) cls.es.indices.refresh(USER_INDEX_INFO.alias) cls.es.indices.refresh(XFORM_INDEX_INFO.alias)