Пример #1
0
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())
Пример #2
0
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())
Пример #3
0
    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
Пример #4
0
    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
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
 def transform_doc(doc):
     doc['username.exact'] = doc.get('username', '')
     return transform_user_for_elasticsearch(doc)
Пример #8
0
 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)
Пример #9
0
 def transform_doc(doc):
     doc['username.exact'] = doc.get('username', '')
     return transform_user_for_elasticsearch(doc)
Пример #10
0
 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)
Пример #11
0
    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)
Пример #12
0
    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)