Example #1
0
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 == []
Example #2
0
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]
        }
    }
Example #3
0
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]
Example #4
0
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]
            },
        ]
    }
Example #5
0
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()
Example #6
0
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
        }]
Example #7
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": [],
        }
    }