def test_get_next_oldest(client, jwt, app): # add NR to database from namex.models import Request as RequestDAO, State nr = RequestDAO() nr.nrNum = 'NR 0000001' nr.stateCd = State.DRAFT nr._source = 'NRO' nr.save_to_db() for i in range(2, 12): nr = RequestDAO() nr.nrNum = 'NR {0:07d}'.format(i) nr.stateCd = State.DRAFT nr._source = 'NRO' nr.save_to_db() # create JWT & setup header with a Bearer Token using the JWT token = jwt.create_jwt(claims, token_header) headers = {'Authorization': 'Bearer ' + token} # The message expected to be returned json_msg = jsonify(nameRequest='NR 0000001') # get the resource (this is the test) rv = client.get('/api/v1/requests/queues/@me/oldest', headers=headers) assert b'"nameRequest": "NR 0000001"' in rv.data
def test_get_queued_oldest_multirow(client, app): # add NR to database from namex.models import Request as RequestDAO, State, User nr_first = RequestDAO() nr_first.nrNum = 'NR 0000001' nr_first.stateCd = State.DRAFT nr_first.save_to_db() for i in range(2, 12): nr = RequestDAO() nr.nrNum = 'NR {0:07d}'.format(i) nr.stateCd = State.DRAFT nr.save_to_db() user = User(username='******', firstname='first', lastname='last', sub='idir/funcmunk', iss='keycloak') user.save_to_db() nr_oldest, new_req = RequestDAO.get_queued_oldest(user) # Tests #### assert nr_first.nrNum == nr_oldest.nrNum assert nr_oldest.json()
def test_full_access_to_name_request(test_name, \ name_request_number, temp_request_number, user_email, user_phone, \ header_name_request_number, header_temp_request_number, header_user_email, header_user_phone, \ expected): """Assure that this contains the headers required to fully access an NR.""" from namex.utils.auth import full_access_to_name_request # setup nr = RequestDAO() nr.nrNum = name_request_number or temp_request_number nr.stateCd = State.DRAFT nr._source = ValidSources.NAMEREQUEST.value applicant = Applicant() applicant.phoneNumber = user_phone applicant.emailAddress = user_email nr.applicants.append(applicant) nr.save_to_db() builder = EnvironBuilder(method='POST', data={}, headers={ 'BCREG_NR': header_name_request_number, 'BCREG_NRL': header_temp_request_number, 'BCREG-User-Email': header_user_email, 'BCREG-User-Phone': header_user_phone }) env = builder.get_environ() req = Request(env) print(req) assert expected == full_access_to_name_request(req)
def build_draft(data=None, test_names=None, generate_id_seq=None): try: nr = RequestDAO() # Set defaults, if these exist in the provided data they will be overwritten nr.stateCd = State.DRAFT nr.requestId = 1460775 nr._source = 'NRO' if not data: data = {} # Map the data, if provided for key, value in data.items(): # Don't set list attrs, they have to be set separately to handle sequences if hasattr(nr, key) and not isinstance(data.get(key), list): nr.__setattr__(key, value) nr.names = [] for test_name in test_names: nr.names.append(build_name(test_name, generate_id_seq)) return nr except Exception as err: print(repr(err))
def build_rejected(data=None, test_names=None, generate_id_seq=None): """ :param data: :param test_names: :param generate_id_seq: :return: """ nr = RequestDAO() # Set defaults, if these exist in the provided data they will be overwritten nr.stateCd = State.REJECTED nr.requestId = 1460775 nr._source = 'NRO' if not data: data = {} # Map the data, if provided for key, value in data.items(): # Don't set list attrs, they have to be set separately to handle sequences if hasattr(nr, key) and not isinstance(data.get(key), list): nr.__setattr__(key, value) nr.names = [] for test_name in test_names: nr.names.append(build_name(test_name, generate_id_seq)) return nr
def test_name_search_populated_by_name(): """Tests changing a name updates the nameSearch column.""" from namex.models import Name, Request as RequestDAO, State name = Name() name.choice = 1 name.name = 'TEST' name.state = 'NE' nr = RequestDAO() nr.nrNum = 'NR 0000001' nr.stateCd = State.DRAFT nr.names.append(name) nr.save_to_db() test = RequestDAO.find_by_id(nr.id) # sanity check names = test.names.all() assert len(names) == 1 assert names[0].name == 'TEST' # check nameSearch assert nr.nameSearch == '|1TEST1|' # alter name name.name = 'CHANGED' name.save_to_db() # check nameSearch assert nr.nameSearch == '|1CHANGED1|'
def test_reopen_event_history(client, jwt, app): from namex.models import Request as RequestDAO, State, Name as NameDAO, User, Event from namex.services import EventRecorder # add a user for the comment user = User('test-user', '', '', '43e6a245-0bf7-4ccf-9bd0-e7fb85fd18cc', 'https://sso-dev.pathfinder.gov.bc.ca/auth/realms/sbc') user.save_to_db() headers = create_header(jwt, [User.EDITOR]) nr = RequestDAO() nr.nrNum = 'NR 0000002' nr.stateCd = State.REJECTED nr.requestId = 1460775 nr._source = 'NRO' name1 = NameDAO() name1.choice = 1 name1.name = 'TEST NAME ONE' nr.names = [name1] nr.save_to_db() EventRecorder.record(user, Event.PATCH, nr, {}) nr.stateCd = State.INPROGRESS EventRecorder.record(user, Event.PUT, nr, { "additional": "additional", "furnished": "N" }) # get the resource (this is the test) rv = client.get('/api/v1/events/NR%200000002', headers=headers) assert rv.status_code == 200 assert b'"user_action": "Re-Open"' in rv.data
def test_comment_where_no_user(client, jwt, app): from namex.models import Request as RequestDAO, State, Name as NameDAO, Comment as CommentDAO, User nr = RequestDAO() nr.nrNum = 'NR 0000002' nr.stateCd = State.INPROGRESS nr.requestId = 1460775 nr._source = 'NRO' name1 = NameDAO() name1.choice = 1 name1.name = 'TEST NAME ONE' nr.names = [name1] nr.save_to_db() # create JWT & setup header with a Bearer Token using the JWT token = jwt.create_jwt(claims, token_header) headers = { 'Authorization': 'Bearer ' + token, 'content-type': 'application/json' } new_comment = {"comment": "The 13th comment entered by the user."} rv = client.post('/api/v1/requests/NR%200000002/comments', data=json.dumps(new_comment), headers=headers) assert 404 == rv.status_code
def save_words_list_name(words_list, queue=False): from namex.models import Request as RequestDAO, State, Name as NameDAO num = 0 req = 1460775 for record in words_list: nr_num_label = 'NR 00000' num += 1 req += 1 nr_num = nr_num_label + str(num) nr = RequestDAO() nr.nrNum = nr_num if queue: nr.stateCd = State.DRAFT nr.expirationDate = datetime.date.today() + datetime.timedelta(days=1) else: nr.stateCd = State.APPROVED nr.requestId = req nr.requestTypeCd = EntityTypes.CORPORATION.value nr._source = 'NAMEREQUEST' name = NameDAO() name.choice = 1 name.name = record name.state = State.APPROVED name.corpNum = '0652480' nr.names = [name] nr.save_to_db()
def test_get_inprogress_event_history(client, jwt, app): from namex.models import Request as RequestDAO, State, Name as NameDAO, User, Event from namex.services import EventRecorder # add a user for the comment user = User('test-user', '', '', '43e6a245-0bf7-4ccf-9bd0-e7fb85fd18cc', 'https://sso-dev.pathfinder.gov.bc.ca/auth/realms/sbc') user.save_to_db() # create JWT & setup header with a Bearer Token using the JWT token = jwt.create_jwt(claims, token_header) headers = { 'Authorization': 'Bearer ' + token, 'content-type': 'application/json' } nr = RequestDAO() nr.nrNum = 'NR 0000002' nr.stateCd = State.INPROGRESS nr.requestId = 1460775 nr._source = 'NRO' name1 = NameDAO() name1.choice = 1 name1.name = 'TEST NAME ONE' nr.names = [name1] nr.save_to_db() EventRecorder.record(user, Event.PATCH, nr, {}) # get the resource (this is the test) rv = client.get('/api/v1/events/NR%200000002', headers=headers) assert rv.status_code == 200 assert b'"user_action": "Load NR"' in rv.data
def save_auto_approved_names(approved_number_records): from namex.models import Event as EventDAO, Request as RequestDAO, User as UserDAO, State num = 0 global num_records username = '******' usr = UserDAO(username, '', '', '', '') usr.id = 86 usr.save_to_db() while approved_number_records > num: nr_num_label = 'NR 00' num_records += 1 num += 1 nr_num = nr_num_label + str(num_records) nr = RequestDAO() nr.nrNum = nr_num nr.stateCd = State.APPROVED nr._source = 'NAMEREQUEST' event = EventDAO() event.action = EventAction.PUT.value event.userId = EventUserId.SERVICE_ACCOUNT.value event.stateCd = State.APPROVED event.eventDate = datetime.date.today() nr.events = [event] nr.save_to_db()
def test_add_new_comment_to_nr(client, jwt, app): from namex.models import Request as RequestDAO, State, Name as NameDAO, Comment as CommentDAO, User, \ Event as EventDAO from sqlalchemy import desc #add a user for the comment user = User('test-user', '', '', '43e6a245-0bf7-4ccf-9bd0-e7fb85fd18cc', 'https://sso-dev.pathfinder.gov.bc.ca/auth/realms/sbc') user.save_to_db() nr = RequestDAO() nr.nrNum = 'NR 0000002' nr.stateCd = State.INPROGRESS nr.requestId = 1460775 nr._source = 'NRO' name1 = NameDAO() name1.choice = 1 name1.name = 'TEST NAME ONE' nr.names = [name1] nr.save_to_db() comment1 = CommentDAO() comment1.comment = 'This is the first Comment' comment1.nr_id = nr.id comment1.examinerId = nr.userId nr.comments = [comment1] nr.save_to_db() # create JWT & setup header with a Bearer Token using the JWT token = jwt.create_jwt(claims, token_header) headers = { 'Authorization': 'Bearer ' + token, 'content-type': 'application/json' } # get the resource so we have a template for the request: rv = client.get('/api/v1/requests/NR%200000002', headers=headers) assert rv.status_code == 200 # assert we're starting with just one name: data = json.loads(rv.data) assert len(data['comments']) == 1 new_comment = {"comment": "The 13th comment entered by the user."} rv = client.post('/api/v1/requests/NR%200000002/comments', data=json.dumps(new_comment), headers=headers) assert b'"comment": "The 13th comment entered by the user."' in rv.data assert 200 == rv.status_code event_results = EventDAO.query.filter_by(nrId=nr.id).order_by( EventDAO.eventDate.desc()).first_or_404() assert event_results.action == 'post' assert event_results.eventJson[0:11] == '{"comment":'
def test_get_expiry_days(client, test_name, days, action_cd, request_type): """ Test that get_expiry_date method returns a either 56 or 421 days """ mock_nr = RequestDAO() # Set defaults, if these exist in the provided data they will be overwritten mock_nr.stateCd = State.APPROVED mock_nr.request_action_cd = action_cd mock_nr.requestTypeCd = request_type mock_nr.expirationDate = None mock_expiry_days = int(nr_svc.get_expiry_days(mock_nr)) assert mock_expiry_days == days
def create_base_nr(): nr = RequestDAO() nr.nrNum = 'NR 0000002' nr.stateCd = State.PENDING_PAYMENT nr.requestId = 1460775 nr._source = ValidSources.NAMEREQUEST.value name1 = NameDAO() name1.choice = 1 name1.name = 'TEST NAME ONE' nr.names = [name1] nr.additionalInfo = 'test' nr.requestTypeCd = 'CR' nr.request_action_cd = 'NEW' nr.save_to_db() return nr
def test_has_consumed_name(): """Assert has_consumed_name.""" from namex.models import Name, Request as RequestDAO, State name = Name() name.choice = 1 name.name = 'TEST' name.state = 'APPROVED' nr = RequestDAO() nr.nrNum = 'NR 0000001' nr.stateCd = State.CONSUMED nr.names.append(name) nr.save_to_db() assert nr.has_consumed_name is True
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 test_is_expired(): """Assert is_expired.""" from namex.models import Name, Request as RequestDAO, State name = Name() name.choice = 1 name.name = 'TEST' name.state = 'APPROVED' nr = RequestDAO() nr.nrNum = 'NR 0000001' nr.stateCd = State.EXPIRED nr.names.append(name) nr.save_to_db() assert nr.is_expired is True
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()
def test_get_queued_oldest(client, app): # SETUP ##### # add NR to database from namex.models import Request as RequestDAO, State, User nr = RequestDAO() nr.nrNum='NR 0000001' nr.stateCd = State.DRAFT nr.save_to_db() user = User(username='******', firstname='first', lastname='last', sub='idir/funcmunk', iss='keycloak') user.save_to_db() nr_oldest, new_req = RequestDAO.get_queued_oldest(user) # Tests #### assert nr.nrNum == nr_oldest.nrNum
def test_get_next_no_draft_avail(client, jwt, app): # add NR to database from namex.models import Request as RequestDAO, State nr = RequestDAO() nr.nrNum = 'NR 0000001' nr.stateCd = State.APPROVED nr.save_to_db() # create JWT & setup header with a Bearer Token using the JWT token = jwt.create_jwt(claims, token_header) headers = {'Authorization': 'Bearer ' + token} # get the resource (this is the test) rv = client.get('/api/v1/requests/queues/@me/oldest', headers=headers) # should return 404, not found assert 404 == rv.status_code
def test_get_next_not_approver(client, jwt, app): # add NR to database from namex.models import Request as RequestDAO, State nr = RequestDAO() nr.nrNum = 'NR 0000001' nr.stateCd = State.DRAFT nr.save_to_db() # create JWT & setup header with a Bearer Token using the JWT token = jwt.create_jwt(claims_editor, token_header) headers = {'Authorization': 'Bearer ' + token} expected_response = b'{\n "code": "missing_required_roles", \n "description": "Missing the role(s) required to access this endpoint"\n}\n' # get the resource (this is the test) rv = client.get('/api/v1/requests/queues/@me/oldest', headers=headers) assert rv.data == expected_response
def test_remove_name_from_nr(client, jwt, app): # add NR to database from namex.models import Request as RequestDAO, State, Name as NameDAO nr = RequestDAO() nr.nrNum = 'NR 0000002' nr.stateCd = State.INPROGRESS nr.requestId = 1460775 nr._source = 'NRO' name1 = NameDAO() name1.choice = 1 name1.name = 'ONE' name2 = NameDAO() name2.choice = 2 name2.name = 'TWO' nr.names = [name1, name2] nr.save_to_db() # create JWT & setup header with a Bearer Token using the JWT token = jwt.create_jwt(claims, token_header) headers = { 'Authorization': 'Bearer ' + token, 'content-type': 'application/json' } # get the resource so we have a template for the request: rv = client.get('/api/v1/requests/NR%200000002', headers=headers) assert rv.status_code == 200 # assert we're starting with just one name: data = json.loads(rv.data) assert len(data['names']) == 2 for name in data['names']: if name['choice'] == 2: name['name'] = '' # Update with one blank name name (should remove the blank name) rv = client.put('/api/v1/requests/NR%200000002', data=json.dumps(data), headers=headers) data = json.loads(rv.data) assert 200 == rv.status_code assert len(data['names']) == 1
def test_add_new_blank_name_to_nr(client, jwt, app): # add NR to database from namex.models import Request as RequestDAO, State, Name as NameDAO nr = RequestDAO() nr.nrNum = 'NR 0000002' nr.stateCd = State.INPROGRESS nr.requestId = 1460775 nr._source = 'NRO' name1 = NameDAO() name1.choice = 1 name1.name = 'ONE' nr.names = [name1] nr.save_to_db() # create JWT & setup header with a Bearer Token using the JWT token = jwt.create_jwt(claims, token_header) headers = { 'Authorization': 'Bearer ' + token, 'content-type': 'application/json' } # get the resource so we have a template for the request: rv = client.get('/api/v1/requests/NR%200000002', headers=headers) assert rv.status_code == 200 # assert we're starting with just one name: data = json.loads(rv.data) assert len(data['names']) == 1 new_name = data['names'][0].copy() new_name['name'] = '' new_name['choice'] = 2 data['names'].append(new_name) # Update with a brand new name (this is the test) rv = client.put('/api/v1/requests/NR%200000002', data=json.dumps(data), headers=headers) data = json.loads(rv.data) assert 200 == rv.status_code assert len(data['names']) == 1
def test_add_clean_name_to_nr(client, jwt, app): # add NR to database from namex.models import Request as RequestDAO, State, Name as NameDAO, User, Event as EventDAO # add a user for the comment user = User('test-user', '', '', '43e6a245-0bf7-4ccf-9bd0-e7fb85fd18cc', 'https://sso-dev.pathfinder.gov.bc.ca/auth/realms/sbc') user.save_to_db() user_id = user.id nr = RequestDAO() nr.nrNum = 'NR 0000002' nr.stateCd = State.INPROGRESS nr.requestId = 1460775 nr.userId = user_id name1 = NameDAO() name1.choice = 1 name1.name = 'B,S&J ENTERPRISES LTD.' name1.state = State.APPROVED nr.names = [name1] nr.save_to_db() # create JWT & setup header with a Bearer Token using the JWT token = jwt.create_jwt(claims, token_header) headers = { 'Authorization': 'Bearer ' + token, 'content-type': 'application/json' } rv = client.put('/api/v1/requests/NR%200000002/names/1', data=json.dumps(name1.as_dict()), headers=headers) assert rv.status_code == 200 event_results = EventDAO.query.filter_by(nrId=nr.id).order_by( EventDAO.eventDate.desc()).first_or_404() assert event_results.action == 'put' test_string = event_results.eventJson test_dict = json.loads(test_string) assert 'BSJ ENTERPRISES' == test_dict['clean_name']
def test_get_nr_view_only(client, jwt, app): # add NR to database from namex.models import Request as RequestDAO, State nr = RequestDAO() nr.nrNum = 'NR 0000001' nr.stateCd = State.DRAFT nr.save_to_db() print("Role: {} ".format(claims_viewer.get('realm_access').get('roles'))) # create JWT & setup header with a Bearer Token using the JWT token = jwt.create_jwt(claims_viewer, token_header) headers = {'Authorization': 'Bearer ' + token} # The message expected to be returned json_msg = jsonify(nameRequest='NR 0000001') # get the resource (this is the test) rv = client.get('/api/v1/requests/NR%200000001', headers=headers) assert 200 == rv.status_code
def save_approved_names_by_examiner(approved_number_records): from namex.models import Request as RequestDAO, State, Event as EventDAO num = 0 global num_records while approved_number_records > num: num_records += 1 num += 1 nr_num_label = 'NR 00' nr_num = nr_num_label + str(num_records) nr = RequestDAO() nr.nrNum = nr_num nr.stateCd = State.APPROVED nr.submittedDate = datetime.date.today() - datetime.timedelta(days=2) nr._source = 'NAMEREQUEST' event = EventDAO() event.action = EventAction.PATCH.value event.stateCd = State.APPROVED event.eventDate = datetime.date.today() - datetime.timedelta(days=1) nr.events = [event] nr.save_to_db()