Esempio n. 1
0
def test_generate_citizens():
    # Между двумя жителями может быть родственная связь
    generate_citizens(citizens_num=2, relations_num=1)

    # Между двумя жителями не может быть двух родственных связей
    with pytest.raises(ValueError):
        generate_citizens(citizens_num=2, relations_num=2)
Esempio n. 2
0
async def test_race_condition(api_client, url, final_relatives_number):
    # Создаем трех жителей, не родственников с citizen_id #1, #2 и #3.
    data = generate_citizens(citizens_num=3, start_citizen_id=1)
    import_id = await import_data(api_client, data)

    # Житель, которому мы будем добавлять родственников
    citizen_id = data[0]['citizen_id']

    # Мы хотим отправить два конкурентных запроса с добавлением новой
    # родственной связи
    seeds = [{
        'relatives': [data[1]['citizen_id']]
    }, {
        'relatives': [data[2]['citizen_id']]
    }]
    await asyncio.gather(*[
        patch_citizen(
            api_client, import_id, citizen_id, data=seed, str_or_url=url)
        for seed in seeds
    ])

    # Проверяем кол-во родственников у изменяемого жителя
    # (должно быть равно 1).
    citizens = {
        citizen['citizen_id']: citizen
        for citizen in await get_citizens(api_client, import_id)
    }
    assert len(citizens[citizen_id]['relatives']) == final_relatives_number
async def test_patch_citizen_add_nonexistent_relative(api_client):
    """
    Сервис должен запрещать добавлять жителю несуществующего родственника.
    """
    dataset = generate_citizens(citizens_num=1)
    import_id = await import_data(api_client, dataset)

    await patch_citizen(api_client,
                        import_id,
                        dataset[0]['citizen_id'],
                        data={'relatives': [999]},
                        expected_status=HTTPStatus.BAD_REQUEST)
async def test_patch_citizen_birthday_in_future(api_client):
    """
    Сервис должен запрещать устанавливать дату рождения в будущем.
    """
    dataset = generate_citizens(citizens_num=1)
    import_id = await import_data(api_client, dataset)

    birth_date = (date.today() + timedelta(days=1)).strftime(BIRTH_DATE_FORMAT)
    await patch_citizen(api_client,
                        import_id,
                        dataset[0]['citizen_id'],
                        data={'birth_date': birth_date},
                        expected_status=HTTPStatus.BAD_REQUEST)
Esempio n. 5
0
 def make_dataset(self):
     citizens = [
         # Первого жителя создаем с родственником. В запросе к
         # PATCH-обработчику список relatives будет содержать только другого
         # жителя, что потребует выполнения максимального кол-ва запросов
         # (как на добавление новой родственной связи, так и на удаление
         # существующей).
         generate_citizen(citizen_id=1, relatives=[2]),
         generate_citizen(citizen_id=2, relatives=[1]),
         *generate_citizens(
             citizens_num=9998, relations_num=1000, start_citizen_id=3)
     ]
     return {citizen['citizen_id']: citizen for citizen in citizens}
Esempio n. 6
0
        generate_citizen(citizen_id=1,
                         name='Джейн',
                         gender='male',
                         birth_date='13.09.1945',
                         town='Нью-Йорк',
                         relatives=[1]),
    ], HTTPStatus.CREATED),

    # Выгрузка с максимально длинными/большими значениями.
    # aiohttp должен разрешать запросы такого размера, а обработчик не должен
    # на них падать.
    (generate_citizens(citizens_num=10000,
                       relations_num=1000,
                       start_citizen_id=MAX_INTEGER - 10000,
                       gender='female',
                       name=LONGEST_STR,
                       town=LONGEST_STR,
                       street=LONGEST_STR,
                       building=LONGEST_STR,
                       apartment=MAX_INTEGER), HTTPStatus.CREATED),

    # Пустая выгрузка
    # Обработчик не должен падать на таких данных.
    ([], HTTPStatus.CREATED),

    # Дата рождения - текущая дата
    ([generate_citizen(birth_date=(date.today()).strftime(BIRTH_DATE_FORMAT))],
     HTTPStatus.CREATED),

    # Дата рождения некорректная (в будущем)
    ([