예제 #1
0
def test_create_invalid_id():
    citizens = [create_default_citizen(citizen_id=-1)]
    payload = {'citizens': citizens}

    response = requests.post(url=f'{base_url}/imports', json=payload)
    assert response.status_code == 400
    assert response.json()['error'] == 'citizen_id cannot be negative'
예제 #2
0
def created_import():
    citizens = [create_default_citizen(citizen_id=i) for i in range(1, 6)]
    payload = {'citizens': citizens}

    response = requests.post(url=f'{base_url}/imports', json=payload)
    assert response.status_code == 201
    yield response.json()['data']['import_id']
예제 #3
0
def test_create_invalid_street():
    citizens = [create_default_citizen(citizen_id=1, street='---')]
    payload = {'citizens': citizens}

    response = requests.post(url=f'{base_url}/imports', json=payload)
    assert response.status_code == 400
    assert response.json()['error'] == 'street name should contain at least' \
                                       ' one letter or one digit'
예제 #4
0
def test_create_invalid_relatives():
    citizens = [create_default_citizen(
        citizen_id=i,
        relatives=[1]
    ) for i in range(1, 4)]
    payload = {'citizens': citizens}

    response = requests.post(url=f'{base_url}/imports', json=payload)
    assert response.status_code == 400
    assert response.json()['error'] == 'invalid relatives'
예제 #5
0
def test_create_valid():
    citizens = []
    for i in range(1, 100):
        birth_year = 1950 + i % 50
        citizen = create_default_citizen(
            citizen_id=i,
            birth_date=f'03.02.{birth_year}'
        )
        citizens.append(citizen)
    payload = {'citizens': citizens}

    response = requests.post(url=f'{base_url}/imports', json=payload)
    assert response.status_code == 201
    import_id = response.json()['data']['import_id']

    response = requests.get(url=f'{base_url}/imports/{import_id}/citizens')
    assert response.status_code == 200
    assert response.json()['data'] == payload['citizens']
예제 #6
0
def test_statistics():
    citizens, ages = [], {}
    towns = ['Moscow', 'London', 'Paris', 'New-York']
    for i in range(1, 2000):
        year = 1940 + random.randint(0, 60)
        birth_date = f'05.04.{year}'
        town = towns[i % len(towns)]

        citizen = create_default_citizen(
            citizen_id=i,
            birth_date=birth_date,
            town=town
        )
        citizens.append(citizen)

        birth_date = datetime.strptime(citizen['birth_date'], '%d.%m.%Y')
        age = tools.calculate_age(birth_date)
        ages[town] = ages[town] + [age] if town in ages.keys() else [age]

    payload = {'citizens': citizens}
    response = requests.post(url=f'{base_url}/imports', json=payload)
    assert response.status_code == 201
    import_id = response.json()['data']['import_id']

    response = requests.get(
        url=f'{base_url}/imports/{import_id}/towns/stat/percentile/age')
    assert response.status_code == 200

    expected_data = []
    for (key, value) in ages.items():
        ages_for_town = np.array(value)
        town_info = {'town': key}
        for percent in [50, 75, 99]:
            town_info[f'p{percent}'] = \
                round(np.percentile(ages_for_town, percent), 2)
        expected_data.append(town_info)

    statistics = response.json()['data']
    for town in towns:
        d1 = [d for d in statistics if d['town'] == town][0]
        d2 = [d for d in expected_data if d['town'] == town][0]
        assert d1 == d2
예제 #7
0
def test_bitrhdays():
    may, september = 5, 9
    citizens = [create_default_citizen(
        citizen_id=i,
        birth_date=f'26.{may}.1988'
    ) for i in range(1, 6)]

    # input data
    actor = 1
    citizens[actor - 1]['relatives'] += [2, 3, 4]
    for relative in citizens[actor - 1]['relatives']:
        citizens[relative - 1]['relatives'] = [actor]
    # expected result
    may_info = [dict(citizen_id=i,
                     presents=len(citizens[i - 1]['relatives'])
                     ) for i in range(1, 5)]

    # input data
    actor = 5
    citizens[actor - 1]['relatives'] += [actor]
    citizens[actor - 1]['birth_date'] = f'26.{september}.1988'
    # expected result
    september_info = [dict(citizen_id=actor,
                           presents=len(citizens[actor - 1]['relatives']))]

    payload = {'citizens': citizens}

    response = requests.post(url=f'{base_url}/imports', json=payload)
    assert response.status_code == 201
    import_id = response.json()['data']['import_id']

    response = requests.get(
        url=f'{base_url}/imports/{import_id}/citizens/birthdays')
    assert response.status_code == 200

    assert response.json()['data'][str(may)] == may_info
    assert response.json()['data'][str(september)] == september_info
    for month, month_info in response.json()['data'].items():
        if int(month) not in [september, may]:
            assert month_info == []