def test_extra_delete_204(self): names = [LocalizedTextFactory()] concept = ConceptFactory(parent=self.source, names=names, extras=dict(foo='bar', tao='ching')) self.assertEqual(concept.versions.count(), 1) def extra_url(extra): return "/orgs/{}/sources/{}/concepts/{}/extras/{}/".format( self.organization.mnemonic, self.source.mnemonic, concept.mnemonic, extra) response = self.client.delete(extra_url('tao'), HTTP_AUTHORIZATION='Token ' + self.token, format='json') self.assertEqual(response.status_code, 204) concept.refresh_from_db() self.assertFalse('tao' in concept.extras) self.assertEqual(concept.versions.count(), 2) latest_version = concept.get_latest_version() self.assertEqual(latest_version.extras, dict(foo='bar')) self.assertEqual(latest_version.comment, 'Deleted extra tao.')
def test_extra_put_200(self): names = [LocalizedTextFactory()] concept = ConceptFactory(parent=self.source, names=names, extras=dict(foo='bar', tao='ching')) def extra_url(extra): return "/orgs/{}/sources/{}/concepts/{}/extras/{}/".format( self.organization.mnemonic, self.source.mnemonic, concept.mnemonic, extra) response = self.client.put(extra_url('tao'), dict(tao='te-ching'), HTTP_AUTHORIZATION='Token ' + self.token, format='json') self.assertEqual(response.status_code, 200) concept.refresh_from_db() self.assertTrue( concept.extras['tao'] == response.data['tao'] == 'te-ching') self.assertEqual(concept.versions.count(), 2) latest_version = concept.versions.order_by('-created_at').first() self.assertEqual(latest_version.extras, dict(foo='bar', tao='te-ching')) self.assertEqual(latest_version.comment, 'Updated extras: tao=te-ching.')
def test_post_202(self): concept = ConceptFactory() old_updated_at = concept.updated_at url = '/indexes/resources/concepts/' response = self.client.post(url, dict(ids='{}'.format(concept.mnemonic)), HTTP_AUTHORIZATION=self.token_header) self.assertEqual(response.status_code, 202) concept.refresh_from_db() self.assertNotEqual(old_updated_at, concept.updated_at)
def test_put_200(self): concept = ConceptFactory(parent=self.source) self.assertEqual(concept.versions.count(), 1) concepts_url = "/orgs/{}/sources/{}/concepts/{}/".format( self.organization.mnemonic, self.source.mnemonic, concept.mnemonic) response = self.client.put(concepts_url, { **self.concept_payload, 'datatype': 'None', 'update_comment': 'Updated datatype' }, HTTP_AUTHORIZATION='Token ' + self.token, format='json') self.assertEqual(response.status_code, 200) self.assertListEqual(list(response.data.keys()), [ 'uuid', 'id', 'external_id', 'concept_class', 'datatype', 'url', 'retired', 'source', 'owner', 'owner_type', 'owner_url', 'display_name', 'display_locale', 'names', 'descriptions', 'created_on', 'updated_on', 'versions_url', 'version', 'extras', 'name', 'type', 'update_comment', 'version_url', 'mappings', 'updated_by', 'created_by', 'internal_reference_id', 'parent_concept_urls', 'child_concept_urls' ]) version = Concept.objects.last() concept.refresh_from_db() self.assertFalse(version.is_versioned_object) self.assertTrue(version.is_latest_version) self.assertEqual(version.versions.count(), 2) self.assertEqual(response.data['uuid'], str(version.id)) self.assertEqual(response.data['datatype'], 'None') self.assertEqual(response.data['update_comment'], 'Updated datatype') self.assertEqual(response.data['concept_class'], 'Procedure') self.assertEqual(response.data['url'], concept.uri) self.assertEqual(response.data['url'], version.versioned_object.uri) self.assertEqual(response.data['version_url'], version.uri) self.assertFalse(response.data['retired']) self.assertEqual(response.data['source'], self.source.mnemonic) self.assertEqual(response.data['owner'], self.organization.mnemonic) self.assertEqual(response.data['owner_type'], "Organization") self.assertEqual(response.data['owner_url'], self.organization.uri) self.assertEqual(response.data['display_name'], 'c1 name') self.assertEqual(response.data['display_locale'], 'en') self.assertEqual(response.data['versions_url'], concept.uri + 'versions/') self.assertEqual(response.data['version'], str(version.id)) self.assertEqual(response.data['extras'], dict(foo='bar')) self.assertEqual(response.data['type'], 'Concept') self.assertEqual(response.data['version_url'], version.uri) self.assertEqual(response.data['mappings'], []) self.assertTrue(concept.is_versioned_object) self.assertEqual(concept.datatype, "None")
def test_concept_access_changes_with_source(self): source = OrganizationSourceFactory(version=HEAD) self.assertEqual(source.public_access, ACCESS_TYPE_EDIT) concept = ConceptFactory(parent=source, public_access=ACCESS_TYPE_EDIT) self.assertEqual(concept.public_access, ACCESS_TYPE_EDIT) source.public_access = ACCESS_TYPE_VIEW source.save() concept.refresh_from_db() self.assertEqual(source.public_access, ACCESS_TYPE_VIEW) self.assertEqual(source.public_access, concept.public_access)
def test_source_active_inactive_should_affect_children(self): source = OrganizationSourceFactory(is_active=True) concept = ConceptFactory(parent=source, is_active=True) source.is_active = False source.save() concept.refresh_from_db() self.assertFalse(source.is_active) self.assertFalse(concept.is_active) source.is_active = True source.save() concept.refresh_from_db() self.assertTrue(source.is_active) self.assertTrue(concept.is_active)
def test_extra_put_400(self): names = [LocalizedTextFactory()] concept = ConceptFactory(parent=self.source, names=names, extras=dict(foo='bar', tao='ching')) def extra_url(extra): return "/orgs/{}/sources/{}/concepts/{}/extras/{}/".format( self.organization.mnemonic, self.source.mnemonic, concept.mnemonic, extra) response = self.client.put(extra_url('tao'), dict(tao=None), HTTP_AUTHORIZATION='Token ' + self.token, format='json') self.assertEqual(response.status_code, 400) self.assertEqual(response.data, ['Must specify tao param in body.']) concept.refresh_from_db() self.assertEqual(concept.extras, dict(foo='bar', tao='ching'))
def test_delete_204(self): names = [LocalizedTextFactory()] concept = ConceptFactory(parent=self.source, names=names) concepts_url = "/orgs/{}/sources/{}/concepts/{}/".format( self.organization.mnemonic, self.source.mnemonic, concept.mnemonic) response = self.client.delete(concepts_url, {'update_comment': 'Deleting it'}, HTTP_AUTHORIZATION='Token ' + self.token, format='json') self.assertEqual(response.status_code, 204) concept.refresh_from_db() self.assertEqual(concept.versions.count(), 2) latest_version = concept.versions.order_by('-created_at').first() self.assertTrue(latest_version.retired) self.assertTrue(concept.retired) self.assertTrue(latest_version.comment, 'Deleting it')
class ConceptExtraRetrieveUpdateDestroyViewTest(OCLAPITestCase): def setUp(self): super().setUp() self.extras = dict(foo='bar', tao='ching') self.concept = ConceptFactory(extras=self.extras, names=[LocalizedTextFactory()]) self.user = UserProfileFactory( organizations=[self.concept.parent.organization]) self.token = self.user.get_token() def test_get_200(self): response = self.client.get(self.concept.uri + 'extras/foo/', format='json') self.assertEqual(response.status_code, 200) self.assertEqual(response.data, dict(foo='bar')) def test_get_404(self): response = self.client.get(self.concept.uri + 'extras/bar/', format='json') self.assertEqual(response.status_code, 404) def test_put_200(self): self.assertEqual(self.concept.versions.count(), 1) self.assertEqual(self.concept.get_latest_version().extras, self.extras) self.assertEqual(self.concept.extras, self.extras) response = self.client.put(self.concept.uri + 'extras/foo/', dict(foo='foobar'), HTTP_AUTHORIZATION='Token ' + self.token, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(response.data, dict(foo='foobar')) self.assertEqual(self.concept.versions.count(), 2) self.assertEqual(self.concept.get_latest_version().extras, dict(foo='foobar', tao='ching')) self.concept.refresh_from_db() self.assertEqual(self.concept.extras, dict(foo='foobar', tao='ching')) def test_put_400(self): self.assertEqual(self.concept.versions.count(), 1) self.assertEqual(self.concept.get_latest_version().extras, self.extras) self.assertEqual(self.concept.extras, self.extras) response = self.client.put(self.concept.uri + 'extras/foo/', dict(tao='foobar'), HTTP_AUTHORIZATION='Token ' + self.token, format='json') self.assertEqual(response.status_code, 400) self.assertEqual(response.data, ['Must specify foo param in body.']) self.assertEqual(self.concept.versions.count(), 1) self.assertEqual(self.concept.get_latest_version().extras, self.extras) self.concept.refresh_from_db() self.assertEqual(self.concept.extras, self.extras) def test_delete_204(self): self.assertEqual(self.concept.versions.count(), 1) self.assertEqual(self.concept.get_latest_version().extras, self.extras) self.assertEqual(self.concept.extras, self.extras) response = self.client.delete(self.concept.uri + 'extras/foo/', HTTP_AUTHORIZATION='Token ' + self.token, format='json') self.assertEqual(response.status_code, 204) self.assertEqual(self.concept.versions.count(), 2) self.assertEqual(self.concept.get_latest_version().extras, dict(tao='ching')) self.assertEqual(self.concept.versions.first().extras, dict(foo='bar', tao='ching')) self.concept.refresh_from_db() self.assertEqual(self.concept.extras, dict(tao='ching'))
def test_put_200_openmrs_schema(self): # pylint: disable=too-many-statements self.create_lookup_concept_classes() source = OrganizationSourceFactory( custom_validation_schema=CUSTOM_VALIDATION_SCHEMA_OPENMRS) name = LocalizedTextFactory(locale='fr') concept = ConceptFactory(parent=source, names=[name]) self.assertEqual(concept.versions.count(), 1) response = self.client.put(concept.uri, { **self.concept_payload, 'datatype': 'None', 'update_comment': 'Updated datatype' }, HTTP_AUTHORIZATION='Token ' + self.token, format='json') self.assertEqual(response.status_code, 200) self.assertListEqual(list(response.data.keys()), [ 'uuid', 'id', 'external_id', 'concept_class', 'datatype', 'url', 'retired', 'source', 'owner', 'owner_type', 'owner_url', 'display_name', 'display_locale', 'names', 'descriptions', 'created_on', 'updated_on', 'versions_url', 'version', 'extras', 'name', 'type', 'update_comment', 'version_url', 'mappings', 'updated_by', 'created_by', 'internal_reference_id', 'parent_concept_urls', 'child_concept_urls' ]) names = response.data['names'] version = Concept.objects.last() concept.refresh_from_db() self.assertFalse(version.is_versioned_object) self.assertTrue(version.is_latest_version) self.assertEqual(version.versions.count(), 2) self.assertEqual(response.data['uuid'], str(version.id)) self.assertEqual(response.data['datatype'], 'None') self.assertEqual(response.data['update_comment'], 'Updated datatype') self.assertEqual(response.data['concept_class'], 'Procedure') self.assertEqual(response.data['url'], concept.uri) self.assertEqual(response.data['url'], version.versioned_object.uri) self.assertEqual(response.data['version_url'], version.uri) self.assertFalse(response.data['retired']) self.assertEqual(response.data['source'], source.mnemonic) self.assertEqual(response.data['owner'], source.organization.mnemonic) self.assertEqual(response.data['owner_type'], "Organization") self.assertEqual(response.data['owner_url'], source.organization.uri) self.assertEqual(response.data['display_name'], 'c1 name') self.assertEqual(response.data['display_locale'], 'en') self.assertEqual(response.data['versions_url'], concept.uri + 'versions/') self.assertEqual(response.data['version'], str(version.id)) self.assertEqual(response.data['extras'], dict(foo='bar')) self.assertEqual(response.data['type'], 'Concept') self.assertEqual(response.data['version_url'], version.uri) self.assertEqual(response.data['mappings'], []) self.assertTrue(concept.is_versioned_object) self.assertEqual(concept.datatype, "None") # same names in update names[0]['uuid'] = str(name.id) [name.pop('type', None) for name in names] # pylint: disable=expression-not-assigned response = self.client.put(concept.uri, { **self.concept_payload, 'names': names, 'datatype': 'Numeric', 'update_comment': 'Updated datatype' }, HTTP_AUTHORIZATION='Token ' + self.token, format='json') self.assertEqual(response.status_code, 200) concept.refresh_from_db() self.assertEqual(concept.datatype, "Numeric") self.assertEqual(concept.names.count(), 1) latest_version = concept.get_latest_version() prev_version = latest_version.prev_version self.assertEqual(latest_version.names.count(), 1) self.assertEqual(prev_version.names.count(), 1) self.assertEqual(prev_version.names.first().name, latest_version.names.first().name) self.assertEqual(prev_version.names.first().locale, latest_version.names.first().locale)