def test_items_extend_end_date(client, librarian_martigny, patron_martigny, loc_public_martigny, item_type_standard_martigny, item_lib_martigny, json_header, circ_policy_short_martigny): """Test correct renewal due date for items.""" login_user_via_session(client, librarian_martigny.user) item = item_lib_martigny item_pid = item.pid patron_pid = patron_martigny.pid # checkout res, data = postdata( client, 'api_item.checkout', dict(item_pid=item_pid, patron_pid=patron_pid, transaction_user_pid=librarian_martigny.pid, transaction_location_pid=loc_public_martigny.pid)) assert res.status_code == 200 actions = data.get('action_applied') loan_pid = actions[LoanAction.CHECKOUT].get('pid') loan = Loan.get_record_by_pid(loan_pid) assert not item.get_extension_count() max_count = get_extension_params(loan=loan, parameter_name='max_count') renewal_duration_policy = circ_policy_short_martigny['renewal_duration'] renewal_duration = get_extension_params(loan=loan, parameter_name='duration_default') assert renewal_duration_policy <= renewal_duration.days # extend loan res, data = postdata( client, 'api_item.extend_loan', dict(item_pid=item_pid, pid=loan_pid, transaction_user_pid=librarian_martigny.pid, transaction_location_pid=loc_public_martigny.pid)) assert res.status_code == 200 # Compare expected loan date with processed one # first get loan UTC date actions = data.get('action_applied') loan_pid = actions[LoanAction.EXTEND].get('pid') loan = Loan.get_record_by_pid(loan_pid) loan_date = loan.get('end_date') # then process a date with current UTC date + renewal current_date = datetime.now(timezone.utc) calc_date = current_date + renewal_duration # finally the comparison should give the same date (in UTC)! assert (calc_date.strftime('%Y-%m-%d') == ciso8601.parse_datetime( loan_date).astimezone(timezone.utc).strftime('%Y-%m-%d')) # checkin res, _ = postdata( client, 'api_item.checkin', dict(item_pid=item_pid, pid=loan_pid, transaction_user_pid=librarian_martigny.pid, transaction_location_pid=loc_public_martigny.pid)) assert res.status_code == 200
def test_items_extend_end_date(client, librarian_martigny_no_email, patron_martigny_no_email, loc_public_martigny, item_type_standard_martigny, item_lib_martigny, json_header, circ_policy_short_martigny): """Test correct renewal due date for items.""" login_user_via_session(client, librarian_martigny_no_email.user) item = item_lib_martigny item_pid = item.pid patron_pid = patron_martigny_no_email.pid # checkout res = client.post( url_for('api_item.checkout'), data=json.dumps(dict(item_pid=item_pid, patron_pid=patron_pid)), content_type='application/json', ) assert res.status_code == 200 data = get_json(res) actions = data.get('action_applied') loan_pid = actions[LoanAction.CHECKOUT].get('pid') loan = Loan.get_record_by_pid(loan_pid) assert not item.get_extension_count() max_count = get_extension_params(loan=loan, parameter_name='max_count') renewal_duration_policy = circ_policy_short_martigny['renewal_duration'] renewal_duration = get_extension_params(loan=loan, parameter_name='duration_default') assert renewal_duration_policy <= renewal_duration.days # extend loan res = client.post( url_for('api_item.extend_loan'), data=json.dumps(dict(item_pid=item_pid, pid=loan_pid)), content_type='application/json', ) assert res.status_code == 200 data = get_json(res) actions = data.get('action_applied') loan_pid = actions[LoanAction.EXTEND].get('pid') loan = Loan.get_record_by_pid(loan_pid) end_date = loan.get('end_date') current_date = datetime.now() calc_date = current_date + renewal_duration assert (calc_date.strftime('%Y-%m-%d') == ciso8601.parse_datetime_as_naive( end_date).strftime('%Y-%m-%d')) # checkin res = client.post( url_for('api_item.checkin'), data=json.dumps(dict(item_pid=item_pid, pid=loan_pid)), content_type='application/json', ) assert res.status_code == 200
def test_items_extend_rejected(client, librarian_martigny_no_email, patron_martigny_no_email, loc_public_martigny, item_type_standard_martigny, item_lib_martigny, json_header, circ_policy_short_martigny): """Test items when extend will be rejected.""" login_user_via_session(client, librarian_martigny_no_email.user) item = item_lib_martigny item_pid = item.pid patron_pid = patron_martigny_no_email.pid location = loc_public_martigny # checkout res, data = postdata(client, 'api_item.checkout', dict(item_pid=item_pid, patron_pid=patron_pid)) assert res.status_code == 200 actions = data.get('action_applied') loan_pid = actions[LoanAction.CHECKOUT].get('pid') loan = Loan.get_record_by_pid(loan_pid) assert not item.get_extension_count() max_count = get_extension_params(loan=loan, parameter_name='max_count') assert circ_policy_short_martigny['number_renewals'] assert circ_policy_short_martigny['renewal_duration'] > 1 circ_policy_short_martigny['renewal_duration'] = 1 circ_policy_short_martigny.update(data=circ_policy_short_martigny, dbcommit=True, reindex=True) flush_index(CircPoliciesSearch.Meta.index) max_count = get_extension_params(loan=loan, parameter_name='max_count') assert max_count == 0 # extend loan rejected res, _ = postdata(client, 'api_item.extend_loan', dict(item_pid=item_pid, pid=loan_pid)) assert res.status_code == 403 circ_policy_short_martigny['number_renewals'] = 1 circ_policy_short_martigny['renewal_duration'] = 15 circ_policy_short_martigny.update(data=circ_policy_short_martigny, dbcommit=True, reindex=True) flush_index(CircPoliciesSearch.Meta.index) # checkin res, _ = postdata(client, 'api_item.checkin', dict(item_pid=item_pid, pid=loan_pid)) assert res.status_code == 200
def test_items_extend_end_date(client, librarian_martigny_no_email, patron_martigny_no_email, loc_public_martigny, item_type_standard_martigny, item_lib_martigny, json_header, circ_policy_short_martigny): """Test correct renewal due date for items.""" login_user_via_session(client, librarian_martigny_no_email.user) item = item_lib_martigny item_pid = item.pid patron_pid = patron_martigny_no_email.pid # checkout res, data = postdata(client, 'api_item.checkout', dict(item_pid=item_pid, patron_pid=patron_pid)) assert res.status_code == 200 actions = data.get('action_applied') loan_pid = actions[LoanAction.CHECKOUT].get('pid') loan = Loan.get_record_by_pid(loan_pid) assert not item.get_extension_count() max_count = get_extension_params(loan=loan, parameter_name='max_count') renewal_duration_policy = circ_policy_short_martigny['renewal_duration'] renewal_duration = get_extension_params(loan=loan, parameter_name='duration_default') assert renewal_duration_policy <= renewal_duration.days # extend loan res, data = postdata(client, 'api_item.extend_loan', dict(item_pid=item_pid, pid=loan_pid)) assert res.status_code == 200 actions = data.get('action_applied') loan_pid = actions[LoanAction.EXTEND].get('pid') loan = Loan.get_record_by_pid(loan_pid) end_date = loan.get('end_date') current_date = datetime.now(timezone.utc) calc_date = current_date + renewal_duration # TODO: check whey this test fails with this error @travis # AssertionError: assert '2019-10-11' == '2019-10-10' # assert ( # calc_date.strftime('%Y-%m-%d') == ciso8601.parse_datetime( # end_date).strftime('%Y-%m-%d') # ) # checkin res, _ = postdata(client, 'api_item.checkin', dict(item_pid=item_pid, pid=loan_pid)) assert res.status_code == 200