def test_operator_cannot_be_set(operator_api_client, operator, operator_2, new_parking_data, updated_parking_data): new_parking_data['operator'] = str(operator_2.id) create_payment_zone(id=new_parking_data['zone'], code=str(new_parking_data['zone']), number=new_parking_data['zone'], domain=EnforcementDomain.get_default_domain()) # POST response_parking_data = post(operator_api_client, list_url, new_parking_data) new_parking = Parking.objects.get(id=response_parking_data['id']) assert new_parking.operator == operator create_payment_zone(id=updated_parking_data['zone'], code=str(updated_parking_data['zone']), number=updated_parking_data['zone'], domain=EnforcementDomain.get_default_domain()) # PUT detail_url = get_detail_url(new_parking) put(operator_api_client, detail_url, updated_parking_data) new_parking.refresh_from_db() assert new_parking.operator == operator # PATCH patch(operator_api_client, detail_url, {'operator': str(operator_2.id)}) new_parking.refresh_from_db() assert new_parking.operator == operator
def test_endpoint_returns_parkings_with_same_zone_code_in_correct_domain( enforcer_api_client, staff_api_client, operator, enforcer, parking_factory, staff_user): zone_1 = create_payment_zone(code='Z', domain=enforcer.enforced_domain) EnforcerFactory(user=staff_user) domain = staff_user.enforcer.enforced_domain zone_2 = create_payment_zone(code='Z', domain=domain) assert zone_1.domain.code != zone_2.domain.code parking_1 = parking_factory(registration_number="ABC-123", operator=operator, zone=zone_1) parking_1.domain = zone_1.domain parking_1.save() parking_2 = parking_factory(registration_number="ABC-123", operator=operator, zone=zone_2) parking_2.domain = zone_2.domain parking_2.save() data_1 = get(enforcer_api_client, get_url('list_by_reg_num', parking_1)) assert len(data_1['results']) == 1 parking_data_1 = data_1['results'][0] assert parking_data_1['id'] == str(parking_1.id) assert parking_data_1['zone'] == 'Z' data_2 = get(staff_api_client, get_url('list_by_reg_num', parking_2)) assert len(data_2['results']) == 1 parking_data_2 = data_2['results'][0] assert parking_data_2['id'] == str(parking_2.id) assert parking_data_2['zone'] == 'Z'
def test_time_start_cannot_be_after_time_end(operator_api_client, parking, new_parking_data): create_payment_zone(id=new_parking_data['zone'], code=str(new_parking_data['zone']), number=new_parking_data['zone'], domain=EnforcementDomain.get_default_domain()) new_parking_data['time_start'] = '2116-12-10T23:33:29Z' detail_url = get_detail_url(parking) error_message = '"time_start" cannot be after "time_end".' # POST error_data = post(operator_api_client, list_url, new_parking_data, status_code=400) assert error_message in error_data['non_field_errors'] # PUT error_data = put(operator_api_client, detail_url, new_parking_data, status_code=400) assert error_message in error_data['non_field_errors'] # PATCH patch_data = {'time_start': '2116-12-10T23:33:29Z'} error_data = patch(operator_api_client, detail_url, patch_data, status_code=400) assert error_message in error_data['non_field_errors']
def test_default_enforcement_domain_is_used_on_parking_creation_if_not_specified( operator_api_client, new_parking_data): create_payment_zone(id=new_parking_data['zone'], code=str(new_parking_data['zone']), number=new_parking_data['zone'], domain=EnforcementDomain.get_default_domain()) response_parking_data = post(operator_api_client, list_url, new_parking_data) assert response_parking_data[ 'domain'] == EnforcementDomain.get_default_domain().code
def test_check_parking_invalid_zone_parking(operator, enforcer_api_client, parking_factory): create_payment_zone(geom=create_area_geom(), number=1, code="1") zone = create_payment_zone(geom=create_area_geom(geom=GEOM_2), number=2, code="2") parking_factory(registration_number="ABC-123", operator=operator, zone=zone) response = enforcer_api_client.post(list_url, data=PARKING_DATA) assert response.status_code == HTTP_200_OK assert response.data["allowed"] is False
def test_put_parking(operator_api_client, parking, updated_parking_data): detail_url = get_detail_url(parking) create_payment_zone(code='2', number=2, domain=EnforcementDomain.get_default_domain()) response_parking_data = put(operator_api_client, detail_url, updated_parking_data) # check data in the response check_response_parking_data(updated_parking_data, response_parking_data) # check the actual object parking.refresh_from_db() check_parking_data_matches_parking_object(updated_parking_data, parking)
def test_post_parking_optional_fields_null(operator_api_client, new_parking_data): new_parking_data['time_end'] = None new_parking_data['location'] = None create_payment_zone(code=str(new_parking_data['zone']), number=new_parking_data['zone'], domain=EnforcementDomain.get_default_domain()) response_parking_data = post(operator_api_client, list_url, new_parking_data) check_response_parking_data(new_parking_data, response_parking_data) new_parking = Parking.objects.get(id=response_parking_data['id']) check_parking_data_matches_parking_object(new_parking_data, new_parking)
def test_put_parking_optional_fields_null(operator_api_client, parking, updated_parking_data): detail_url = get_detail_url(parking) create_payment_zone(code='2', number=2, domain=EnforcementDomain.get_default_domain()) updated_parking_data['time_end'] = None updated_parking_data['location'] = None response_parking_data = put(operator_api_client, detail_url, updated_parking_data) check_response_parking_data(updated_parking_data, response_parking_data) parking.refresh_from_db() check_parking_data_matches_parking_object(updated_parking_data, parking)
def test_parking_registration_number_special_chars(operator_api_client, new_parking_data): create_payment_zone(id=new_parking_data['zone'], code=str(new_parking_data['zone']), number=new_parking_data['zone'], domain=EnforcementDomain.get_default_domain()) new_parking_data['registration_number'] = 'ÅÄÖÆØ-:' response_parking_data = post(operator_api_client, list_url, new_parking_data) check_response_parking_data(new_parking_data, response_parking_data) new_parking = Parking.objects.get(id=response_parking_data['id']) check_parking_data_matches_parking_object(new_parking_data, new_parking)
def test_enforcement_domain_can_be_specified_on_parking_creation( operator_api_client, new_parking_data): enforcement_domain = EnforcementDomain.objects.create(code='ESP', name='Espoo') new_parking_data.update(domain=enforcement_domain.code) create_payment_zone(id=new_parking_data['zone'], code=str(new_parking_data['zone']), number=new_parking_data['zone'], domain=enforcement_domain) response_parking_data = post(operator_api_client, list_url, new_parking_data) assert not response_parking_data[ 'domain'] == EnforcementDomain.get_default_domain().code assert response_parking_data['domain'] == enforcement_domain.code
def test_post_parking(operator_api_client, operator, new_parking_data): create_payment_zone(code=str(new_parking_data['zone']), number=new_parking_data['zone'], domain=EnforcementDomain.get_default_domain()) response_parking_data = post(operator_api_client, list_url, new_parking_data) # check data in the response check_response_parking_data(new_parking_data, response_parking_data) # check the actual object new_parking = Parking.objects.get(id=response_parking_data['id']) check_parking_data_matches_parking_object(new_parking_data, new_parking) # operator should be autopopulated assert new_parking.operator == operator assert new_parking.domain.code == response_parking_data['domain']
def create_parking(enforcer, operator_id=1, registration_number='ABC-123', **kwargs): return Parking(location=Point(60.193609, 24.951394), operator_id=operator_id, registration_number=registration_number, time_end=now() + datetime.timedelta(days=1), time_start=now(), zone=create_payment_zone(domain=enforcer.enforced_domain), **kwargs)
def test_enforcer_can_view_only_own_parking(enforcer_api_client, parking_factory, enforcer): zone = create_payment_zone(domain=enforcer.enforced_domain) parking = parking_factory(registration_number='ABC-123', zone=zone, domain=zone.domain) parking_factory(registration_number='ABC-123') response = enforcer_api_client.post(list_url, data=PARKING_DATA) assert response.status_code == HTTP_200_OK assert response.data["allowed"] is True assert response.data["end_time"] == parking.time_end
def test_check_parking_invalid_time_parking(operator, enforcer, enforcer_api_client, history_parking_factory): zone = create_payment_zone(domain=enforcer.enforced_domain) history_parking_factory(registration_number="ABC-123", operator=operator, zone=zone, domain=zone.domain) response = enforcer_api_client.post(list_url, data=PARKING_DATA) assert response.status_code == HTTP_200_OK assert response.data["allowed"] is False
def test_cannot_modify_parking_after_modify_period(operator_api_client, new_parking_data, updated_parking_data): for data in [new_parking_data, updated_parking_data]: create_payment_zone(id=data['zone'], code=str(data['zone']), number=data['zone'], domain=EnforcementDomain.get_default_domain()) start_time = datetime.datetime(2010, 1, 1, 12, 00) error_message = 'Grace period has passed. Only "time_end" can be updated via PATCH.' error_code = 'grace_period_over' with freeze_time(start_time): response_parking_data = post(operator_api_client, list_url, new_parking_data) new_parking = Parking.objects.get(id=response_parking_data['id']) end_time = start_time + settings.PARKKIHUBI_TIME_PARKINGS_EDITABLE + datetime.timedelta( minutes=1) with freeze_time(end_time): # PUT error_data = put(operator_api_client, get_detail_url(new_parking), updated_parking_data, 403) assert error_message in error_data['detail'] assert error_data['code'] == error_code # PATCH other fields than 'time_end' for field_name in updated_parking_data: if field_name == 'time_end': continue parking_data = {field_name: updated_parking_data[field_name]} error_data = patch(operator_api_client, get_detail_url(new_parking), parking_data, 403) assert error_message in error_data['detail'] assert error_data['code'] == error_code
def test_can_modify_time_end_after_modify_period(operator_api_client, new_parking_data): create_payment_zone(id=new_parking_data['zone'], code=str(new_parking_data['zone']), number=new_parking_data['zone'], domain=EnforcementDomain.get_default_domain()) start_time = datetime.datetime(2010, 1, 1, 12, 00) with freeze_time(start_time): response_parking_data = post(operator_api_client, list_url, new_parking_data) new_parking = Parking.objects.get(id=response_parking_data['id']) end_time = start_time + settings.PARKKIHUBI_TIME_PARKINGS_EDITABLE + datetime.timedelta( minutes=1) with freeze_time(end_time): parking_data = {'time_end': '2016-12-12T23:33:29Z'} patch(operator_api_client, get_detail_url(new_parking), parking_data, 200) new_parking.refresh_from_db() assert new_parking.time_end.day == 12 # old day was 10
def test_zone_in_correct_domain_is_set_for_parking(operator_api_client, new_parking_data): domain_1 = EnforcementDomain.get_default_domain() domain_2 = EnforcementDomain.objects.create(code='ESP', name='Espoo') zone_1 = create_payment_zone(code=str(new_parking_data['zone']), number=new_parking_data['zone'], domain=domain_1) zone_2 = create_payment_zone(code=str(new_parking_data['zone']), number=new_parking_data['zone'], domain=domain_2) response_parking_data_1 = post(operator_api_client, list_url, new_parking_data) new_parking_data['domain'] = domain_2.code response_parking_data_2 = post(operator_api_client, list_url, new_parking_data) new_parking_1 = Parking.objects.get(id=response_parking_data_1['id']) new_parking_2 = Parking.objects.get(id=response_parking_data_2['id']) assert new_parking_1.zone == zone_1 assert new_parking_2.zone == zone_2
def test_patch_parking(operator_api_client, parking): detail_url = get_detail_url(parking) new_zone_number = parking.zone.number % 3 + 1 new_zone = create_payment_zone( code=str(new_zone_number), number=new_zone_number, id=new_zone_number, domain=EnforcementDomain.get_default_domain()) response_parking_data = patch(operator_api_client, detail_url, {'zone': new_zone.id}) # check data in the response check_response_parking_data({'zone': new_zone.id}, response_parking_data) # check the actual object parking.refresh_from_db() assert parking.zone.number == new_zone.number assert parking.domain.code == response_parking_data['domain']
def test_post_zone_as_string_or_integer(operator_api_client, new_parking_data): new_parking_data['zone'] = '2' create_payment_zone(code=str(new_parking_data['zone']), domain=EnforcementDomain.get_default_domain()) response_parking_data = post(operator_api_client, list_url, new_parking_data) assert response_parking_data['zone'] == 2 new_parking_data['zone'] = 5 create_payment_zone(code=str(new_parking_data['zone']), domain=EnforcementDomain.get_default_domain()) response_parking_data = post(operator_api_client, list_url, new_parking_data) assert response_parking_data['zone'] == 5 new_parking_data['zone'] = '5A' create_payment_zone(code=str(new_parking_data['zone']), domain=EnforcementDomain.get_default_domain()) response_parking_data = post(operator_api_client, list_url, new_parking_data) assert response_parking_data['zone'] == '5A'
def test_zone_casted_code(code, result): zone = create_payment_zone(code=code) assert zone.casted_code == result