def test_nr_state_actions(): nr_model = Request() nr_model.expirationDate = datetime.utcnow() + timedelta(days=3) nr_model.priorityCd = None nr_model.priorityDate = None print('\n Draft state actions \n') print(repr(NameRequestDraftActions.list())) actions = get_nr_state_actions(State.DRAFT, nr_model) print(repr(actions)) print('\n Reserved state actions \n') print(repr(NameRequestReservedActions.list())) actions = get_nr_state_actions(State.RESERVED, nr_model) print(repr(actions)) print('\n Conditionally reserved state actions \n') print(repr(NameRequestReservedActions.list())) actions = get_nr_state_actions(State.COND_RESERVE, nr_model) print(repr(actions)) print('\n Conditional state actions \n') print(repr(NameRequestActiveActions.list())) actions = get_nr_state_actions(State.CONDITIONAL, nr_model) print(repr(actions)) print('\n Approved state actions \n') print(repr(NameRequestActiveActions.list())) actions = get_nr_state_actions(State.APPROVED, nr_model) print(repr(actions)) print('\n In Progress state actions \n') print(repr(NameRequestInProgressActions.list())) actions = get_nr_state_actions(State.INPROGRESS, nr_model) print(repr(actions)) print('\n Hold state actions \n') print(repr(NameRequestHoldActions.list())) actions = get_nr_state_actions(State.HOLD, nr_model) print(repr(actions)) print('\n Historical state actions \n') print(repr(NameRequestHistoricalActions.list())) actions = get_nr_state_actions(State.HISTORICAL, nr_model) print(repr(actions)) print('\n Cancelled state actions \n') print(repr(NameRequestCancelledActions.list())) actions = get_nr_state_actions(State.CANCELLED, nr_model) print(repr(actions)) print('\n Rejected state actions \n') print(repr(NameRequestActiveRejectedActions.list())) actions = get_nr_state_actions(State.REJECTED, nr_model) print(repr(actions))
async def test_update_payment_record( app, session, test_name, action_code, start_request_state, end_request_state, start_priority, end_priority, start_datetime, days_after_start_datetime, start_payment_state, end_payment_state, start_payment_date, end_payment_has_value, error): """Assert that the update_payment_record works as expected.""" from namex.models import Request, State, Payment from namex_pay.worker import update_payment_record print(test_name) now = datetime.utcnow() with freeze_time(now): # setup PAYMENT_TOKEN = 'dog' NR_NUMBER = 'NR B000001' name_request = Request() name_request.nrNum = NR_NUMBER name_request.stateCd = start_request_state name_request._source = 'NRO' name_request.expirationDate = start_datetime name_request.priorityCd = start_priority name_request.save_to_db() payment = Payment() payment.nrId = name_request.id payment._payment_token = PAYMENT_TOKEN payment._payment_status_code = start_payment_state payment.payment_action = action_code payment.furnished = False payment._payment_completion_date = start_payment_date payment.save_to_db() # run test if error: # expecting it to raise an error with pytest.raises(error): await update_payment_record(payment) else: # else it was processable if not (payment_final := await update_payment_record(payment)): payment_final = payment nr_final = Request.find_by_nr(NR_NUMBER) assert nr_final.stateCd == end_request_state assert nr_final.priorityCd == end_priority assert nr_final.expirationDate == ( start_datetime or now) + timedelta(days=days_after_start_datetime) assert eval( f'payment_final.payment_completion_date {end_payment_has_value} None' ) assert payment_final.payment_status_code == end_payment_state
def complete_upgrade_payment(self, nr_model: RequestDAO, payment_id: int): """ Invoked when upgrading an existing Name Request reservation to PRIORITY status. :param nr_model: :param payment_id: :return: """ nr_svc = self.nr_service if nr_model.stateCd not in [State.DRAFT, State.PENDING_PAYMENT]: raise PaymentServiceError( message= 'Error upgrading Name Request, request is in an invalid state!' ) # Update the state of the payment payment = get_active_payment(nr_model, payment_id) sbc_payment_response = get_payment(payment.payment_token) # TODO: Throw errors if this fails! if sbc_payment_response.statusCode in [ PaymentStatusCode.COMPLETED.value, PaymentStatusCode.APPROVED.value ]: payment.payment_status_code = sbc_payment_response.statusCode payment.payment_completion_date = sbc_payment_response.createdOn payment.save_to_db() nr_model.priorityCd = 'Y' nr_model.priorityDate = datetime.utcnow() # Save the name request nr_model.save_to_db() # This (optionally) handles the updates for NRO and Solr, if necessary update_solr = False nr_model = self.update_records_in_network_services( nr_model, update_solr) # Update the actions, as things change once the payment is successful self.nr_service.current_state_actions = get_nr_state_actions( nr_model.stateCd, nr_model) # Record the event EventRecorder.record(nr_svc.user, Event.PATCH + ' [payment completed] UPGRADE', nr_model, nr_model.json()) return nr_model
def save_name(submitted_date, nr_num, priority=False): from namex.models import Request as RequestDAO, State num = 0 global num_records nr_num_label = 'NR ' nr_num = nr_num_label + str(nr_num) nr = RequestDAO() nr.nrNum = nr_num nr.stateCd = State.DRAFT nr.priorityCd = 'Y' if priority else 'N' nr._source = 'NAMEREQUEST' nr.submittedDate = submitted_date nr.save_to_db()
def save_names_queue(queue_number_records, priority=False): from namex.models import Request as RequestDAO, State num = 0 global num_records while queue_number_records > num: nr_num_label = 'NR ' num_records += 1 num += 1 nr_num = nr_num_label + str(num_records) nr = RequestDAO() nr.nrNum = nr_num nr.stateCd = State.DRAFT nr.priorityCd = 'Y' if priority else 'N' nr._source = 'NAMEREQUEST' nr.save_to_db()
async def test_process_payment( app, session, mocker, test_name, action_code, start_request_state, start_priority, start_datetime, start_payment_state, start_payment_date, ): from namex.models import Request, State, Payment from namex_pay.worker import process_payment, FLASK_APP nest_asyncio.apply() # setup PAYMENT_TOKEN = 'dog' NR_NUMBER = 'NR B000001' name_request = Request() name_request.nrNum = NR_NUMBER name_request.stateCd = start_request_state name_request._source = 'NRO' name_request.expirationDate = start_datetime name_request.priorityCd = start_priority name_request.save_to_db() payment = Payment() payment.nrId = name_request.id payment._payment_token = PAYMENT_TOKEN payment._payment_status_code = start_payment_state payment.payment_action = action_code payment.furnished = False payment._payment_completion_date = start_payment_date payment.save_to_db() # setup mock and patch msg = None def catch(qsm, cloud_event_msg): nonlocal msg msg = cloud_event_msg mocker.patch('namex_pay.worker.publish_email_message', side_effect=catch) # Test pay_msg = { "paymentToken": { "id": PAYMENT_TOKEN, "statusCode": "COMPLETED", "filingIdentifier": None } } await process_payment(pay_msg, FLASK_APP) print(msg) # Verify message that would be sent to the email server assert msg['type'] == 'bc.registry.names.request' assert msg['source'] == '/requests/NR B000001' assert msg['datacontenttype'] == 'application/json' assert msg['identifier'] == 'NR B000001' assert msg['data']['request']['header']['nrNum'] == NR_NUMBER assert msg['data']['request']['paymentToken'] == PAYMENT_TOKEN assert msg['data']['request']['statusCode'] == 'DRAFT'