def test_citizen_get_with_relatives(): data_import = ImportFactory.create() citizens = [ CitizenFactory.create(data_import_id=data_import.pk), CitizenFactory.create(data_import_id=data_import.pk), CitizenFactory.create(data_import_id=data_import.pk), CitizenFactory.create(data_import_id=data_import.pk), ] relations = [ CitizenRelations(from_citizen=citizens[0], to_citizen_id=citizens[0].citizen_id), CitizenRelations(from_citizen=citizens[0], to_citizen_id=citizens[1].citizen_id), CitizenRelations(from_citizen=citizens[1], to_citizen_id=citizens[0].citizen_id), CitizenRelations(from_citizen=citizens[0], to_citizen_id=citizens[2].citizen_id), CitizenRelations(from_citizen=citizens[2], to_citizen_id=citizens[0].citizen_id), ] CitizenRelations.objects.bulk_create(relations) citizens = Citizen.objects.all().order_by('id') assert set(citizens[0].relatives) == { citizens[0].citizen_id, citizens[1].citizen_id, citizens[2].citizen_id } assert citizens[1].relatives == [citizens[0].citizen_id] assert citizens[2].relatives == [citizens[0].citizen_id] assert citizens[3].relatives == []
def test_citizens_patch_should_create_relatives(): data_import = ImportFactory() citizens = [ CitizenFactory(citizen_id=1, town="Москва", street="Льва Толстого", building="16к7стр5", apartment=7, name="Иванов Иван Иванович", birth_date=datetime.date(1994, 1, 1), gender="male", data_import_id=data_import.pk), CitizenFactory(citizen_id=200, town="Москва", street="Льва Толстого", building="16к7стр7", apartment=7, name="Иванов Сергей Иванович", birth_date=datetime.date(1980, 2, 2), gender="female", data_import_id=data_import.pk) ] client = APIClient() url = reverse('imports-citizen-update', kwargs={ 'pk': data_import.pk, 'citizen_id': 1 }) r = client.patch(url, data={ "town": "Санкт-Петербург", "relatives": [200] }, format='json') assert r.status_code == status.HTTP_200_OK, r.json() citizens[1] = Citizen.objects.filter(pk=citizens[1].pk)[0] assert citizens[1].relatives == [1] assert r.json() == { "data": { "citizen_id": 1, "town": "Санкт-Петербург", "street": "Льва Толстого", "building": "16к7стр5", "apartment": 7, "name": "Иванов Иван Иванович", "birth_date": "01.01.1994", "gender": "male", "relatives": [200] } }
def test_citizen_remove_all_relatives_should_remove(): data_import = ImportFactory.create() citizens: List[Citizen] = [ CitizenFactory.create(citizen_id=0, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=4, year=2000)), CitizenFactory.create(citizen_id=1, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=4, year=1994)), CitizenFactory.create(citizen_id=2, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=8, year=2000)), CitizenFactory.create(citizen_id=3, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=9, year=1990)), ] relations = [ CitizenRelations(from_citizen=citizens[0], to_citizen_id=citizens[0].citizen_id), CitizenRelations(from_citizen=citizens[0], to_citizen_id=citizens[1].citizen_id), CitizenRelations(from_citizen=citizens[0], to_citizen_id=citizens[2].citizen_id), CitizenRelations(from_citizen=citizens[1], to_citizen_id=citizens[0].citizen_id), CitizenRelations(from_citizen=citizens[2], to_citizen_id=citizens[0].citizen_id), CitizenRelations(from_citizen=citizens[3], to_citizen_id=citizens[2].citizen_id), CitizenRelations(from_citizen=citizens[2], to_citizen_id=citizens[3].citizen_id), ] CitizenRelations.objects.bulk_create(relations) citizens[0].remove_all_relatives() citizens_expected = Citizen.objects.all().order_by('id') assert citizens_expected[0].relatives == [] assert citizens_expected[1].relatives == [] assert citizens_expected[2].relatives == [3] assert citizens_expected[3].relatives == [2]
def test_should_get_citizen(): i = ImportFactory.create() citizens: List[Citizen] = [ CitizenFactory.create(data_import_id=i.pk, relatives=[2], citizen_id=1), CitizenFactory.create(data_import_id=i.pk, relatives=[1], citizen_id=2) ] citizens = Citizen.objects.filter(id__in=[citizens[0].pk, citizens[1].pk]) client = APIClient() url = reverse('imports-citizens', kwargs={'pk': i.pk}) r = client.get(url, format='json') assert r.status_code == status.HTTP_200_OK, r.json() assert r.json() == { "data": [ { "citizen_id": citizens[0].citizen_id, "town": citizens[0].town, "street": citizens[0].street, "building": citizens[0].building, "apartment": citizens[0].apartment, "name": citizens[0].name, "birth_date": citizens[0].birth_date.strftime(settings.DATE_FORMAT), "gender": citizens[0].gender, "relatives": [citizens[1].citizen_id] }, { "citizen_id": citizens[1].citizen_id, "town": citizens[1].town, "street": citizens[1].street, "building": citizens[1].building, "apartment": citizens[1].apartment, "name": citizens[1].name, "birth_date": citizens[1].birth_date.strftime(settings.DATE_FORMAT), "gender": citizens[1].gender, "relatives": [citizens[0].citizen_id] }, ] }
def test_citizens_patch_should_return_400_on_wrong_relative(): data_import = ImportFactory() CitizenFactory(citizen_id=1, town="Москва", street="Льва Толстого", building="16к7стр5", apartment=7, name="Иванов Иван Иванович", birth_date=datetime.date(1994, 1, 1), gender="male", data_import_id=data_import.pk) CitizenFactory(citizen_id=2, town="Москва", street="Льва Толстого", building="16к7стр7", apartment=7, name="Иванов Сергей Иванович", birth_date=datetime.date(1980, 2, 2), gender="female", data_import_id=data_import.pk) client = APIClient() url = reverse('imports-citizen-update', kwargs={ 'pk': data_import.pk, 'citizen_id': 1 }) r = client.patch(url, data={ "town": "Санкт-Петербург", "relatives": [4] }, format='json') assert r.status_code == status.HTTP_400_BAD_REQUEST, r.json()
def test_import_get_birthdays(): # citizens: # 0 - [0, 1, 2] april # 1 - [0] april # 2 - [2] august # 3 - [] september data_import = ImportFactory.create() citizens = [ CitizenFactory.create(citizen_id=0, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=4, year=2000)), CitizenFactory.create(citizen_id=1, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=4, year=1994)), CitizenFactory.create(citizen_id=2, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=8, year=2000)), CitizenFactory.create(citizen_id=3, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=9, year=1990)), ] relations = [ CitizenRelations(from_citizen=citizens[0], to_citizen_id=citizens[0].citizen_id), CitizenRelations(from_citizen=citizens[0], to_citizen_id=citizens[1].citizen_id), CitizenRelations(from_citizen=citizens[0], to_citizen_id=citizens[2].citizen_id), CitizenRelations(from_citizen=citizens[1], to_citizen_id=citizens[0].citizen_id), CitizenRelations(from_citizen=citizens[2], to_citizen_id=citizens[0].citizen_id), ] CitizenRelations.objects.bulk_create(relations) assert list(data_import.get_months_birthdays_stats().order_by( 'month', 'to_citizen_id')) == [{ 'birthdays': 2, 'month': 4, 'to_citizen_id': 0 }, { 'birthdays': 1, 'month': 4, 'to_citizen_id': 1 }, { 'birthdays': 1, 'month': 4, 'to_citizen_id': 2 }, { 'birthdays': 1, 'month': 8, 'to_citizen_id': 0 }]
def test_birthdays_should_return_correct_data(): data_import = ImportFactory.create() citizens = [ CitizenFactory.create(citizen_id=0, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=4, year=2000), relatives=[0, 1, 2]), # NOQA CitizenFactory.create(citizen_id=1, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=4, year=1994), relatives=[0]), # NOQA CitizenFactory.create(citizen_id=2, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=8, year=2000), relatives=[0]), # NOQA CitizenFactory.create(citizen_id=3, data_import_id=data_import.pk, birth_date=datetime.date(day=1, month=9, year=1990)), # NOQA ] client = APIClient() url = reverse('imports-citizens-birthdays', kwargs={'pk': data_import.pk}) r = client.get(url, format='json') assert r.status_code == status.HTTP_200_OK assert r.json() == { "data": { "1": [], "2": [], "3": [], "4": [ { "citizen_id": citizens[0].citizen_id, "presents": 2 }, { "citizen_id": citizens[1].citizen_id, "presents": 1 }, { "citizen_id": citizens[2].citizen_id, "presents": 1 }, ], "5": [], "6": [], "7": [], "8": [ { "citizen_id": citizens[0].citizen_id, "presents": 1 }, ], "9": [], "10": [], "11": [], "12": [], } }