Exemple #1
0
    def test_add_references_task(self):
        collection = OrganizationCollectionFactory()
        concept1 = ConceptFactory()
        concept2 = ConceptFactory()
        mapping1 = MappingFactory(parent=concept2.parent,
                                  from_concept=concept2.get_latest_version(),
                                  to_concept=concept1.get_latest_version())
        mapping2 = MappingFactory()

        added_references, errors = add_references(
            collection.created_by,
            dict(expressions=[
                obj.get_latest_version().version_url
                for obj in [concept1, concept2, mapping2]
            ]), collection, None, True)

        self.assertEqual(errors, {})
        self.assertEqual(len(added_references), 4)
        self.assertListEqual(
            sorted([ref.expression for ref in added_references]),
            sorted([
                concept1.get_latest_version().version_url,
                concept2.get_latest_version().version_url,
                mapping1.get_latest_version().version_url,
                mapping2.get_latest_version().version_url,
            ]))
Exemple #2
0
    def test_delete_references(self):
        collection = OrganizationCollectionFactory()
        source = OrganizationSourceFactory()
        concept1 = ConceptFactory(parent=source)
        concept2 = ConceptFactory(parent=source)
        mapping = MappingFactory(from_concept=concept1,
                                 to_concept=concept2,
                                 parent=source)
        collection.add_references([concept1.uri, concept2.uri, mapping.uri])

        self.assertEqual(collection.concepts.count(), 2)
        self.assertEqual(collection.mappings.count(), 1)
        self.assertEqual(collection.references.count(), 3)

        collection.delete_references([
            concept2.get_latest_version().uri,
            mapping.get_latest_version().uri
        ])

        self.assertEqual(collection.concepts.count(), 1)
        self.assertEqual(collection.mappings.count(), 0)
        self.assertEqual(collection.references.count(), 1)
        self.assertEqual(collection.concepts.first().uri,
                         concept1.get_latest_version().uri)
        self.assertEqual(collection.references.first().expression,
                         concept1.get_latest_version().uri)
Exemple #3
0
    def test_seed_children_task(self):
        collection = OrganizationCollectionFactory()
        concept = ConceptFactory()
        mapping = MappingFactory()
        concept_latest_version = concept.get_latest_version()
        mapping_latest_version = mapping.get_latest_version()
        collection.add_references([
            concept_latest_version.version_url,
            mapping_latest_version.version_url
        ])

        self.assertEqual(collection.references.count(), 2)
        self.assertEqual(collection.concepts.count(), 1)
        self.assertEqual(collection.mappings.count(), 1)

        collection_v1 = OrganizationCollectionFactory(
            organization=collection.organization,
            version='v1',
            mnemonic=collection.mnemonic)
        self.assertEqual(collection_v1.references.count(), 0)
        self.assertEqual(collection_v1.concepts.count(), 0)
        self.assertEqual(collection_v1.mappings.count(), 0)

        seed_children('collection', collection_v1.id)  # pylint: disable=no-value-for-parameter

        self.assertEqual(collection_v1.references.count(), 2)
        self.assertEqual(collection_v1.concepts.count(), 1)
        self.assertEqual(collection_v1.mappings.count(), 1)
        self.assertEqual(
            list(collection_v1.references.values_list('expression',
                                                      flat=True)),
            list(collection.references.values_list('expression', flat=True)),
        )
Exemple #4
0
    def test_export_collection(self, s3_mock):  # pylint: disable=too-many-locals
        s3_mock.url_for = Mock(return_value='https://s3-url')
        s3_mock.upload_file = Mock()
        source = OrganizationSourceFactory()
        concept1 = ConceptFactory(parent=source)
        concept2 = ConceptFactory(parent=source)
        mapping = MappingFactory(from_concept=concept2,
                                 to_concept=concept1,
                                 parent=source)
        collection = OrganizationCollectionFactory()
        collection.add_references([concept1.uri, concept2.uri, mapping.uri])
        collection.refresh_from_db()

        export_collection(collection.id)  # pylint: disable=no-value-for-parameter

        latest_temp_dir = get_latest_dir_in_path('/tmp/')
        zipped_file = zipfile.ZipFile(latest_temp_dir + '/export.zip')
        exported_data = json.loads(
            zipped_file.read('export.json').decode('utf-8'))

        self.assertEqual(
            exported_data, {
                **CollectionDetailSerializer(collection).data, 'concepts': ANY,
                'mappings': ANY
            })

        exported_concepts = exported_data['concepts']
        expected_concepts = ConceptVersionDetailSerializer(
            [concept2.get_latest_version(),
             concept1.get_latest_version()],
            many=True).data

        self.assertEqual(len(exported_concepts), 2)
        self.assertIn(expected_concepts[0], exported_concepts)
        self.assertIn(expected_concepts[1], exported_concepts)

        exported_mappings = exported_data['mappings']
        expected_mappings = MappingDetailSerializer(
            [mapping.get_latest_version()], many=True).data

        self.assertEqual(len(exported_mappings), 1)
        self.assertEqual(expected_mappings, exported_mappings)

        s3_upload_key = collection.export_path
        s3_mock.upload_file.assert_called_once_with(key=s3_upload_key,
                                                    file_path=latest_temp_dir +
                                                    '/export.zip',
                                                    binary=True)
        s3_mock.url_for.assert_called_once_with(s3_upload_key)

        import shutil
        shutil.rmtree(latest_temp_dir)
Exemple #5
0
class MappingVersionsViewTest(OCLAPITestCase):
    def setUp(self):
        super().setUp()
        self.user = UserProfileFactory()
        self.token = self.user.get_token()
        self.source = UserSourceFactory(user=self.user)
        self.mapping = MappingFactory(parent=self.source)

    def test_get_200(self):
        latest_version = self.mapping.get_latest_version()

        response = self.client.get(self.mapping.url + 'versions/')

        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.data), 1)
        self.assertTrue(response.data[0]['is_latest_version'])
        self.assertEqual(response.data[0]['version_url'], latest_version.uri)
        self.assertEqual(response.data[0]['versioned_object_id'], self.mapping.id)
Exemple #6
0
class MappingVersionRetrieveViewTest(OCLAPITestCase):
    def setUp(self):
        super().setUp()
        self.user = UserProfileFactory()
        self.token = self.user.get_token()
        self.source = UserSourceFactory(user=self.user)
        self.mapping = MappingFactory(parent=self.source)

    def test_get_200(self):
        latest_version = self.mapping.get_latest_version()

        response = self.client.get(self.mapping.url + '{}/'.format(latest_version.id))

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['is_latest_version'], True)
        self.assertEqual(response.data['version_url'], latest_version.uri)
        self.assertEqual(response.data['versioned_object_id'], self.mapping.id)

    def test_get_404(self):
        response = self.client.get(self.mapping.url + '123/')

        self.assertEqual(response.status_code, 404)
Exemple #7
0
class MappingExtraRetrieveUpdateDestroyViewTest(OCLAPITestCase):
    def setUp(self):
        super().setUp()
        self.extras = dict(foo='bar', tao='ching')
        self.mapping = MappingFactory(extras=self.extras)
        self.user = UserProfileFactory(organizations=[self.mapping.parent.organization])
        self.token = self.user.get_token()

    def test_get_200(self):
        response = self.client.get(self.mapping.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.mapping.uri + 'extras/bar/', format='json')

        self.assertEqual(response.status_code, 404)

    def test_put_200(self):
        self.assertEqual(self.mapping.versions.count(), 1)
        self.assertEqual(self.mapping.get_latest_version().extras, self.extras)
        self.assertEqual(self.mapping.extras, self.extras)

        response = self.client.put(
            self.mapping.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.mapping.versions.count(), 2)
        self.assertEqual(self.mapping.get_latest_version().extras, dict(foo='foobar', tao='ching'))
        self.mapping.refresh_from_db()
        self.assertEqual(self.mapping.extras, dict(foo='foobar', tao='ching'))

    def test_put_400(self):
        self.assertEqual(self.mapping.versions.count(), 1)
        self.assertEqual(self.mapping.get_latest_version().extras, self.extras)
        self.assertEqual(self.mapping.extras, self.extras)

        response = self.client.put(
            self.mapping.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.mapping.versions.count(), 1)
        self.assertEqual(self.mapping.get_latest_version().extras, self.extras)
        self.mapping.refresh_from_db()
        self.assertEqual(self.mapping.extras, self.extras)

    def test_delete_204(self):
        self.assertEqual(self.mapping.versions.count(), 1)
        self.assertEqual(self.mapping.get_latest_version().extras, self.extras)
        self.assertEqual(self.mapping.extras, self.extras)

        response = self.client.delete(
            self.mapping.uri + 'extras/foo/',
            HTTP_AUTHORIZATION='Token ' + self.token,
            format='json'
        )

        self.assertEqual(response.status_code, 204)
        self.assertEqual(self.mapping.versions.count(), 2)
        self.assertEqual(self.mapping.get_latest_version().extras, dict(tao='ching'))
        self.assertEqual(self.mapping.versions.first().extras, dict(foo='bar', tao='ching'))
        self.mapping.refresh_from_db()
        self.assertEqual(self.mapping.extras, dict(tao='ching'))
Exemple #8
0
class MappingRetrieveUpdateDestroyViewTest(OCLAPITestCase):
    def setUp(self):
        super().setUp()
        self.user = UserProfileFactory()
        self.token = self.user.get_token()
        self.source = UserSourceFactory(user=self.user)
        self.mapping = MappingFactory(parent=self.source)

    def test_get_200(self):
        response = self.client.get(self.mapping.uri, format='json')

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['uuid'], str(self.mapping.get_latest_version().id))

    def test_get_404(self):
        response = self.client.get(
            self.source.mappings_url + '123/', format='json'
        )
        self.assertEqual(response.status_code, 404)

    def test_put_200(self):
        self.assertEqual(self.mapping.versions.count(), 1)
        self.assertEqual(self.mapping.get_latest_version().map_type, SAME_AS)

        response = self.client.put(
            self.mapping.uri,
            dict(map_type='narrower than'),
            HTTP_AUTHORIZATION='Token ' + self.token,
        )

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['uuid'], str(self.mapping.get_latest_version().id))
        self.assertEqual(response.data['map_type'], 'narrower than')
        self.assertEqual(self.mapping.versions.count(), 2)
        self.assertEqual(self.mapping.get_latest_version().map_type, 'narrower than')

        self.mapping.refresh_from_db()
        self.assertEqual(self.mapping.map_type, 'narrower than')

    def test_put_400(self):
        self.assertEqual(self.mapping.versions.count(), 1)
        self.assertEqual(self.mapping.get_latest_version().map_type, SAME_AS)

        response = self.client.put(
            self.mapping.uri,
            dict(map_type=''),
            HTTP_AUTHORIZATION='Token ' + self.token,
        )

        self.assertEqual(response.status_code, 400)
        self.assertEqual(
            response.data, dict(map_type=[ErrorDetail(string='This field may not be blank.', code='blank')])
        )
        self.assertEqual(self.mapping.versions.count(), 1)

    def test_delete_204(self):
        self.assertEqual(self.mapping.versions.count(), 1)
        self.assertFalse(self.mapping.get_latest_version().retired)

        response = self.client.delete(
            self.mapping.uri,
            HTTP_AUTHORIZATION='Token ' + self.token,
        )

        self.assertEqual(response.status_code, 204)
        self.assertEqual(self.mapping.versions.count(), 2)
        self.assertFalse(self.mapping.versions.first().retired)

        latest_version = self.mapping.get_latest_version()
        self.assertTrue(latest_version.retired)
        self.assertEqual(latest_version.comment, 'Mapping was retired')

        self.mapping.refresh_from_db()
        self.assertTrue(self.mapping.retired)
    def test_put_200_specific_expression(self):
        response = self.client.put(
            '/collections/coll/references/',
            dict(data=dict(concepts=[self.concept.uri])),
            HTTP_AUTHORIZATION='Token ' + self.token,
            format='json')

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data, [
            dict(
                added=False,
                expression=self.concept.uri,
                message=[
                    'Concept or Mapping reference name must be unique in a collection.'
                ])
        ])

        concept2 = ConceptFactory()
        response = self.client.put('/collections/coll/references/',
                                   dict(data=dict(concepts=[concept2.uri])),
                                   HTTP_AUTHORIZATION='Token ' + self.token,
                                   format='json')

        self.assertEqual(response.status_code, 200)
        self.collection.refresh_from_db()
        self.assertEqual(self.collection.references.count(), 2)
        self.assertEqual(self.collection.concepts.count(), 2)
        self.assertEqual(self.collection.active_concepts, 2)
        self.assertEqual(self.collection.active_mappings, 0)
        self.assertTrue(
            self.collection.references.filter(
                expression=concept2.get_latest_version().uri).exists())
        self.assertEqual(response.data, [
            dict(
                added=True,
                expression=concept2.get_latest_version().uri,
                message=
                'Added the latest versions of concept to the collection. Future updates will not be added'
                ' automatically.')
        ])

        mapping = MappingFactory(from_concept=concept2,
                                 to_concept=self.concept,
                                 parent=self.concept.parent)

        response = self.client.put('/collections/coll/references/',
                                   dict(data=dict(mappings=[mapping.uri])),
                                   HTTP_AUTHORIZATION='Token ' + self.token,
                                   format='json')

        self.assertEqual(response.status_code, 200)
        self.collection.refresh_from_db()
        self.assertEqual(self.collection.references.count(), 3)
        self.assertEqual(self.collection.concepts.count(), 2)
        self.assertEqual(self.collection.mappings.count(), 1)
        self.assertEqual(self.collection.active_concepts, 2)
        self.assertEqual(self.collection.active_mappings, 1)
        self.assertTrue(
            self.collection.references.filter(
                expression=mapping.get_latest_version().uri).exists())
        self.assertEqual(response.data, [
            dict(
                added=True,
                expression=mapping.get_latest_version().uri,
                message=
                'Added the latest versions of mapping to the collection. Future updates will not be added'
                ' automatically.')
        ])

        concept3 = ConceptFactory()
        latest_version = concept3.get_latest_version()
        mapping2 = MappingFactory(from_concept=latest_version,
                                  parent=concept3.parent)

        response = self.client.put(
            '/collections/coll/references/?cascade=sourcemappings',
            dict(data=dict(concepts=[latest_version.uri])),
            HTTP_AUTHORIZATION='Token ' + self.token,
            format='json')
        self.assertEqual(response.status_code, 200)
        self.collection.refresh_from_db()
        self.assertEqual(self.collection.references.count(), 5)
        self.assertEqual(self.collection.concepts.count(), 3)
        self.assertEqual(self.collection.mappings.count(), 2)
        self.assertEqual(self.collection.active_concepts, 3)
        self.assertEqual(self.collection.active_mappings, 2)
        self.assertTrue(
            self.collection.references.filter(
                expression=mapping2.get_latest_version().uri).exists())
        self.assertTrue(
            self.collection.references.filter(
                expression=latest_version.uri).exists())