def _create_daklapack_order(order_dict): order_dict[ORDER_ID_KEY] = str(uuid.uuid4()) with Transaction() as t: try: daklapack_order = DaklapackOrder.from_api(**order_dict) except ValueError as e: raise RepoException(e) # The Daklapack API wants a *list* of orders, and we are submitting one # at a time, so we have a list of one item :) post_response = post_daklapack_orders( [daklapack_order.order_structure]) if post_response.status_code >= 400: # for now, very basic error handling--just pass on dak api error response_msg = {"order_address": daklapack_order.order_structure[ADDR_DICT_KEY], "order_success": False, "daklapack_api_error_msg": post_response.get_data(as_text=True), "daklapack_api_error_code": post_response.status_code} return response_msg # write order to db admin_repo = AdminRepo(t) order_id = admin_repo.create_daklapack_order(daklapack_order) t.commit() status_msg = {"order_address": daklapack_order.order_structure[ADDR_DICT_KEY], "order_success": True, "order_id": order_id} return status_msg
def test_create_daklapack_order(self): with Transaction() as t: # need a valid submitter id from the account table to input with t.dict_cursor() as cur: cur.execute("SELECT id, first_name, last_name " "FROM ag.account " "WHERE account_type = 'admin' " "ORDER BY id " "LIMIT 1;") submitter_record = cur.fetchone() submitter_id = submitter_record[0] submitter_name = f"{submitter_record[1]} " \ f"{submitter_record[2]}" # need real project ids to show can link order to project cur.execute("SELECT project_id " "FROM barcodes.project " "ORDER BY project_id " "LIMIT 2;") project_id_records = cur.fetchall() project_ids = [x[0] for x in project_id_records] order_struct = { 'orderId': '7ed917ef-0c4d-431a-9aa0-0a1f4f41f44b', 'articles': [ { 'articleCode': '350102', 'addresses': [ { 'firstName': 'Jane', 'lastName': 'Doe', 'address1': '123 Main St', 'insertion': 'Apt 2', 'address2': '', 'postalCode': 92210, 'city': 'San Diego', 'state': 'CA', 'country': 'USA', 'countryCode': 'us', 'phone': '(858) 555-1212', 'creationDate': '2020-10-09T22:43:52.219328Z', 'companyName': submitter_name }, { 'firstName': 'Tom', 'lastName': 'Thumb', 'address1': '29 Side St', 'insertion': '', 'address2': 'Kew Gardens', 'postalCode': 'KG7-448', 'city': 'Gananoque', 'state': 'Ontario', 'country': 'Canada', 'countryCode': 'ca', 'phone': '(858) 555-1212', 'creationDate': '2020-10-09T22:43:52.219350Z', 'companyName': submitter_name } ] } ], 'shippingProvider': 'FedEx', 'shippingType': 'FEDEX_2_DAY', 'shippingProviderMetadata': [ {'key': 'Reference 1', 'value': 'Bill Ted'} ] } acct_repo = AccountRepo(t) submitter_acct = acct_repo.get_account(submitter_id) input_id = '7ed917ef-0c4d-431a-9aa0-0a1f4f41f44b' creation_timestamp = dateutil.parser.isoparse( "2020-10-09T22:43:52.219328Z") last_polling_timestamp = dateutil.parser.isoparse( "2020-10-19T12:40:19.219328Z") desc = "a description" hold_msg = "hold this order" last_status = "accepted" # create dummy daklapack order object input = DaklapackOrder(input_id, submitter_acct, list(project_ids), order_struct, desc, hold_msg, creation_timestamp, last_polling_timestamp, last_status) # call create_daklapack_order admin_repo = AdminRepo(t) returned_id = admin_repo.create_daklapack_order(input) self.assertEqual(input_id, returned_id) expected_record = [input_id, submitter_id, desc, hold_msg, order_struct, creation_timestamp, last_polling_timestamp, last_status] # check db to show new records exist with t.dict_cursor() as cur: # need real project ids to show can link order to project cur.execute("SELECT * " "FROM barcodes.daklapack_order " "WHERE dak_order_id = %s", (input_id, )) curr_records = cur.fetchall() self.assertEqual(len(curr_records), 1) self.assertEqual(expected_record, curr_records[0]) cur.execute("SELECT project_id " "FROM barcodes.daklapack_order_to_project " "WHERE dak_order_id = %s", (input_id, )) curr_proj_records = cur.fetchall() self.assertEqual(len(curr_proj_records), 2) for curr_proj_rec in curr_proj_records: self.assertTrue(curr_proj_rec[0] in project_ids)