Example #1
0
    def test_populate_dataset_select(self):
        
        d1 = Dataset(code=md.d1_code, name=md.d1_name, file_path=md.d1_file_path, query_params=md.d1_query_params)
        db.session.add(d1)
        
        d2 = Dataset(code=md.d2_code, name=md.d2_name, file_path=md.d2_file_path, query_params=md.d2_query_params)
        db.session.add(d2)
        
        dt1 = DatasetTracts(dataset_code=md.d1_code, method_code=md.m1_code, tract_code=md.t1_code)
        db.session.add(dt1)
        
        dt2 = DatasetTracts(dataset_code=md.d1_code, method_code=md.m2_code, tract_code=md.t1_code)
        db.session.add(dt2)
        
        dt3 = DatasetTracts(dataset_code=md.d2_code, method_code=md.m1_code, tract_code=md.t1_code)
        db.session.add(dt3)
        
        db.session.commit()

        # get response
        resp = self.client.get('/dataset_select')
        # test response
        assert resp.mimetype == 'application/json'
        data = json.loads(resp.get_data())
        assert isinstance(data, list)
        assert len(data) == 2
        assert isinstance(data[0], dict)
        assert data[0]['code'] == md.d1_code or data[1]['code'] == md.d1_code
        assert data[0]['code'] == md.d2_code or data[1]['code'] == md.d2_code
        assert len(data[0]['methods']) == 2 if data[0]['code'] == md.d1_code else len(data[0]['methods']) == 1
        assert len(data[1]['methods']) == 2 if data[0]['code'] != md.d1_code else len(data[1]['methods']) == 1
        assert bytes(md.d1_file_path, 'utf-8') not in resp.get_data()
        assert bytes(md.d2_file_path, 'utf-8') not in resp.get_data()
Example #2
0
 def insert_tract_test_data(self):
     s1 = Subject(subject_id=md.s1_subject_id,
                  gender=md.s1_gender,
                  age=md.s1_age,
                  handedness=md.s1_handedness,
                  edinburgh_handedness_raw=md.s1_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s1_ravens_iq_raw,
                  dataset_code=md.s1_dataset_code,
                  file_path=md.s1_file_path,
                  mmse=md.s1_mmse)
     db.session.add(s1)
     
     s2 = Subject(subject_id=md.s2_subject_id,
                  gender=md.s2_gender,
                  age=md.s2_age,
                  handedness=md.s2_handedness,
                  edinburgh_handedness_raw=md.s2_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s2_ravens_iq_raw,
                  dataset_code=md.s2_dataset_code,
                  file_path=md.s2_file_path,
                  mmse=md.s2_mmse)
     db.session.add(s2)
     
     s3 = Subject(subject_id=md.s3_subject_id,
                  gender=md.s3_gender,
                  age=md.s3_age,
                  handedness=md.s3_handedness,
                  edinburgh_handedness_raw=md.s3_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s3_ravens_iq_raw,
                  dataset_code=md.s3_dataset_code,
                  file_path=md.s3_file_path,
                  mmse=md.s3_mmse)
     db.session.add(s3)
     
     s4 = Subject(subject_id=md.s4_subject_id,
                  gender=md.s4_gender,
                  age=md.s4_age,
                  handedness=md.s4_handedness,
                  edinburgh_handedness_raw=md.s4_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s4_ravens_iq_raw,
                  dataset_code=md.s4_dataset_code,
                  file_path=md.s4_file_path,
                  mmse=md.s4_mmse)
     db.session.add(s4)
     
     d1 = Dataset(md.d1_code, md.d1_name, md.d1_file_path, md.d1_query_params)
     db.session.add(d1)
     
     t1 = Tract(md.t1_code, md.t1_name, md.t1_file_path, md.t1_description)
     db.session.add(t1)
     
     t2 = Tract(md.t2_code, md.t2_name, md.t2_file_path, md.t2_description)
     db.session.add(t2)
     
     db.session.commit()
Example #3
0
 def test_get_static_tract_info_no_subjects(self):
     ''' Test 404 returned when no subjects in query. '''
     
     s2 = Subject(subject_id=md.s2_subject_id,
                  gender=md.s2_gender,
                  age=md.s2_age,
                  handedness=md.s2_handedness,
                  edinburgh_handedness_raw=md.s2_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s2_ravens_iq_raw,
                  dataset_code=md.s2_dataset_code,
                  file_path=md.s2_file_path,
                  mmse=md.s2_mmse)
     db.session.add(s2)
     
     s4 = Subject(subject_id=md.s4_subject_id,
                  gender=md.s4_gender,
                  age=md.s4_age,
                  handedness=md.s4_handedness,
                  edinburgh_handedness_raw=md.s4_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s4_ravens_iq_raw,
                  dataset_code=md.s4_dataset_code,
                  file_path=md.s4_file_path,
                  mmse=md.s4_mmse)
     db.session.add(s4)
     
     d1 = Dataset(md.d1_code, md.d1_name, md.d1_file_path, md.d1_query_params)
     db.session.add(d1)
     
     t1 = Tract(md.t1_code, md.t1_name, md.t1_file_path, md.t1_description)
     db.session.add(t1)
     
     t2 = Tract(md.t2_code, md.t2_name, md.t2_file_path, md.t2_description)
     db.session.add(t2)
     
     db.session.commit()
     
     resp = self.client.get(f'/get_tract_info/{md.t1_code}?{md.brc_atlas_males_query}')
     self.assert404(resp)
Example #4
0
 def test_get_tract_no_subjects(self):
     ''' Test behaviour when there are no subjects returned by the selected query. '''
     s2 = Subject(subject_id=md.s2_subject_id,
                  gender=md.s2_gender,
                  age=md.s2_age,
                  handedness=md.s2_handedness,
                  edinburgh_handedness_raw=md.s2_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s2_ravens_iq_raw,
                  dataset_code=md.s2_dataset_code,
                  file_path=md.s2_file_path,
                  mmse=md.s2_mmse)
     db.session.add(s2)
     
     s4 = Subject(subject_id=md.s4_subject_id,
                  gender=md.s4_gender,
                  age=md.s4_age,
                  handedness=md.s4_handedness,
                  edinburgh_handedness_raw=md.s4_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s4_ravens_iq_raw,
                  dataset_code=md.s4_dataset_code,
                  file_path=md.s4_file_path,
                  mmse=md.s4_mmse)
     db.session.add(s4)
     
     d1 = Dataset(md.d1_code, md.d1_name, md.d1_file_path, md.d1_query_params)
     db.session.add(d1)
     
     t1 = Tract(md.t1_code, md.t1_name, md.t1_file_path, md.t1_description)
     db.session.add(t1)
     
     t2 = Tract(md.t2_code, md.t2_name, md.t2_file_path, md.t2_description)
     db.session.add(t2)
     
     db.session.commit()
     
     resp = self.tract_test_response(md.t1_code, md.brc_atlas_males_query)
     
     self.assert404(resp)
Example #5
0
def modify_datasets():
    # get auth header and split to get the token string
    auth_header = request.headers.get('Authorization')
    auth_token = auth_header.split(" ")[1] if auth_header else ''
    
    if auth_token:
        # if auth token sent, deocde to get user id
        user_id = User.decode_auth_token(auth_token)
        # get user from database
        # is it necessary to check the user id exists in the database?
        # or is it sufficient that the token could be decoded using our secret key?
        # its useful to have the user name for logging purposes anyway 
        user = User.query.filter(User.user_id == user_id).first()
        
        if user:
            if request.method == 'GET':
                try:
                    datasets = Dataset.query.all()
                    response_object = {
                        'message': 'Successfully retrieved dataset records',
                        'datasets': datasets
                    }
                    current_app.logger.info(f'User {user.user_name} retrieved all dataset records.')
                    return make_response(jsonify(response_object)), 200
                except Exception as e:
                    current_app.logger.error(f'Error occurred while user "{user.user_name}" was attempting to get all dataset records.')
                    current_app.logger.error(e)
                    return 'An error occurred while getting datasets.', 500
                
            elif request.method == 'POST':
                form = request.form
                try:
                    dataset = Dataset(form['code'], form['name'], form['filePath'], form['queryParams'])
                    db.session.add(dataset)
                    db.session.commit()
                    current_app.logger.info(f'User "{user.user_name}" inserted a new dataset with code "{dataset.code}"')
                    return 'New dataset successfully created.', 201
                except Exception as e:
                    db.session.rollback()
                    current_app.logger.error(f'Error occurred while user "{user.user_name}" was attempting to insert dataset.')
                    current_app.logger.error(e)
                    return 'An error occurred while creating a dataset record.', 500
                
            elif request.method == 'PUT':
                form = request.form
                try:
                    dataset = Dataset.query.filter(Dataset.code == form['code']).first()
                    if dataset:
                        dataset.name = form['name']
                        dataset.file_path = form['filePath']
                        dataset.query_params = form['queryParams']
                        db.session.commit()
                        current_app.logger.info(f'User {user.user_name} updated dataset {dataset.code}.')
                        return 'Dataset successfully updated.', 200
                    else:
                        raise Exception('Can\'t update dataset that doesn\'t exist.')
                except Exception as e:
                    db.session.rollback()
                    current_app.logger.error(f'Error occurred while user {user.user_name} was attempting to update dataset {dataset}.')
                    current_app.logger.error(e)
                    return 'An error occurred while updating dataset.', 500
            
            elif request.method == 'DELETE':
                code = request.args['code']
                if code:
                    try:
                        dataset = Dataset.query.filter(Dataset.code == code).first()
                        if dataset:
                            Dataset.query.filter(Dataset.code == code).delete()
                            db.session.commit()
                        else:
                            raise Exception(f'Cannot delete dataset with code "{code}" since a record doesn\'t exist.')
                        current_app.logger.info(f'User {user.user_name} deleted dataset {code}.')
                        return 'Dataset successfully deleted.', 200
                    except Exception as e:
                        db.session.rollback()
                        current_app.logger.error(f'Error occurred while user {user.user_name} was attempting to delete dataset with code {code}.')
                        current_app.logger.error(e)
                        return 'An error occurred while deleting dataset.', 500
                else:
                    current_app.logger.warn('No code sent with dataset DELETE request')
                    return 'No dataset code was sent with DELETE request.', 400
         
        else:
            current_app.logger.warn(f'No user with id "{user_id}" found in database.')
            return 'Invalid user id passed with authentication token', 401
    else:
        current_app.logger.warn('No authentication token sent with request to /datasets')
        return 'No authentication token sent with request.', 401
Example #6
0
 def test_subject_id_dataset_file_path(self):
     # insert 2 test datasets
     dataset1 = Dataset(code=DatabaseUtilsTestCase.dataset1_code,
                       name=DatabaseUtilsTestCase.dataset1_name,
                       file_path=DatabaseUtilsTestCase.dataset1_file_path,
                       query_params=DatabaseUtilsTestCase.dataset1_query_params)
     db.session.add(dataset1)
     dataset2 = Dataset(code=DatabaseUtilsTestCase.dataset2_code,
                       name=DatabaseUtilsTestCase.dataset2_name,
                       file_path=DatabaseUtilsTestCase.dataset2_file_path,
                       query_params=DatabaseUtilsTestCase.dataset2_query_params)
     db.session.add(dataset2)
     # insert subjects
     sbjct1 = Subject(subject_id=DatabaseUtilsTestCase.sbjct1_subject_id,
                      gender=DatabaseUtilsTestCase.sbjct1_gender,
                      age=DatabaseUtilsTestCase.sbjct1_age,
                      handedness=DatabaseUtilsTestCase.sbjct1_handedness,
                      edinburgh_handedness_raw=DatabaseUtilsTestCase.sbjct1_edinburgh_handedness_raw,
                      ravens_iq_raw=DatabaseUtilsTestCase.sbjct1_ravens_iq_raw,
                      dataset_code=DatabaseUtilsTestCase.sbjct1_dataset_code,
                      file_path=DatabaseUtilsTestCase.sbjct1_file_path,
                      mmse=DatabaseUtilsTestCase.sbjct1_mmse)
     db.session.add(sbjct1)
     sbjct2 = Subject(subject_id=DatabaseUtilsTestCase.sbjct2_subject_id,
                      gender=DatabaseUtilsTestCase.sbjct2_gender,
                      age=DatabaseUtilsTestCase.sbjct2_age,
                      handedness=DatabaseUtilsTestCase.sbjct2_handedness,
                      edinburgh_handedness_raw=DatabaseUtilsTestCase.sbjct2_edinburgh_handedness_raw,
                      ravens_iq_raw=DatabaseUtilsTestCase.sbjct2_ravens_iq_raw,
                      dataset_code=DatabaseUtilsTestCase.sbjct2_dataset_code,
                      file_path=DatabaseUtilsTestCase.sbjct2_file_path,
                      mmse=DatabaseUtilsTestCase.sbjct2_mmse)
     db.session.add(sbjct2)
     sbjct3 = Subject(subject_id=DatabaseUtilsTestCase.sbjct3_subject_id,
                      gender=DatabaseUtilsTestCase.sbjct3_gender,
                      age=DatabaseUtilsTestCase.sbjct3_age,
                      handedness=DatabaseUtilsTestCase.sbjct3_handedness,
                      edinburgh_handedness_raw=DatabaseUtilsTestCase.sbjct3_edinburgh_handedness_raw,
                      ravens_iq_raw=DatabaseUtilsTestCase.sbjct3_ravens_iq_raw,
                      dataset_code=DatabaseUtilsTestCase.sbjct3_dataset_code,
                      file_path=DatabaseUtilsTestCase.sbjct3_file_path,
                      mmse=DatabaseUtilsTestCase.sbjct3_mmse)
     db.session.add(sbjct3)
     sbjct4 = Subject(subject_id=DatabaseUtilsTestCase.sbjct4_subject_id,
                      gender=DatabaseUtilsTestCase.sbjct4_gender,
                      age=DatabaseUtilsTestCase.sbjct4_age,
                      handedness=DatabaseUtilsTestCase.sbjct4_handedness,
                      edinburgh_handedness_raw=DatabaseUtilsTestCase.sbjct4_edinburgh_handedness_raw,
                      ravens_iq_raw=DatabaseUtilsTestCase.sbjct4_ravens_iq_raw,
                      dataset_code=DatabaseUtilsTestCase.sbjct4_dataset_code,
                      file_path=DatabaseUtilsTestCase.sbjct4_file_path,
                      mmse=DatabaseUtilsTestCase.sbjct4_mmse)
     db.session.add(sbjct4)
     db.session.commit()
     
     test_query = {
                     "TESTDATASET1": {
                                 "method": "DTI",
                                 "constraints": {
                                                 "handedness": {"type": "checkbox", "values": ["R","L"]}
                                                 }
                                 },
                     "TESTDATASET2": {
                                 "method": "DTI",
                                 "constraints": {
                                                 "handedness": {"type": "checkbox", "values": ["R","L"]}
                                                 }
                                 
                                 }
                   }
     
     result = dbu.subject_id_dataset_file_path(test_query)
     assert len(result) == 4
     sorted_result = sorted(result, key=lambda subject: subject[0])
     assert sorted_result[0][0] == DatabaseUtilsTestCase.sbjct1_subject_id
     assert sorted_result[0][1] == DatabaseUtilsTestCase.dataset1_file_path
     assert sorted_result[1][0] == DatabaseUtilsTestCase.sbjct2_subject_id
     assert sorted_result[1][1] == DatabaseUtilsTestCase.dataset1_file_path
     assert sorted_result[2][0] == DatabaseUtilsTestCase.sbjct3_subject_id
     assert sorted_result[2][1] == DatabaseUtilsTestCase.dataset1_file_path
     assert sorted_result[3][0] == DatabaseUtilsTestCase.sbjct4_subject_id
     assert sorted_result[3][1] == DatabaseUtilsTestCase.dataset2_file_path
Example #7
0
 def test_get_tract_select_info(self):
     
     # insert 2 test tracts
     tract1 = Tract(code=DatabaseUtilsTestCase.tract1_code,
                    name=DatabaseUtilsTestCase.tract1_name,
                    file_path=DatabaseUtilsTestCase.tract1_file_path,
                    description=DatabaseUtilsTestCase.tract1_description)
     db.session.add(tract1)
     
     tract2 = Tract(code=DatabaseUtilsTestCase.tract2_code,
                    name=DatabaseUtilsTestCase.tract2_name,
                    file_path=DatabaseUtilsTestCase.tract2_file_path,
                    description=DatabaseUtilsTestCase.tract2_description)
     db.session.add(tract2)
     
     # insert 2 test datasets
     
     dataset1 = Dataset(code=DatabaseUtilsTestCase.dataset1_code,
                       name=DatabaseUtilsTestCase.dataset1_name,
                       file_path=DatabaseUtilsTestCase.dataset1_file_path,
                       query_params=DatabaseUtilsTestCase.dataset1_query_params)
     db.session.add(dataset1)
     dataset2 = Dataset(code=DatabaseUtilsTestCase.dataset2_code,
                       name=DatabaseUtilsTestCase.dataset2_name,
                       file_path=DatabaseUtilsTestCase.dataset2_file_path,
                       query_params=DatabaseUtilsTestCase.dataset2_query_params)
     db.session.add(dataset2)
     
     # insert records linking 2 of the tracts to the datasets into dataset_tracts
     
     datrac1 = DatasetTracts(dataset_code=DatabaseUtilsTestCase.dataset1_code,
                            tract_code=DatabaseUtilsTestCase.tract1_code,
                            method_code=DatabaseUtilsTestCase.method1_code)
     db.session.add(datrac1)
     datrac2 = DatasetTracts(dataset_code=DatabaseUtilsTestCase.dataset1_code,
                            tract_code=DatabaseUtilsTestCase.tract2_code,
                            method_code=DatabaseUtilsTestCase.method1_code)
     db.session.add(datrac2)
     
     datrac3 = DatasetTracts(dataset_code=DatabaseUtilsTestCase.dataset2_code,
                            tract_code=DatabaseUtilsTestCase.tract1_code,
                            method_code=DatabaseUtilsTestCase.method1_code)
     db.session.add(datrac3)
     
     db.session.commit()
     
     # test no ignored tracts
     result, ignored_tracts = dbu.get_tract_select_info()
     assert len(result.keys()) == 2
     assert len(ignored_tracts) == 0
     assert DatabaseUtilsTestCase.tract1_code in result.keys()
     assert DatabaseUtilsTestCase.tract2_code in result.keys()
     tract1_info = result[DatabaseUtilsTestCase.tract1_code]
     tract2_info = result[DatabaseUtilsTestCase.tract2_code]
     assert tract1_info['name'] == DatabaseUtilsTestCase.tract1_name
     assert tract1_info['description'] == DatabaseUtilsTestCase.tract1_description
     assert len(tract1_info['datasets']) == 2
     assert tract2_info['name'] == DatabaseUtilsTestCase.tract2_name
     assert tract2_info['description'] == DatabaseUtilsTestCase.tract2_description
     assert len(tract2_info['datasets']) == 1
     
     # test ignored tracts
     tract3 = Tract(code=DatabaseUtilsTestCase.tract3_code,
                    name=DatabaseUtilsTestCase.tract3_name,
                    file_path=DatabaseUtilsTestCase.tract3_file_path,
                    description=DatabaseUtilsTestCase.tract3_description)
     db.session.add(tract3)
     db.session.commit()
     
     result, ignored_tracts = dbu.get_tract_select_info()
     assert len(result.keys()) == 2
     assert len(ignored_tracts) == 1
     assert ignored_tracts[0] == DatabaseUtilsTestCase.tract3_code
Example #8
0
 def test_get_dataset_select_info(self):
     # insert 2 test datasets
     
     dataset1 = Dataset(code=DatabaseUtilsTestCase.dataset1_code,
                       name=DatabaseUtilsTestCase.dataset1_name,
                       file_path=DatabaseUtilsTestCase.dataset1_file_path,
                       query_params=DatabaseUtilsTestCase.dataset1_query_params)
     db.session.add(dataset1)
     
     dataset2 = Dataset(code=DatabaseUtilsTestCase.dataset2_code,
                       name=DatabaseUtilsTestCase.dataset2_name,
                       file_path=DatabaseUtilsTestCase.dataset2_file_path,
                       query_params=DatabaseUtilsTestCase.dataset2_query_params)
     db.session.add(dataset2)
     
     method1 = Method(code=DatabaseUtilsTestCase.method1_code,
                      name=DatabaseUtilsTestCase.method1_name,
                      description=DatabaseUtilsTestCase.method1_description)
     db.session.add(method1)
     
     method2 = Method(code=DatabaseUtilsTestCase.method2_code,
                      name=DatabaseUtilsTestCase.method2_name,
                      description=DatabaseUtilsTestCase.method2_description)
     db.session.add(method2)
     
     dataset_tracts1 = DatasetTracts(dataset_code=DatabaseUtilsTestCase.dataset1_code,
                                  method_code=DatabaseUtilsTestCase.method1_code,
                                  tract_code=DatabaseUtilsTestCase.tract1_code)
     db.session.add(dataset_tracts1)
     
     dataset_tracts2 = DatasetTracts(dataset_code=DatabaseUtilsTestCase.dataset1_code,
                                  method_code=DatabaseUtilsTestCase.method2_code,
                                  tract_code=DatabaseUtilsTestCase.tract1_code)
     db.session.add(dataset_tracts2)
     
     dataset_tracts3 = DatasetTracts(dataset_code=DatabaseUtilsTestCase.dataset2_code,
                                  method_code=DatabaseUtilsTestCase.method1_code,
                                  tract_code=DatabaseUtilsTestCase.tract1_code)
     db.session.add(dataset_tracts3)
     
     dataset_tracts4 = DatasetTracts(dataset_code=DatabaseUtilsTestCase.dataset2_code,
                                  method_code=DatabaseUtilsTestCase.method1_code,
                                  tract_code=DatabaseUtilsTestCase.tract2_code)
     db.session.add(dataset_tracts4)
     
     db.session.commit()
     
     dataset_codes = set([DatabaseUtilsTestCase.dataset1_code, DatabaseUtilsTestCase.dataset2_code])
     method_codes = set([DatabaseUtilsTestCase.method1_code, DatabaseUtilsTestCase.method2_code])
     
     datasets = dbu.get_dataset_select_info()
     
     assert len(datasets) == 2
     assert datasets[0]['code'] in dataset_codes
     assert datasets[1]['code'] in dataset_codes.symmetric_difference([datasets[0]['code']])
     
     for dataset in datasets:
         if dataset['code'] == DatabaseUtilsTestCase.dataset1_code:
             assert len(dataset['methods']) == 2
             assert dataset['methods'][0] in method_codes
             assert dataset['methods'][1] in method_codes.symmetric_difference([dataset['methods'][0]])
         else:
             assert len(dataset['methods']) == 1
             assert dataset['methods'][0] == DatabaseUtilsTestCase.method1_code
Example #9
0
 def test_generate_mean_maps(self):
     s1 = Subject(subject_id=md.s1_subject_id,
                  gender=md.s1_gender,
                  age=md.s1_age,
                  handedness=md.s1_handedness,
                  edinburgh_handedness_raw=md.s1_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s1_ravens_iq_raw,
                  dataset_code=md.s1_dataset_code,
                  file_path=md.s1_file_path,
                  mmse=md.s1_mmse)
     db.session.add(s1)
     
     s2 = Subject(subject_id=md.s2_subject_id,
                  gender=md.s2_gender,
                  age=md.s2_age,
                  handedness=md.s2_handedness,
                  edinburgh_handedness_raw=md.s2_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s2_ravens_iq_raw,
                  dataset_code=md.s2_dataset_code,
                  file_path=md.s2_file_path,
                  mmse=md.s2_mmse)
     db.session.add(s2)
     
     s3 = Subject(subject_id=md.s3_subject_id,
                  gender=md.s3_gender,
                  age=md.s3_age,
                  handedness=md.s3_handedness,
                  edinburgh_handedness_raw=md.s3_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s3_ravens_iq_raw,
                  dataset_code=md.s3_dataset_code,
                  file_path=md.s3_file_path,
                  mmse=md.s3_mmse)
     db.session.add(s3)
     
     s4 = Subject(subject_id=md.s4_subject_id,
                  gender=md.s4_gender,
                  age=md.s4_age,
                  handedness=md.s4_handedness,
                  edinburgh_handedness_raw=md.s4_edinburgh_handedness_raw,
                  ravens_iq_raw=md.s4_ravens_iq_raw,
                  dataset_code=md.s4_dataset_code,
                  file_path=md.s4_file_path,
                  mmse=md.s4_mmse)
     db.session.add(s4)
     
     d1 = Dataset(code=md.d1_code, name=md.d1_name, file_path=md.d1_file_path, query_params=md.d1_query_params)
     db.session.add(d1)
     
     d2 = Dataset(code=md.d2_code, name=md.d2_name, file_path=md.d2_file_path, query_params=md.d1_query_params)
     db.session.add(d2)
     
     db.session.commit()
     
     self.saved_file_path = ''
     self.saved_img = None
     
     def nib_save_patch(img, file_path):
         self.saved_file_path = file_path
         self.saved_img = img
         data = img.get_data()
         assert np.all(data == 1.)
     
     def nib_load_patch(file_path):
         if du.TEMPLATE_FILE_NAME in file_path:
             return md.template_nifti
         elif md.s1_subject_id in file_path:
             return md.s1_MD if 'MD' in file_path else md.s1_FA
         elif md.s3_subject_id in file_path:
             return md.s3_MD if 'MD' in file_path else md.s3_FA
         else:
             print('Unexpected file path passed to nib_load_path in test_views.test_generate_maps')
             print(file_path)
             return
         
     # assert the cache is empty for query string before response
     assert not current_app.cache.get(md.brc_atlas_males_query)
     
     # first request
     with monkey_patch(du.nib, 'save', nib_save_patch):
         with monkey_patch(du.nib, 'load', nib_load_patch):
             resp = self.client.get(f'/generate_mean_maps?{md.brc_atlas_males_query}')
     
     self.assertStatus(resp, 204)
     assert current_app.cache.get(md.brc_atlas_males_query) # check data has been cached