def test_parent_and_child_cases(self): fake_case_es = FakeXFormES(ESCase) v0_3.MOCK_CASE_ES = fake_case_es # Create cases parent_case_id = uuid.uuid4().hex parent_type = 'parent_case_type' parent_case = submit_case_blocks( CaseBlock( case_id=parent_case_id, create=True, case_type=parent_type, ).as_text(), self.domain.name)[1][0] child_case_id = uuid.uuid4().hex child_case = submit_case_blocks( CaseBlock(case_id=child_case_id, create=True, index={ 'parent': (parent_type, parent_case_id) }).as_text(), self.domain.name)[1][0] fake_case_es.add_doc( parent_case_id, transform_case_for_elasticsearch(parent_case.to_json())) fake_case_es.add_doc( child_case_id, transform_case_for_elasticsearch(child_case.to_json())) # Fetch the child case through the API response = self._assert_auth_get_resource( self.single_endpoint(child_case_id) + "?parent_cases__full=true") self.assertEqual( response.status_code, 200, "Status code was not 200. Response content was {}".format( response.content)) parent_cases = list( json.loads(response.content)['parent_cases'].values()) # Confirm that the case appears in the resource self.assertEqual(len(parent_cases), 1) self.assertEqual(parent_cases[0]['id'], parent_case_id) # Fetch the parent case through the API response = self._assert_auth_get_resource( self.single_endpoint(parent_case_id) + "?child_cases__full=true") self.assertEqual( response.status_code, 200, "Status code was not 200. Response content was {}".format( response.content)) child_cases = list( json.loads(response.content)['child_cases'].values()) # Confirm that the case appears in the resource self.assertEqual(len(child_cases), 1) self.assertEqual(child_cases[0]['id'], child_case_id)
def test_parent_and_child_cases(self): # Create cases parent_case_id = uuid.uuid4().hex parent_type = 'parent_case_type' parent_case = submit_case_blocks( CaseBlock( case_id=parent_case_id, create=True, case_type=parent_type, ).as_text(), self.domain.name)[1][0] child_case_id = uuid.uuid4().hex child_case = submit_case_blocks( CaseBlock(case_id=child_case_id, create=True, index={ 'parent': (parent_type, parent_case_id) }).as_text(), self.domain.name)[1][0] self.addCleanup(child_case.delete) self.addCleanup(parent_case.delete) send_to_elasticsearch( 'cases', transform_case_for_elasticsearch(parent_case.to_json())) send_to_elasticsearch( 'cases', transform_case_for_elasticsearch(child_case.to_json())) self.es.indices.refresh(CASE_INDEX_INFO.index) # Fetch the child case through the API response = self._assert_auth_get_resource( self.single_endpoint(child_case_id) + "?parent_cases__full=true") self.assertEqual( response.status_code, 200, f"Status code was not 200. Response content was {response.content!r}" ) parent_cases = list( json.loads(response.content)['parent_cases'].values()) # Confirm that the case appears in the resource self.assertEqual(len(parent_cases), 1) self.assertEqual(parent_cases[0]['id'], parent_case_id) # Fetch the parent case through the API response = self._assert_auth_get_resource( self.single_endpoint(parent_case_id) + "?child_cases__full=true") self.assertEqual( response.status_code, 200, f"Status code was not 200. Response content was {response.content!r}" ) child_cases = list( json.loads(response.content)['child_cases'].values()) # Confirm that the case appears in the resource self.assertEqual(len(child_cases), 1) self.assertEqual(child_cases[0]['id'], child_case_id)
def test_parent_and_child_cases(self): fake_case_es = FakeXFormES(ESCase) v0_4.MOCK_CASE_ES = fake_case_es # Create cases parent_case_id = uuid.uuid4().hex parent_type = 'parent_case_type' parent_case = submit_case_blocks( CaseBlock( case_id=parent_case_id, create=True, case_type=parent_type, ).as_string().decode('utf-8'), self.domain.name )[1][0] child_case_id = uuid.uuid4().hex child_case = submit_case_blocks( CaseBlock( case_id=child_case_id, create=True, index={'parent': (parent_type, parent_case_id)} ).as_string().decode('utf-8'), self.domain.name )[1][0] fake_case_es.add_doc(parent_case_id, transform_case_for_elasticsearch(parent_case.to_json())) fake_case_es.add_doc(child_case_id, transform_case_for_elasticsearch(child_case.to_json())) # Fetch the child case through the API response = self._assert_auth_get_resource(self.single_endpoint(child_case_id) + "?parent_cases__full=true") self.assertEqual( response.status_code, 200, "Status code was not 200. Response content was {}".format(response.content) ) parent_cases = list(json.loads(response.content)['parent_cases'].values()) # Confirm that the case appears in the resource self.assertEqual(len(parent_cases), 1) self.assertEqual(parent_cases[0]['id'], parent_case_id) # Fetch the parent case through the API response = self._assert_auth_get_resource(self.single_endpoint(parent_case_id) + "?child_cases__full=true") self.assertEqual( response.status_code, 200, "Status code was not 200. Response content was {}".format(response.content) ) child_cases = list(json.loads(response.content)['child_cases'].values()) # Confirm that the case appears in the resource self.assertEqual(len(child_cases), 1) self.assertEqual(child_cases[0]['id'], child_case_id)
def testOwnerIDSetOnTransform(self): """ Test that the owner_id gets set to the case when the pillow calls change transform """ case_owner_id = CASE_WITH_OWNER_ID case_no_owner_id = CASE_NO_OWNER_ID changed_with_owner_id = transform_case_for_elasticsearch(case_owner_id) changed_with_no_owner_id = transform_case_for_elasticsearch(case_no_owner_id) self.assertEqual(changed_with_owner_id.get("owner_id"), "testuser") self.assertEqual(changed_with_no_owner_id.get("owner_id"), "testuser")
def testOwnerIDSetOnTransform(self): """ Test that the owner_id gets set to the case when the pillow calls change transform """ case_owner_id = CASE_WITH_OWNER_ID case_no_owner_id = CASE_NO_OWNER_ID changed_with_owner_id = transform_case_for_elasticsearch(case_owner_id) changed_with_no_owner_id = transform_case_for_elasticsearch(case_no_owner_id) self.assertEqual(changed_with_owner_id.get("owner_id"), "testuser") self.assertEqual(changed_with_no_owner_id.get("owner_id"), "testuser")
def _send_case_to_es(self, domain=None, owner_id=None, user_id=None, case_type=None, opened_on=None, closed_on=None): case = CommCareCaseSQL( case_id=uuid.uuid4().hex, domain=domain or self.domain, owner_id=owner_id or self.owner_id, modified_by=user_id or self.user_id, type=case_type or self.case_type, opened_on=opened_on or datetime.now(), opened_by=user_id or self.user_id, closed_on=closed_on, closed_by=user_id or self.user_id, server_modified_on=datetime.utcnow(), closed=bool(closed_on) ) case.track_create(CaseTransaction( type=CaseTransaction.TYPE_FORM, form_id=uuid.uuid4().hex, case=case, server_date=opened_on, )) es_case = transform_case_for_elasticsearch(case.to_json()) send_to_elasticsearch('cases', es_case) self.es.indices.refresh(CASE_INDEX) return case
def test_get_list(self): """ Any case in the appropriate domain should be in the list from the API. """ # The actual infrastructure involves saving to CouchDB, having PillowTop # read the changes and write it to ElasticSearch. # the pillow is set to offline mode - elasticsearch not needed to validate fake_case_es = FakeXFormES() v0_3.MOCK_CASE_ES = fake_case_es modify_date = datetime.utcnow() backend_case = CommCareCase(server_modified_on=modify_date, domain=self.domain.name) backend_case.save() self.addCleanup(backend_case.delete) translated_doc = transform_case_for_elasticsearch( backend_case.to_json()) fake_case_es.add_doc(translated_doc['_id'], translated_doc) response = self._assert_auth_get_resource(self.list_endpoint) self.assertEqual(response.status_code, 200) api_cases = json.loads(response.content)['objects'] self.assertEqual(len(api_cases), 1) api_case = api_cases[0] self.assertEqual(api_case['server_date_modified'], json_format_datetime(backend_case.server_modified_on))
def test_get_list(self): """ Any case in the appropriate domain should be in the list from the API. """ # The actual infrastructure involves saving to CouchDB, having PillowTop # read the changes and write it to ElasticSearch. # the pillow is set to offline mode - elasticsearch not needed to validate fake_case_es = FakeXFormES() v0_4.MOCK_CASE_ES = fake_case_es modify_date = datetime.utcnow() backend_case = CommCareCase(server_modified_on=modify_date, domain=self.domain.name) backend_case.save() self.addCleanup(backend_case.delete) translated_doc = transform_case_for_elasticsearch(backend_case.to_json()) fake_case_es.add_doc(translated_doc['_id'], translated_doc) response = self._assert_auth_get_resource(self.list_endpoint) self.assertEqual(response.status_code, 200) api_cases = json.loads(response.content)['objects'] self.assertEqual(len(api_cases), 1) api_case = api_cases[0] self.assertEqual(api_case['server_date_modified'], json_format_datetime(backend_case.server_modified_on))
def _setup_fake_es(self): # The actual infrastructure involves saving to CouchDB, having PillowTop # read the changes and write it to ElasticSearch. # the pillow is set to offline mode - elasticsearch not needed to validate fake_case_es = FakeXFormES() v0_3.MOCK_CASE_ES = fake_case_es modify_date = datetime.utcnow() backend_case = CommCareCase(server_modified_on=modify_date, domain=self.domain.name) backend_case.save() self.addCleanup(backend_case.delete) translated_doc = transform_case_for_elasticsearch(backend_case.to_json()) fake_case_es.add_doc(translated_doc['_id'], translated_doc) return backend_case
def test_case_by_identifier(self): self._send_case_to_es(case_type='ccuser') case = self._send_case_to_es() case.external_id = '123' case.save() case = CaseAccessors(self.domain).get_case(case.case_id) case_json = case.to_json() case_json['contact_phone_number'] = '234' es_case = transform_case_for_elasticsearch(case_json) send_to_elasticsearch('cases', es_case) self.es.indices.refresh(CASE_INDEX) self.assertEqual( get_case_by_identifier(self.domain, case.case_id).case_id, case.case_id) self.assertEqual( get_case_by_identifier(self.domain, '234').case_id, case.case_id) self.assertEqual( get_case_by_identifier(self.domain, '123').case_id, case.case_id)
def _setup_case(self, cases=None): modify_date = datetime.utcnow() cases = cases or [(None, None)] for owner_id, case_id in cases: kwargs = {} if owner_id: kwargs['owner_id'] = owner_id if case_id: kwargs['_id'] = case_id backend_case = CommCareCase(server_modified_on=modify_date, domain=self.domain.name, **kwargs) backend_case.save() self.addCleanup(backend_case.delete) translated_doc = transform_case_for_elasticsearch( backend_case.to_json()) send_to_elasticsearch('cases', translated_doc) self.es.indices.refresh(CASE_INDEX_INFO.index) return backend_case
def case_to_es_case(case): from corehq.pillows.case import transform_case_for_elasticsearch from corehq.apps.api.models import ESCase return ESCase(transform_case_for_elasticsearch(case.to_json()))