Пример #1
0
def test_patch_rental_noneditable_fields(logged_in_client):
    movies, genres = populate_db(num_movies=2, num_genres=1)
    movie = movies[0]

    r = logged_in_client.post(RENTALS_URL, {"movie": movie["uuid"]})
    rental_uuid = r.data["uuid"]

    assert r.status_code == 201
    assert r.data["movie"] == movies[0]["uuid"]

    r = logged_in_client.patch(RENTAL_URL.format(uuid=rental_uuid),
                               {"movie": movies[1]["uuid"]},
                               content_type='application/json')
    assert r.status_code == 400
    r = logged_in_client.patch(RENTAL_URL.format(uuid=rental_uuid), {"fee": 5},
                               content_type='application/json')
    assert r.status_code == 400
    r = logged_in_client.patch(RENTAL_URL.format(uuid=rental_uuid),
                               {"rental_date": datetime.datetime.now()},
                               content_type='application/json')
    assert r.status_code == 400
    r = logged_in_client.patch(RENTAL_URL.format(uuid=rental_uuid),
                               {"return_date": datetime.datetime.now()},
                               content_type='application/json')
    assert r.status_code == 400
Пример #2
0
def test_return_movie_twice(logged_in_client):
    movies, genres = populate_db(num_movies=5, num_genres=5)
    rentals = create_rentals(movies, logged_in_client.user, num_rentals=5)

    r = logged_in_client.patch(RENTAL_URL.format(uuid=rentals[0]["uuid"]),
                               {"returned": True},
                               content_type='application/json')
    assert r.status_code == 200

    r = logged_in_client.patch(RENTAL_URL.format(uuid=rentals[0]["uuid"]),
                               {"returned": True},
                               content_type='application/json')
    assert r.status_code == 400
Пример #3
0
def test_patch_rental_no_data_no_change(logged_in_client):
    movies, genres = populate_db(num_movies=2, num_genres=1)
    movie = movies[0]

    r1 = logged_in_client.post(RENTALS_URL, {"movie": movie["uuid"]})
    rental_uuid = r1.data["uuid"]

    assert r1.status_code == 201
    assert r1.data["movie"] == movies[0]["uuid"]

    r2 = logged_in_client.patch(RENTAL_URL.format(uuid=rental_uuid),
                                data={},
                                content_type='application/json')
    assert r2.status_code == 200
    assert dicts_equal(r1.data, r2.data)
Пример #4
0
def test_consecutive_rent_return(logged_in_client):
    movies, genres = populate_db(num_movies=1, num_genres=1)
    movie = movies[0]

    for i in range(5):
        r = logged_in_client.post(RENTALS_URL, {"movie": movie["uuid"]})

        assert r.status_code == 201
        assert r.data["movie"] == movies[0]["uuid"]

        rental_uuid = r.data["uuid"]

        r = logged_in_client.patch(RENTAL_URL.format(uuid=rental_uuid),
                                   {"returned": True},
                                   content_type='application/json')
        assert r.status_code == 200
Пример #5
0
def test_return_movie(logged_in_client):
    movies, genres = populate_db(num_movies=5, num_genres=5)
    rentals = create_rentals(movies, logged_in_client.user, num_rentals=5)

    r = logged_in_client.patch(RENTAL_URL.format(uuid=rentals[0]["uuid"]),
                               {"returned": True},
                               content_type='application/json')
    assert r.status_code == 200

    assert "return_date" in r.data
    assert "fee" in r.data

    # assert that the fee is equal as the fee charged between two aslmost-identical timestamps
    t1 = datetime.datetime.now(datetime.timezone.utc)
    t2 = datetime.datetime.now(datetime.timezone.utc)

    fee_calculator = FeeCalculator(t1, t2)
    assert r.data["fee"] == fee_calculator.calculate_fee()
Пример #6
0
def test_fee_calculation_standard(logged_in_client, diff, result):
    username, password, user_obj = create_random_user()
    movies, genres = populate_db(num_movies=1, num_genres=5)
    rentals = create_rentals(movies, logged_in_client.user, num_rentals=1)

    rental_uuid = rentals[0]["uuid"]
    rental_obj = Rental.objects.get(uuid=rental_uuid)

    rental_date = datetime.datetime.now(
        datetime.timezone.utc) - datetime.timedelta(**diff)
    rental_obj.rental_date = rental_date
    rental_obj.save()

    r = logged_in_client.patch(RENTAL_URL.format(uuid=rental_uuid),
                               {"returned": True},
                               content_type='application/json')
    fee = r.data["fee"]

    assert fee == result