def test_reservation_detail_hours(client, carparkingreservations):
    client.login(username="******", password='******')
    response = client.get(f'/parking_details/{carparkingreservations[3].id}/')
    assert response.status_code == 200
    response_context = response.context['carparkingreservation']
    assert response_context.duration_print == '4 hours -45 minutes '
    assert response_context.price == 14.25
def test_no_comment_view(client, user):
    client.login(username="******", password='******')
    url = '/comments/'
    response = client.get(url)
    assert 'There are no comments yet' in str(response.content)
    assert Rating.objects.count() == 0
    assert Rating.bike.through.objects.count() == 0
def test_reserve_bike_from_station_post(client, user, bikestation1):
    client.login(username="******", password='******')
    url = '/bike_reservation/'
    response = client.post(url, {'station': 1000})
    assert 'Please refill form' in str(response.content)
    assert response.context['message'] == 'Please refill form'
    assert response.status_code == 200
def test_return_bike_no_data(client, user):
    client.login(username="******", password='******')
    url = '/bike_reservations/'
    response = client.get(url)
    assert BikeReservation.objects.count() == 0
    assert response.status_code == 200
    assert 'There are no bike rented.' in str(response.content)
def test_return_bike(client, bikereservations):
    client.login(username="******", password='******')
    assert BikeReservation.objects.count() == 2
    url = '/bike_reservations/'
    response = client.get(url)
    assert list(
        response.context['bikereservation_list']) == list(bikereservations)
def test_reserve_bike_reserved(client, user, bike_reserved):
    client.login(username="******", password='******')
    assert Bike.objects.count() == 1
    url = f'/bike_reservation/{bike_reserved[1].id}/'
    response = client.get(url)
    assert response.status_code == 200
    assert len(response.context['available_bikes']) == 0
def test_reservation_list_pagination(client, carparkingreservations6):
    client.login(username="******", password='******')
    assert CarParkingReservation.objects.count() == 6
    response = client.get('/reservation_list/?page=2')
    assert len(response.context['carparkingreservation_list']) == 1
    assert response.status_code == 200
    assert response.context['is_paginated'] == True
def test_reserve_bike(client, user, bike_not_reserved):
    client.login(username="******", password='******')
    url = f'/bike_reservation/{bike_not_reserved[1].id}/'
    response = client.get(url)
    assert response.status_code == 200
    assert 'Bike_1' in str(response.content)
    assert len(response.context['available_bikes']) == 1
    assert response.context['available_bikes'][0] == bike_not_reserved[0]
def test_reserve_bike(client, user, bikestations):
    client.login(username="******", password='******')
    url = '/bike_reservation/'
    response = client.get(url)
    assert BikeStations.objects.count() == 3
    assert response.status_code == 200
    assert 'Katowice Dworzec 2' in str(response.content)
    assert len(response.context['station']) == 3
def test_dashboard(client, bikereservations_user_id, carparkingreservations6):
    client.login(username="******", password='******')
    assert BikeReservation.objects.count() == 2
    assert CarParkingReservation.objects.count() == 6
    response = client.get('/main/')
    assert response.status_code == 200
    assert response.context['num_res'] == 6
    assert response.context['num_bike_res'] == 2
def test_reservation_list(client, carparkingreservations):
    client.login(username="******", password='******')
    url = '/reservation_list/'
    assert CarParkingReservation.objects.count() == 4
    response = client.get(url)
    assert len(response.context['carparkingreservation_list']) == 4
    assert response.status_code == 200
    assert response.context['is_paginated'] == False
def test_check_return_bike_view_no_data(client, user):
    client.login(username="******", password='******')
    url = f'/bike_return/1/'
    response = client.get(url)
    message = 'There are no stations and bikes in database'
    assert BikeStations.objects.count() == 0
    assert response.status_code == 200
    assert response.context['message'] == message
def test_reservation_list_another_user_logged(client, carparkingreservations):
    client.login(username="******", password='******')
    url = '/reservation_list/'
    assert CarParkingReservation.objects.count() == 4
    response = client.get(url)
    assert len(response.context['carparkingreservation_list']) == 0
    assert response.status_code == 200
    assert 'There are no reservations' in str(response.content)
def test_car_parking_reserve(client, user, parking_place):
    client.login(username="******", password='******')
    response = client.get('/car_parking/')
    assert response.status_code == 200
    assert CarParking.objects.count() == 3
    assert 'Place 102' in str(response.content)
    assert 'Place 103' in str(response.content)
    assert 'Place 104' in str(response.content)
def test_dashboard_no_data_in_db(client, user):
    client.login(username="******", password='******')
    assert BikeReservation.objects.count() == 0
    assert CarParkingReservation.objects.count() == 0
    response = client.get('/main/')
    assert response.status_code == 200
    assert response.context['num_res'] == 0
    assert response.context['num_bike_res'] == 0
def test_add_comment_list(client, comments):
    client.login(username="******", password='******')
    assert Rating.objects.count() == 1
    assert Rating.bike.through.objects.count() == 1
    url = '/comments/'
    response = client.get(url)
    assert len(response.context['info_sended']) == 1
    assert response.context['info_sended'][
        0].rating.comments == 'Bike has destroyed sitting'
def test_return_bike_reserved_false(client, bikereservations2):
    client.login(username="******", password='******')
    assert BikeReservation.objects.count() == 3
    url = '/bike_reservations/'
    response = client.get(url)
    assert len(response.context['bikereservation_list']) == 2
    assert list(response.context['bikereservation_list']) == [
        bikereservations2[1], bikereservations2[0]
    ]
def test_reservation_detail_list(client, carparkingreservations):
    client.login(username="******", password='******')
    response = client.get(f'/parking_details/{carparkingreservations[0].id}/')
    assert response.status_code == 200
    response_context = response.context['carparkingreservation']
    assert response_context.place.name == 'Place 101'
    assert response_context.duration_print == '1 hours -30 minutes '
    assert response_context.price == 4.5
    assert response_context.date_start == '21-10-2020'
def test_reserve_bike_post(client, user, bike_not_reserved):
    client.login(username="******", password='******')
    assert BikeReservation.objects.count() == 0
    url = f'/bike_reservation/{bike_not_reserved[1].id}/'
    response = client.post(url, {'bike_id': bike_not_reserved[0].id},
                           follow=True)
    assert response.status_code == 200
    assert BikeReservation.objects.count() == 1
    bike_not_reserved[0].refresh_from_db()
    assert bike_not_reserved[0].reserved == True
def test_car_parking_reservation_no_id(client, user):
    assert CarParkingReservation.objects.count() == 0
    client.login(username="******", password='******')
    response = client.post('/car_parking/', {
        'dates_range_0': '2020-11-22 21:30',
        'dates_range_1': '2020-11-22 23:00',
        'place': 10000
    },
                           follow=True)
    assert CarParkingReservation.objects.count() == 0
    assert response.status_code == 200
def test_check_return_bike_view(client, user, bike):
    client.login(username="******", password='******')
    url = f'/bike_return/{bike.id}/'
    response = client.get(url)
    bikestation = BikeStations.objects.count()
    bikestation_selected = BikeStations.objects.get(
        street_name='Dworzec Katowice')
    assert BikeStations.objects.count() == 1
    assert response.status_code == 200
    assert len(response.context['stations']) == bikestation
    assert response.context['stations'][0].id == bikestation_selected.id
def test_car_parking_reservation(client, user):
    assert CarParkingReservation.objects.count() == 0
    parkingplace = CarParking.objects.create(number='101')
    client.login(username="******", password='******')
    response = client.post('/car_parking/', {
        'dates_range_0': '2020-11-22 21:30',
        'dates_range_1': '2020-11-22 23:00',
        'place': parkingplace.id
    },
                           follow=True)
    assert CarParkingReservation.objects.count() == 1
    assert response.status_code == 200
def test_car_parking_reservation_past_date(client, user):
    assert CarParkingReservation.objects.count() == 0
    parkingplace = CarParking.objects.create(number='101')
    client.login(username="******", password='******')
    response = client.post(
        '/car_parking/', {
            'dates_range_0': '2020-09-22 21:30',
            'dates_range_1': '2020-11-22 23:00',
            'place': parkingplace.id
        })
    assert CarParkingReservation.objects.count() == 0
    assert 'Past date' in str(response.content)
def test_update_bike_return_view(client, user, bike, bikestations):
    client.login(username="******", password='******')
    url = f'/bike_return/{bike.id}/'
    # print(BikeStations.objects.all())
    # print(bike.station_id)
    # print(bikestations[3].id)
    response = client.post(url, {'station_id': bikestations[3].id},
                           follow=True)
    assert response.status_code == 200
    bike.refresh_from_db()
    assert bike.station_id == 5
    assert bike.reserved == False
def test_car_parking_reservation_end_date_before_start_date(client, user):
    assert CarParkingReservation.objects.count() == 0
    parkingplace = CarParking.objects.create(number='101')
    client.login(username="******", password='******')
    response = client.post(
        '/car_parking/', {
            'dates_range_0': '2020-11-22 21:30',
            'dates_range_1': '2020-11-09 23:00',
            'place': parkingplace.id
        })
    assert CarParkingReservation.objects.count() == 0
    assert 'The start of the range must not exceed the end of the range.' in str(
        response.content)
def test_car_parking_reservation_exists(client, carparkingreservations6):
    parkingplace = CarParking.objects.get(pk=29)
    with pytest.raises(TransactionManagementError):
        assert CarParkingReservation.objects.count() == 6
        client.login(username="******", password='******')
        response = client.post(
            '/car_parking/', {
                'dates_range_0': '2020-11-22 19:00',
                'dates_range_1': '2020-11-22 22:45',
                'place': parkingplace.id
            })
        assert CarParkingReservation.objects.count() == 6
        assert 'Parking is already reserved on this time, Please select another place!' in str(
            response.content)
def test_add_comment_get(client, user, bikes):
    client.login(username="******", password='******')
    url = '/comments/'
    assert Rating.objects.count() == 0
    assert Rating.bike.through.objects.count() == 0
    response = client.post(url, {
        'rate': "1",
        'comments': "ok",
        'bike': bikes[0].id
    },
                           follow=True)

    assert Rating.objects.count() == 1
    assert Rating.bike.through.objects.count() == 1
    assert response.status_code == 200
def test_add_car_place_user(client, user, carparking):
    client.login(username="******", password='******')
    url = '/add_car_parking/'
    response = client.get(url)
    assert response.status_code == 403
def test_add_car_place_superuser(client, superuser):
    client.login(username="******", password='******')
    url = '/add_car_parking/'
    response = client.get(url)
    assert response.status_code == 200
def test_logout(client, user):
    client.login(username="******", password='******')
    response = client.get('/logout_user/')
    assert response.status_code == 200
    assert 'Log out successfully' in str(response.content)