Exemplo n.º 1
0
    def test_view_readonly_with_fields(self):
        self.add_admin_credentials()
        detail_url = reverse('accession-detail',
                             kwargs={
                                 'institute_code': 'ESP004',
                                 'germplasm_number': 'BGE0001'
                             })
        response = self.client.get(detail_url, data={'fields': 'institute'})
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ['Passed fields are not allowed'])

        response = self.client.get(detail_url, data={'fields': INSTITUTE_CODE})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json()['data'][INSTITUTE_CODE], 'ESP004')
        self.assertEqual(len(response.json()['data'].keys()), 1)

        response = self.client.get(
            detail_url, data={'fields': 'instituteCode,passports,genera'})
        self.assertEqual(response.json()['data'][INSTITUTE_CODE], 'ESP004')
        self.assertEqual(len(response.json()['data'][PASSPORTS]), 1)
        self.assertEqual(len(response.json()['data'].keys()), 3)
        self.assertEqual(response.json()['data']['genera'], ['Solanum'])

        list_url = reverse('accession-list')
        response = self.client.get(list_url,
                                   data={'fields': 'instituteCode,passp'})
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ['Passed fields are not allowed'])
Exemplo n.º 2
0
    def test_create_delete(self):
        self.add_admin_credentials()
        list_url = reverse('scale-list')
        api_data = {
            "name": "milimeter",
            "description": "milimeter",
            "data_type": "Numerical",
            "decimal_places": 0,
            "max": 0,
            "min": 0,
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        # bad data
        bad_api_data = {
            "name": "milimeter",
            "description": "milimeter",
            "decimal_places": 0,
            "max": 0,
            "min": 0
        }
        response = self.client.post(list_url, data=bad_api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), ['data_type mandatory'])

        # adding agian should fail
        with transaction.atomic():
            response = self.client.post(list_url, data=api_data, format='json')
            self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        detail_url = reverse('scale-detail', kwargs={"name": "milimeter"})
        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
Exemplo n.º 3
0
    def test_create(self):
        self.add_user_credentials()
        list_url = reverse('accession-list')
        api_data = {
            'data': {
                INSTITUTE_CODE: 'ESP004',
                'germplasmNumber': 'BGE0005'
            },
            'metadata': {
                'group': 'admin',
                'is_public': True
            }
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        assert_error_is_equal(
            response.json(),
            ['can not set group or is public while creating the accession'])
        api_data = {
            'data': {
                INSTITUTE_CODE: 'ESP004',
                'germplasmNumber': 'BGE0005'
            },
            'metadata': {}
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response.json()['metadata'], {
            'group': 'userGroup',
            'is_public': False
        })
Exemplo n.º 4
0
    def test_create_delete(self):
        self.add_admin_credentials()
        list_url = reverse('plant-list')
        api_data = {
            "data": {"name": "Plant size2"},
            "metadata": {}}

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

        # bad data
        bad_api_data = {
            "data": {
                "description": "Measure of plant heigth",
                "method": "by tape",
                "data_type": "Numerical",
                "unit": "centimeter"},
            "metadata": {}}
        response = self.client.post(list_url, data=bad_api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), ['name mandatory'])

        # adding agian should fail
        with transaction.atomic():
            response = self.client.post(list_url, data=api_data, format='json')
            self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        detail_url = reverse('plant-detail',
                             kwargs={"name": "Plant size2"})
        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
Exemplo n.º 5
0
    def test_update_observation_unit_with_plant(self):

        self.add_admin_credentials()
        detail_url = reverse('observationunit-detail',
                             kwargs={'name': 'Plant 1'})
        response = self.client.get(detail_url)
        api_data = response.json()
        api_data['data']['plants'] = ['Plant 1', "Plant 2"]
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.json(), api_data)
        response = self.client.get(detail_url)
        self.assertEqual(response.json(), api_data)

        self.add_user_credentials()
        detail_url = reverse('observationunit-detail',
                             kwargs={'name': 'Plant 3'})
        response = self.client.get(detail_url)

        api_data = response.json()
        api_data['data']['plants'] = ['Plant 3', "Plant 1"]
        response = self.client.put(detail_url, data=api_data, format='json')

        assert_error_is_equal(
            response.json(),
            ['Can not add plant you dont own to observation unit: Plant 1'])

        api_data['data']['plants'] = []
        response = self.client.put(detail_url, data=api_data, format='json')
Exemplo n.º 6
0
    def test_update(self):
        self.add_admin_credentials()
        detail_url = reverse('plant-detail',
                             kwargs={'name': 'Plant 1'})

        response = self.client.get(detail_url)
        api_data = response.json()
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(), api_data)

        # admin can change group

        api_data['metadata']['group'] = 'userGroup'
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(), api_data)

        # Fail changing group if not exists
        api_data = {
            'data': {
                'name': 'Plant 1'},
            'metadata': {'group': 'rGroup'}}
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ['Provided group does not exist in db: rGroup'])
Exemplo n.º 7
0
    def test_bulk_create(self):
        self.add_admin_credentials()
        list_url = reverse('plant-list')
        api_data = [
            {
                'data': {
                    'name': 'Plant 5'
                },
                'metadata': {
                    'group': 'userGroup'
                }
            },
            {
                'data': {
                    'name': 'Plant 6'
                },
                'metadata': {
                    'group': 'admin'
                }
            },
        ]
        response = self.client.post(list_url + 'bulk/',
                                    data=api_data,
                                    format='json')

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), [
            'can not set group while creating the plant',
            'can not set group while creating the plant'
        ])
        # correct data
        api_data = [{
            'data': {
                'name': 'Plant 5'
            },
            'metadata': {}
        }, {
            'data': {
                'name': 'Plant 6'
            },
            'metadata': {}
        }]

        response = self.client.post(list_url + 'bulk/',
                                    data=api_data,
                                    format='json')
        self.assertEqual(len(response.json()), 2)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(len(self.client.get(list_url).json()), 6)

        # Should fail, can not add again same item
        response = self.client.post(list_url + 'bulk/',
                                    data=api_data,
                                    format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertEqual(len(response.json()[DETAIL]), 2)

        self.assertEqual(len(self.client.get(list_url).json()), 6)
Exemplo n.º 8
0
    def test_create_delete(self):
        self.add_admin_credentials()
        list_url = reverse('observationvariable-list')
        api_data = {
            "data": {
                "name": "Plant size2",
                "trait": "Plant Growth type",
                "description": "Measure of plant heigth",
                "method": "by tape",
                "scale": "centimeter"
            },
            "metadata": {}
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

        # bad data
        bad_api_data = {
            "data": {
                "name": "Plant",
                "description": "Measure of plant heigth",
                "method": "by tape",
                "scale": "centimeter"
            },
            "metadata": {}
        }
        response = self.client.post(list_url, data=bad_api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), ['trait mandatory'])

        # adding agian should fail
        with transaction.atomic():
            response = self.client.post(list_url, data=api_data, format='json')
            self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        detail_url = reverse('observationvariable-detail',
                             kwargs={"name": "Plant size2"})
        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

        # check name validator
        bad_api_data = {
            "data": {
                "name": "Plant/kjhas",
                "description": "Measure of plant heigth",
                "trait": "Plant Growth type",
                "method": "by tape",
                "scale": "centimeter"
            },
            "metadata": {}
        }
        response = self.client.post(list_url, data=bad_api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), [
            'Plant/kjhas: "\\", "/", "*", "<", ">", """ are not allowed characters'
        ])
Exemplo n.º 9
0
 def test_fail_create_by_endpoint(self):
     if DO_TESTS:
         request = self.create_request()
         request.requested_accessions = [{'instituteCode': 'ESP058', 'germplasmNumber': 'BGE0003'}]
         requests_url = reverse('seedrequest-list')
         response = self.client.post(requests_url, format='json',
                                     data=request.get_api_document())
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
         assert_error_is_equal(response.json(),
                               ["['This institute has no email to send requests ESP058']"])
Exemplo n.º 10
0
    def test_update(self):
        self.add_admin_credentials()
        detail_url = reverse('observationvariable-detail',
                             kwargs={'name': 'Plant size:cm'})

        api_data = {
            'data': {
                'name': 'Plant size:cm',
                'trait': 'Plant Growth type',
                'description': 'Measure of plant heigth',
                'method': 'by tape',
                'scale': 'centimeter'
            },
            'metadata': {
                'group': 'admin'
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(), api_data)

        # admin can change group
        api_data = {
            'data': {
                'name': 'Plant size:cm',
                'trait': 'Plant Growth type',
                'description': 'Measure of plant heigth',
                'method': 'by tape',
                'scale': 'centimeter'
            },
            'metadata': {
                'group': 'userGroup'
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(), api_data)

        # Fail changing group if not exists
        api_data = {
            'data': {
                'name': 'Plant size:cm',
                'trait': 'Plant Growth type',
                'description': 'Measure of plant heigth',
                'method': 'by tape',
                'scale': 'centimeter'
            },
            'metadata': {
                'group': 'rGroup'
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ['Provided group does not exist in db: rGroup'])
Exemplo n.º 11
0
    def test_update(self):
        self.add_admin_credentials()
        detail_url = reverse('accession-detail',
                             kwargs={
                                 'institute_code': 'ESP004',
                                 'germplasm_number': 'BGE0001'
                             })
        api_data = {
            'data': {
                INSTITUTE_CODE: 'ESP004',
                'germplasmNumber': 'BGE0001'
            },
            'metadata': {
                'group': 'admin',
                'is_public': False
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(), api_data)

        # admin can change group
        api_data = {
            'data': {
                INSTITUTE_CODE: 'ESP004',
                'germplasmNumber': 'BGE0001'
            },
            'metadata': {
                'group': 'userGroup',
                'is_public': True
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(), api_data)

        # Fail changing group if not exists
        api_data = {
            'data': {
                INSTITUTE_CODE: 'ESP004',
                'germplasmNumber': 'BGE0001'
            },
            'metadata': {
                'group': 'rGroup',
                'is_public': True
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ['Provided group does not exist in db: rGroup'])
Exemplo n.º 12
0
    def test_create_delete(self):
        self.add_admin_credentials()
        list_url = reverse('accessionset-list')
        api_data = {'data': {'instituteCode': 'ESP004',
                             'accessionsetNumber': 'NC003'},
                    'metadata': {'group': 'admin', 'is_public': True}}

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(
            response.json(),
            ['can not set group or is public while creating the accession'])
        api_data = {'data': {'instituteCode': 'ESP004',
                             'accessionsetNumber': 'NC003',
                             ACCESSIONS: [{INSTITUTE_CODE: 'ESP004',
                                           GERMPLASM_NUMBER: 'BGE0004'}]},
                    'metadata': {}}

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

        self.assertEqual(response.json()['data'], api_data['data'])

        # bad payload data
        api_data = {'data': {'instituteCode': 'ESP004'},
                    'metadata': {}}
        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), ['accessionsetNumber mandatory'])

        # already en db
        with transaction.atomic():
            api_data = {'data': {'instituteCode': 'ESP004',
                                 'accessionsetNumber': 'NC003'},
                        'metadata': {}}

            response = self.client.post(list_url, data=api_data, format='json')
            self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
            assert_error_is_equal(
                response.json(),
                ['This accessionset already exists in db: ESP004 NC003'])

        detail_url = reverse('accessionset-detail',
                             kwargs={'institute_code': 'ESP004',
                                     'accessionset_number': 'NC003'})
        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

        # cano not add accessionset if accessions not in db
        api_data = {'data': {'instituteCode': 'ESP004',
                             'accessionsetNumber': 'NC004',
                             ACCESSIONS: [{INSTITUTE_CODE: 'ESP004',
                                           GERMPLASM_NUMBER: 'fake'}]},
                    'metadata': {}}

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ['NC004: accession not found ESP004:fake'])
Exemplo n.º 13
0
    def test_filter(self):
        self.add_admin_credentials()
        list_url = reverse('study-list')

        response = self.client.get(list_url, data={'name': 'study1'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 1)

        response = self.client.get(list_url, data={'name_contains': 'study'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 5)

        response = self.client.get(
            list_url, data={'description__icontains': 'description'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 5)

        response = self.client.get(list_url,
                                   data={'location_contains': 'Valencia'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 4)

        response = self.client.get(list_url,
                                   data={'location_contains': 'valencia'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 4)

        response = self.client.get(list_url, data={'is_active': True})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 4)

        response = self.client.get(list_url, data={'is_active': False})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 1)

        response = self.client.get(list_url, data={'is_public': False})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 3)

        response = self.client.get(list_url)

        response = self.client.get(list_url, data={'year': 2017})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 4)

        response = self.client.get(list_url, data={'year': 201})
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ['Year must be a string of 4 digits'])
Exemplo n.º 14
0
    def test_mine_and_not_public(self):
        self.add_user_credentials()
        detail_url = reverse('accession-detail',
                             kwargs={
                                 'institute_code': 'ESP004',
                                 'germplasm_number': 'BGE0004'
                             })
        response = self.client.get(detail_url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        response = self.client.put(detail_url, data={})
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), ['Data key not present'])
        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
Exemplo n.º 15
0
    def test_user_can_not_change_group(self):
        self.add_user_credentials()
        detail_url = reverse('study-detail', kwargs={'name': 'study4'})
        response = self.client.get(detail_url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        api_data = deepcopy(response.json())
        api_data['metadata']['group'] = 'admin'

        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        assert_error_is_equal(response.json(), [
            'Can not change ownership if group does not belong to you : admin'
        ])
Exemplo n.º 16
0
    def test_create_delete(self):
        self.add_admin_credentials()
        list_url = reverse('observation-list')
        api_data = {
            'observation_variable': 'Plant size:cm',
            'observation_unit': 'Plant 1',
            'value': '99',
            'observer': 'observer1',
            'creation_time': '1911-12-03 00:23:00',
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        created_obj_id = response.json()['observation_id']

        # bad data
        bad_api_data = {
            'observation_variable': 'Plant size:cm',
            'value': '99',
            'observer': 'observer1',
            'creation_time': '1911-12-03 00:23:00'}
        response = self.client.post(list_url, data=bad_api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), ['observation_unit mandatory'])

        # adding again should fail
        with transaction.atomic():
            response = self.client.post(list_url, data=api_data, format='json')
            self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        detail_url = reverse('observation-detail',
                             kwargs={"observation_id": created_obj_id})
        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

        # not valid value
        api_data = {
            'observation_variable': 'Plant size:cm',
            'observation_unit': 'Plant 1',
            'value': '121',
            'observer': 'observer1',
            'creation_time': '1911-12-03 00:23:00',
        }
        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(
            response.json(),
            ['Plant 1: Plant size:cm: Numeric value is bigger than maxim: 121 > 100.0'])
Exemplo n.º 17
0
    def test_mine_and_not_public(self):
        self.add_user_credentials()
        detail_url = reverse('study-detail', kwargs={'name': 'study4'})
        response = self.client.get(detail_url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        response = self.client.put(detail_url, data={})
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), ['Data key not present'])

        api_data = {
            'data': {
                'name': "study4",
                'description': "updated_description",
                'start_date': "2018/01/17",
                'end_date': "2020/12/01",
                'location': "updated_city",
                'contacts': "updated_contact"
            },
            'metadata': {
                "group": "userGroup",
                "is_public": False
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        response = self.client.get(detail_url)

        api_data = {
            'data': {
                'name': "study4",
                'description': "updated_description",
                'start_date': "2018/01/17",
                'end_date': "2020/12/01",
                'location': "updated_city",
                'contacts': "updated_contact"
            },
            'metadata': {
                "group": "userGroup",
                "is_public": True
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
Exemplo n.º 18
0
    def test_create_delete(self):
        self.add_admin_credentials()
        list_url = reverse('observationunit-list')
        api_data = {
            "data": {
                "name": "Plant 5",
                "accession": {
                    "instituteCode": "ESP004",
                    "germplasmNumber": "BGE0001"
                },
                "level": "plant",
                "replicate": "0",
                "study": "study1"
            },
            "metadata": {}
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

        # bad data
        bad_api_data = {
            "data": {
                "name": "Plant 5",
                "accession": {
                    "instituteCode": "ESP004",
                    "germplasmNumber": "BGE0001"
                },
                "level": "plant",
                "replicate": "0"
            },
            "metadata": {}
        }
        response = self.client.post(list_url, data=bad_api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), ['study mandatory'])

        # adding agian should fail
        with transaction.atomic():
            response = self.client.post(list_url, data=api_data, format='json')
            self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        detail_url = reverse('observationunit-detail',
                             kwargs={"name": "Plant 5"})
        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
Exemplo n.º 19
0
    def test_view_readonly_with_fields(self):
        self.add_admin_credentials()
        detail_url = reverse('study-detail', kwargs={'name': 'study1'})
        response = self.client.get(detail_url, data={'fields': 'institute'})
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ['Passed fields are not allowed'])

        response = self.client.get(detail_url, data={'fields': 'name'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json()['data']['name'], 'study1')
        self.assertEqual(len(response.json()['data'].keys()), 1)

        response = self.client.get(detail_url,
                                   data={'fields': 'name,description,active'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json()['data']['name'], 'study1')
        self.assertEqual(response.json()['data']['description'],
                         'description1')
        self.assertEqual(len(response.json()['data'].keys()), 3)
Exemplo n.º 20
0
    def test_update(self):
        self.add_admin_credentials()
        detail_url = reverse('accessionset-detail',
                             kwargs={'institute_code': 'ESP004',
                                     'accessionset_number': 'NC001'})
        response = self.client.get(detail_url)
        accessionset = response.json()
        is_public = accessionset['metadata']['is_public']
        accessionset['metadata']['is_public'] = not is_public

        response = self.client.put(detail_url, data=accessionset, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json()['metadata']['is_public'], not is_public)

        accessionset = response.json()
        accessionset['data']['accessions'] = []
        response = self.client.put(detail_url, data=accessionset, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ["you are not allowed to change accessionsets's: accessions"])
Exemplo n.º 21
0
    def test_user_can_not_change_study(self):
        self.add_admin_credentials()
        response = self.client.get(reverse('observation-list'),
                                   data={'group': 'userGroup',
                                         'is_public': True})
        detail_id = response.json()[0]['observation_id']
        self.add_user_credentials()
        detail_url = reverse('observation-detail',
                             kwargs={'observation_id': detail_id})
        response = self.client.get(detail_url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        api_data = deepcopy(response.json())
        api_data['observation_unit'] = 'Plant 1'

        response = self.client.put(detail_url, data=api_data, format='json')

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(
            response.json(),
            ['Can not change observation unit because this is in a study you dont own: study1'])
Exemplo n.º 22
0
    def test_view_readonly_with_fields(self):
        self.add_admin_credentials()
        detail_url = reverse('accessionset-detail',
                             kwargs={'institute_code': 'ESP004',
                                     'accessionset_number': 'NC001'})
        response = self.client.get(detail_url, data={'fields': 'institute'})
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ['Passed fields are not allowed'])

        response = self.client.get(detail_url,
                                   data={'fields': 'instituteCode'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json()['data']['instituteCode'], 'ESP004')
        self.assertEqual(len(response.json()['data'].keys()), 1)

        response = self.client.get(
            detail_url,
            data={'fields': 'instituteCode,accessions,genera'})
        self.assertEqual(response.json()['data']['instituteCode'], 'ESP004')
        self.assertEqual(len(response.json()['data']['accessions']), 2)
        self.assertEqual(len(response.json()['data'].keys()), 3)
        self.assertEqual(response.json()['data']['genera'], ['Solanum'])
Exemplo n.º 23
0
    def test_update(self):
        self.add_admin_credentials()
        list_url = reverse('observation-list')
        response = self.client.get(list_url)
        api_data = response.json()[0]
        detail_url = reverse('observation-detail',
                             kwargs={'observation_id': api_data['observation_id']})

        api_data['observation_unit'] = 'Plant 2'

        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        result = response.json()
        self.assertEqual(result['observation_id'], api_data['observation_id'])
        self.assertEqual(result['value'], api_data['value'])
        self.assertEqual(result['observation_unit'], api_data['observation_unit'])
        api_data['observation_unit'] = 'non existant'

        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(
            response.json(),
            ['Observation unit non existant does not exist in db'])
Exemplo n.º 24
0
    def test_create_observation_unit_with_plant(self):
        api_data = {
            "data": {
                "name": "Plant 10",
                "accession": {
                    "instituteCode": "ESP004",
                    "germplasmNumber": "BGE0001"
                },
                "level": "plant",
                "replicate": "0",
                "study": "study3",
                "plants": ["Plant 1"]
            },
            "metadata": {}
        }

        self.add_user_credentials()
        list_url = reverse('observationunit-list')
        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(
            response.json(),
            ['Can not add plant you dont own to observation unit: Plant 1'])

        self.add_admin_credentials()
        list_url = reverse('observationunit-list')
        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

        api_data['data']['name'] = 'asa'
        api_data['data']['plants'] = ['asa']
        list_url = reverse('observationunit-list')
        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ['The given plant does not exist in asa : asa'])
Exemplo n.º 25
0
    def test_create(self):
        self.add_user_credentials()
        list_url = reverse('study-list')
        api_data = {
            'data': {
                'name': 'study9',
                'description': 'description9',
                'active': True
            },
            'metadata': {
                'group': 'admin',
                'is_public': True
            }
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        assert_error_is_equal(
            response.json(),
            ['can not set group or is public while creating the study'])
        api_data = {
            'data': {
                'name': 'study9',
                'description': 'description9',
                'active': True
            },
            'metadata': {}
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response.json()['metadata'], {
            'group': 'userGroup',
            'is_public': False
        })
Exemplo n.º 26
0
    def test_create_delete(self):

        list_url = reverse('institute-list')
        api_data = {'instituteCode': 'ESP005', 'name': 'test genebank'}

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)

        self.add_admin_credentials()
        api_data = {'instituteCode': 'ESP005', 'name': 'test genebank'}

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

        created_api_data = {
            'instituteCode': 'ESP005',
            'name': 'test genebank',
            'address': None,
            'city': None,
            'email': None,
            'manager': None,
            'phone': None,
            'type': None,
            'url': None,
            'zipcode': None,
            'collections': None
        }
        self.docs_are_equal(response.json(), created_api_data)

        # Sending corrupt data should fail and return proper error
        api_data = {'name': 'test genebank'}

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), ['instituteCode mandatory'])

        # create existing institute sholud fail and return proper error
        with transaction.atomic():
            api_data = {'instituteCode': 'ESP005', 'name': 'test genebank'}
            response = self.client.post(list_url, data=api_data, format='json')
            self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
            assert_error_is_equal(response.json(),
                                  ['ESP005 already exist in db'])

        # test delete
        detail_url = reverse('institute-detail', kwargs={'code': 'ESP005'})
        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

        # create with all fields
        self.add_admin_credentials()
        api_data = {
            'instituteCode': 'ESP005',
            'name': 'test genebank',
            'address': "rere",
            'city': "csdsds",
            'email': "*****@*****.**",
            'manager': "manager",
            'phone': "1231231231",
            'type': "Gobernamental",
            'url': 'http://test',
            'zipcode': '1121231',
            'collections': 'zea'
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

        self.docs_are_equal(response.json(), api_data)

        # Regular user operations
        # user can retrieve institutes
        self.remove_credentials()
        self.add_user_credentials()
        list_url = reverse('institute-list')
        response = self.client.get(list_url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        # user can't add new institutes
        self.remove_credentials()
        self.add_user_credentials()
        api_data = {'instituteCode': 'USER000', 'name': 'user genbank'}
        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

        # user can't delete institutes
        detail_url = reverse('institute-detail', kwargs={'code': 'ESP005'})
        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
Exemplo n.º 27
0
    def test_bulk_create(self):
        self.add_admin_credentials()
        list_url = reverse('accession-list')
        api_data = [
            {
                'data': {
                    'instituteCode': 'ESP004',
                    'germplasmNumber': 'BGE0006'
                },
                'metadata': {
                    'group': 'userGroup',
                    'is_public': True
                }
            },
            {
                'data': {
                    'instituteCode': 'ESP004',
                    'germplasmNumber': 'BGE0007'
                },
                'metadata': {
                    'group': 'userGroup',
                    'is_public': True
                }
            },
        ]
        response = self.client.post(list_url + 'bulk/',
                                    data=api_data,
                                    format='json')

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(), [
            'can not set group or is public while creating the accession',
            'can not set group or is public while creating the accession'
        ])
        # correct data
        api_data = [{
            'data': {
                'instituteCode': 'ESP004',
                'germplasmNumber': 'BGE0006'
            },
            'metadata': {}
        }, {
            'data': {
                'instituteCode': 'ESP004',
                'germplasmNumber': 'BGE0007'
            },
            'metadata': {}
        }]

        response = self.client.post(list_url + 'bulk/',
                                    data=api_data,
                                    format='json')

        assert_error_is_equal(response.json(), ['Successfully added 2 items'])
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(len(self.client.get(list_url).json()), 6)

        # Should fail, can not add again same item
        api_data = [{
            'data': {
                'instituteCode': 'ESP004',
                'germplasmNumber': 'BGE0006'
            },
            'metadata': {}
        }, {
            'data': {
                'instituteCode': 'ESP004',
                'germplasmNumber': 'BGE0007'
            },
            'metadata': {}
        }]

        response = self.client.post(list_url + 'bulk/',
                                    data=api_data,
                                    format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertEqual(len(response.json()[DETAIL]), 2)

        self.assertEqual(len(self.client.get(list_url).json()), 6)
Exemplo n.º 28
0
    def test_filter(self):
        self.add_admin_credentials()
        list_url = reverse('observation-list')
        response = self.client.get(list_url, data={'value_range_min': '11',
                                                   'value_range_max': '13',
                                                   'observation_variable': 'Plant size:cm'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 1)

        response = self.client.get(list_url, data={'value_range_min': '11',
                                                   'observation_variable': 'Plant size:cm'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 1)

        response = self.client.get(list_url, data={'value_range_max': '13',
                                                   'observation_variable': 'Plant size:cm'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 1)

        response = self.client.get(list_url, data={'value_range_max': '13'})
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(
            response.json(),
            ['Can not use value_range filter if not filtered by observation variable'])

        response = self.client.get(list_url, data={
            'value_range_max': '13',
            'observation_variable': 'Plant Growth type:categorical'})
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(
            response.json(),
            ["Used observation_variable's data type is not numeric"])

        response = self.client.get(list_url,
                                   data={'observation_unit': 'Plant 1'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 2)

        response = self.client.get(list_url,
                                   data={'observation_unit_contains': 'Plant'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 3)

        response = self.client.get(list_url,
                                   data={'group': 'userGroup'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 0)

        response = self.client.get(list_url,
                                   data={'group': 'admin'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 3)

        response = self.client.get(list_url,
                                   data={'study': 'study1'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 2)

        response = self.client.get(list_url,
                                   data={'study': 'Study1'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 2)

        response = self.client.get(list_url,
                                   data={'study_contains': 'study'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 3)

        response = self.client.get(list_url,
                                   data={'study_contains': 'study1111'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 0)

        response = self.client.get(list_url,
                                   data={'accession_number': 'BGE0001'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 2)

        response = self.client.get(list_url,
                                   data={'accession_institute': 'ESP004'})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.json()), 2)
Exemplo n.º 29
0
    def test_create_delete(self):
        self.add_admin_credentials()
        list_url = reverse('study-list')
        api_data = {
            'data': {
                'name': 'study3',
                'description': 'description3'
            },
            'metadata': {
                'group': 'admin',
                'is_public': True
            }
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(
            response.json(),
            ['can not set group or is public while creating the study'])

        api_data = {
            'data': {
                'name': 'study8',
                'description': 'description3'
            },
            'metadata': {}
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response.json()['data'], api_data['data'])

        api_data = {
            'data': {
                'name': 'study8',
                'description': 'description3'
            },
            'metadata': {}
        }
        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        assert_error_is_equal(response.json(),
                              ['This study already exists in db: study8'])

        with transaction.atomic():
            api_data = {
                'data': {
                    'name': 'study3',
                    'description': 'description3'
                },
                'metadata': {
                    'group': 'admin',
                    'is_public': True
                }
            }

            response = self.client.post(list_url, data=api_data, format='json')
            self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
            assert_error_is_equal(
                response.json(),
                ['can not set group or is public while creating the study'])

        detail_url = reverse('study-detail', kwargs={'name': 'study3'})
        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

        # acive false
        api_data = {
            'data': {
                'name': 'study9',
                'description': 'description3'
            },
            'metadata': {}
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response.json()['data'], api_data['data'])

        api_data = {
            'data': {
                'name': 'study99',
                'description': 'description3',
                'season': 'asads',
                'location': 'valencia',
                'institution': 'asdas'
            },
            'metadata': {}
        }

        response = self.client.post(list_url, data=api_data, format='json')

        detail_url = reverse('study-detail', kwargs={'name': 'study99'})
        response = self.client.get(detail_url)
        #         print(response.json())

        # full post
        api_data = {
            'data': {
                'name': 'study666',
                'description': 'description3',
                'season': 'asads',
                'location': 'valencia',
                'institution': 'asdas',
                "start_date": "2017/01/17",
                "end_date": "2017/12/01",
                "contacts": "Alguien"
            },
            'metadata': {}
        }

        response = self.client.post(list_url, data=api_data, format='json')

        detail_url = reverse('study-detail', kwargs={'name': 'study666'})
        response = self.client.get(detail_url)
        #         print(response.json())

        response = self.client.delete(detail_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

        # Dates should be valid
        api_data = {
            'data': {
                'name': 'study666',
                'description': 'description3',
                'season': 'asads',
                'location': 'valencia',
                'institution': 'asdas',
                "start_date": "Ayer",
                "end_date": "2017/12/01",
                "contacts": "Alguien"
            },
            'metadata': {}
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        api_data = {
            'data': {
                'name': 'study666',
                'description': 'description3',
                'season': 'asads',
                'location': 'valencia',
                'institution': 'asdas',
                "start_date": "2017/12/01",
                "end_date": "Mañana",
                "contacts": "Alguien"
            },
            'metadata': {}
        }

        response = self.client.post(list_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
Exemplo n.º 30
0
    def test_update(self):
        self.add_admin_credentials()
        detail_url = reverse('study-detail', kwargs={'name': 'study1'})
        api_data = {
            'data': {
                'name': 'study1',
                'description': 'description1'
            },
            'metadata': {
                'group': 'admin',
                'is_public': False
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(), api_data)
        api_data = {
            'data': {
                'name': 'study1',
                'description': 'description1'
            },
            'metadata': {
                'group': 'userGroup',
                'is_public': True
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(), api_data)

        # full data
        api_data = {
            'data': {
                'name': 'study1',
                'description': 'description1',
                'season': 'asads',
                'location': 'valencia',
                'institution': 'asdas',
                "start_date": "2017/01/17",
                "end_date": "2017/12/01",
                "contacts": "Alguien"
            },
            'metadata': {
                'group': 'userGroup',
                'is_public': True
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(), api_data)

        # Fail if wrong date format
        api_data['data']['start_date'] = 'ayer'
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        api_data['data']['start_date'] = '2017/01/17'
        api_data['data']['end_date'] = 'mañana'
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        # Fail changing group if not exists
        api_data = {
            'data': {
                'name': 'study1',
                'description': 'description1'
            },
            'metadata': {
                'group': 'rGroup',
                'is_public': True
            }
        }
        response = self.client.put(detail_url, data=api_data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        assert_error_is_equal(response.json(),
                              ['Provided group does not exist in db: rGroup'])