Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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