コード例 #1
0
def test_unit_admin_and_unit_manager_may_bypass_payment(
        user_api_client, resource_in_unit, user):
    reservation_data = build_reservation_data(resource_in_unit)
    ProductFactory(type=Product.RENT, resources=[resource_in_unit])

    # Order required for normal user
    response = user_api_client.post(LIST_URL, reservation_data)
    assert response.status_code == 400
    assert 'order' in response.data

    # Order not required for admin user
    UnitAuthorization.objects.create(subject=resource_in_unit.unit,
                                     level=UnitAuthorizationLevel.admin,
                                     authorized=user)
    response = user_api_client.post(LIST_URL, reservation_data)
    assert response.status_code == 201
    new_reservation = Reservation.objects.last()
    assert new_reservation.state == Reservation.CONFIRMED
    UnitAuthorization.objects.all().delete()
    Reservation.objects.all().delete()

    # Order not required for manager user
    UnitAuthorization.objects.create(subject=resource_in_unit.unit,
                                     level=UnitAuthorizationLevel.manager,
                                     authorized=user)
    response = user_api_client.post(LIST_URL, reservation_data)
    assert response.status_code == 201
    new_reservation = Reservation.objects.last()
    assert new_reservation.state == Reservation.CONFIRMED
コード例 #2
0
def test_order_post(user_api_client, resource_in_unit, product, product_2,
                    mock_provider):
    reservation_data = build_reservation_data(resource_in_unit)
    reservation_data['order'] = build_order_data(product=product,
                                                 product_2=product_2,
                                                 quantity_2=5)

    response = user_api_client.post(LIST_URL, reservation_data)

    assert response.status_code == 201, response.data
    mock_provider.initiate_payment.assert_called()

    # check response fields
    order_create_response_fields = ORDER_FIELDS.copy() | {'payment_url'}
    order_data = response.data['order']
    assert set(order_data.keys()) == order_create_response_fields
    assert order_data['payment_url'].startswith(
        'https://mocked-payment-url.com')

    # check created object
    new_order = Order.objects.last()
    assert new_order.reservation == Reservation.objects.last()

    # check order lines
    order_lines = new_order.order_lines.all()
    assert order_lines.count() == 2
    assert order_lines[0].product == product
    assert order_lines[0].quantity == 1
    assert order_lines[1].product == product_2
    assert order_lines[1].quantity == 5
コード例 #3
0
def test_extra_product_doesnt_make_order_required(user_api_client,
                                                  resource_in_unit):
    reservation_data = build_reservation_data(resource_in_unit)
    ProductFactory(type=Product.EXTRA, resources=[resource_in_unit])

    response = user_api_client.post(LIST_URL, reservation_data)

    assert response.status_code == 201
コード例 #4
0
def test_order_must_include_rent_if_one_exists(user_api_client,
                                               resource_in_unit):
    reservation_data = build_reservation_data(resource_in_unit)
    ProductFactory(type=Product.RENT, resources=[resource_in_unit])
    extra = ProductFactory(type=Product.EXTRA, resources=[resource_in_unit])
    reservation_data['order'] = build_order_data(product=extra)

    response = user_api_client.post(LIST_URL, reservation_data)
    assert response.status_code == 400
コード例 #5
0
def test_order_line_products_are_unique(user_api_client, resource_in_unit,
                                        product):
    """Test order validator enforces that order lines cannot contain duplicates of the same product"""
    reservation_data = build_reservation_data(resource_in_unit)
    reservation_data['order'] = build_order_data(product,
                                                 quantity=2,
                                                 product_2=product,
                                                 quantity_2=2)
    response = user_api_client.post(LIST_URL, reservation_data)

    assert response.status_code == 400
コード例 #6
0
def test_reservation_creation_state(user_api_client, resource_in_unit,
                                    has_order, expected_state):
    reservation_data = build_reservation_data(resource_in_unit)
    if has_order:
        product = ProductFactory(type=Product.RENT,
                                 resources=[resource_in_unit])
        reservation_data['order'] = build_order_data(product)

    response = user_api_client.post(LIST_URL, reservation_data)

    assert response.status_code == 201
    new_reservation = Reservation.objects.last()
    assert new_reservation.state == expected_state
コード例 #7
0
def test_rent_product_makes_order_required_(user_api_client, resource_in_unit,
                                            has_rent):
    reservation_data = build_reservation_data(resource_in_unit)
    if has_rent:
        ProductFactory(type=Product.RENT, resources=[resource_in_unit])

    response = user_api_client.post(LIST_URL, reservation_data)

    if has_rent:
        assert response.status_code == 400
        assert 'order' in response.data
    else:
        assert response.status_code == 201
コード例 #8
0
def test_order_product_must_match_resource(user_api_client, product,
                                           resource_in_unit,
                                           resource_in_unit2):
    product_with_another_resource = ProductFactory(
        resources=[resource_in_unit2])
    data = build_reservation_data(resource_in_unit)
    data['order'] = build_order_data(product=product,
                                     product_2=product_with_another_resource)

    response = user_api_client.post(LIST_URL, data)

    assert response.status_code == 400
    assert 'product' in response.data['order']['order_lines'][1]
コード例 #9
0
def test_order_line_product_quantity_limitation(user_api_client,
                                                resource_in_unit, quantity,
                                                expected_status):
    """Test order validator order line quantity is within product max quantity limitation"""
    reservation_data = build_reservation_data(resource_in_unit)
    product_with_quantity = ProductFactory(resources=[resource_in_unit],
                                           max_quantity=2)
    order_data = build_order_data(product=product_with_quantity,
                                  quantity=quantity)
    reservation_data['order'] = order_data

    response = user_api_client.post(LIST_URL, reservation_data)

    assert response.status_code == expected_status, response.data