def test_create_project(self): with Transaction() as t: admin_repo = AdminRepo(t) with t.cursor() as cur: cur.execute("SELECT project " "FROM barcodes.project " "WHERE project = 'doesnotexist'") self.assertEqual(len(cur.fetchall()), 0) admin_repo.create_project('doesnotexist', True, False) cur.execute("SELECT project, is_microsetta, bank_samples, " "plating_start_date " "FROM barcodes.project " "WHERE project = 'doesnotexist'") obs = cur.fetchall() self.assertEqual(obs, [ ('doesnotexist', True, False, None), ]) plating_start_date = date(2020, 7, 31) admin_repo.create_project('doesnotexist2', False, True, plating_start_date) cur.execute("SELECT project, is_microsetta, bank_samples, " "plating_start_date " "FROM barcodes.project " "WHERE project = 'doesnotexist2'") obs = cur.fetchall() self.assertEqual(obs, [ ('doesnotexist2', False, True, plating_start_date), ])
def create_project(body, token_info): validate_admin_access(token_info) project_name = body['project_name'] is_microsetta = body['is_microsetta'] bank_samples = body['bank_samples'] plating_start_date = body.get('plating_start_date') if plating_start_date is not None: try: plating_start_date = datetime.datetime.strptime( plating_start_date, "%Y-%m-%d") except ValueError: raise BadRequest( "plating start date '{0}' is not a valid date in YYYY-MM-DD " "format".format(plating_start_date)) if len(project_name) == 0: return jsonify(code=400, message="No project name provided"), 400 if not bank_samples and plating_start_date is not None: raise RepoException("Plating start date cannot be set for" " unbanked projects") with Transaction() as t: admin_repo = AdminRepo(t) admin_repo.create_project(project_name, is_microsetta, bank_samples, plating_start_date) t.commit() return {}, 201
def create_project(body, token_info): validate_admin_access(token_info) project_name = body['project_name'] is_microsetta = body['is_microsetta'] if len(project_name) == 0: return jsonify(code=400, message="No project name provided"), 400 with Transaction() as t: admin_repo = AdminRepo(t) admin_repo.create_project(project_name, is_microsetta) t.commit() return {}, 201
def test_create_project_success_full(self): with Transaction() as t: admin_repo = AdminRepo(t) # Note: using dict_cursor here so results are DictRow # objects that can easily be converted to a dictionary with t.dict_cursor() as cur: cur.execute("SELECT project " "FROM barcodes.project " "WHERE project = 'full_test_proj'") self.assertEqual(len(cur.fetchall()), 0) full_project_dict = self._FULL_PROJECT_DICT.copy() full_project_dict[p.PROJ_NAME_KEY] = 'full_test_proj' input = p.Project.from_dict(full_project_dict) output_id = admin_repo.create_project(input) cur.execute("SELECT * " "FROM barcodes.project " "WHERE project = 'full_test_proj'") row = cur.fetchone() obs_dict = dict(row) full_project_dict["project_id"] = output_id full_project_dict[p.DB_PROJ_NAME_KEY] = \ full_project_dict.pop(p.PROJ_NAME_KEY) self.assertEqual(obs_dict, full_project_dict)
def test_update_project(self): with Transaction() as t: admin_repo = AdminRepo(t) proj_id = admin_repo.create_project( Project(project_name=DUMMY_PROJ_NAME, is_microsetta=False, bank_samples=False)) t.commit() # create post input json input_json = json.dumps(self.FULL_PROJ_INFO) # execute project put (update) response = self.client.put(f"/api/admin/projects/{proj_id}", content_type='application/json', data=input_json, headers=MOCK_HEADERS) # check response code self.assertEqual(204, response.status_code) with Transaction() as t: with t.dict_cursor() as cur: cur.execute( "select * FROM project " "WHERE " "project_id = %s", (proj_id, )) row = cur.fetchone() stored_result = dict(row) expected_result = self.FULL_PROJ_INFO.copy() expected_result["project"] = expected_result.pop("project_name") expected_result["project_id"] = proj_id self.assertEqual(expected_result, stored_result)
def test_create_project_success_banking(self): with Transaction() as t: admin_repo = AdminRepo(t) with t.cursor() as cur: plating_start = date(2020, 7, 31) minimal_proj_dict = {p.PROJ_NAME_KEY: 'doesnotexist2', p.IS_MICROSETTA_KEY: False, p.BANK_SAMPLES_KEY: True, p.PLATING_START_DATE_KEY: "2020-07-31"} input = p.Project.from_dict(minimal_proj_dict) admin_repo.create_project(input) cur.execute("SELECT project, is_microsetta, bank_samples, " "plating_start_date " "FROM barcodes.project " "WHERE project = 'doesnotexist2'") obs = cur.fetchall() self.assertEqual(obs, [('doesnotexist2', False, True, plating_start), ])
def test_create_project(self): with Transaction() as t: admin_repo = AdminRepo(t) with t.cursor() as cur: cur.execute("SELECT project " "FROM barcodes.project " "WHERE project = 'doesnotexist'") self.assertEqual(len(cur.fetchall()), 0) admin_repo.create_project('doesnotexist', True) cur.execute("SELECT project, is_microsetta " "FROM barcodes.project " "WHERE project = 'doesnotexist'") obs = cur.fetchall() self.assertEqual(obs, [('doesnotexist', True), ]) admin_repo.create_project('doesnotexist2', False) cur.execute("SELECT project, is_microsetta " "FROM barcodes.project " "WHERE project = 'doesnotexist2'") obs = cur.fetchall() self.assertEqual(obs, [('doesnotexist2', False), ])
def test_create_project_success_no_banking(self): with Transaction() as t: admin_repo = AdminRepo(t) with t.cursor() as cur: cur.execute("SELECT project " "FROM barcodes.project " "WHERE project = 'doesnotexist'") self.assertEqual(len(cur.fetchall()), 0) minimal_project_dict = {p.PROJ_NAME_KEY: 'doesnotexist', p.IS_MICROSETTA_KEY: True, p.BANK_SAMPLES_KEY: False} input = p.Project.from_dict(minimal_project_dict) admin_repo.create_project(input) cur.execute("SELECT project, is_microsetta, bank_samples, " "plating_start_date " "FROM barcodes.project " "WHERE project = 'doesnotexist'") obs = cur.fetchall() self.assertEqual(obs, [('doesnotexist', True, False, None), ])
def create_project(body, token_info): validate_admin_access(token_info) try: project = Project.from_dict(body) except ValueError as e: raise RepoException(e) with Transaction() as t: admin_repo = AdminRepo(t) proj_id = admin_repo.create_project(project) t.commit() response = Response() response.status_code = 201 response.headers['Location'] = '/api/admin/projects/%s' % (proj_id,) return response