コード例 #1
0
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
コード例 #2
0
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'
コード例 #3
0
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']
コード例 #4
0
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
コード例 #5
0
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
コード例 #6
0
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)
コード例 #7
0
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)
コード例 #8
0
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)
コード例 #9
0
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)
コード例 #10
0
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
コード例 #11
0
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']
コード例 #12
0
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)
コード例 #13
0
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
コード例 #14
0
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
コード例 #15
0
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
コード例 #16
0
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
コード例 #17
0
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
コード例 #18
0
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']
コード例 #19
0
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'
コード例 #20
0
def test_zone_casted_code(code, result):
    zone = create_payment_zone(code=code)
    assert zone.casted_code == result