Add settings page and configurable network map types.

Let users define sector/circle labels and geometry per map type, choose a type when creating maps, and sync types through local backup and API migrations.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-25 10:45:34 +03:00
co-authored by Cursor
parent cafc7335ad
commit e80d0d0e88
29 changed files with 1370 additions and 117 deletions
@@ -0,0 +1,69 @@
import pytest
from contacts.models import NetworkMap, NetworkMapType
@pytest.mark.django_db
def test_network_map_types_list(api_client):
response = api_client.get('/api/v1/network-map-types/')
assert response.status_code == 200
assert response.data['count'] >= 1
default = next(r for r in response.data['results'] if r['is_default'])
assert len(default['sectors']) == 6
assert len(default['circles']) == 3
@pytest.mark.django_db
def test_network_map_type_create(api_client):
response = api_client.post('/api/v1/network-map-types/', {
'name': 'Корпоративная',
'sectors': [{'key': 'team', 'label': 'Команда'}],
'circles': [{'key': 'inner', 'label': 'Ядро'}],
}, format='json')
assert response.status_code == 201
assert response.data['name'] == 'Корпоративная'
@pytest.mark.django_db
def test_network_map_type_create_validation(api_client):
response = api_client.post('/api/v1/network-map-types/', {
'name': 'Пустая',
'sectors': [],
'circles': [{'key': 'a', 'label': 'A'}],
}, format='json')
assert response.status_code == 400
@pytest.mark.django_db
def test_network_map_type_delete_default_forbidden(api_client):
default_type = NetworkMapType.objects.filter(is_default=True).first()
response = api_client.delete(f'/api/v1/network-map-types/{default_type.id}/')
assert response.status_code == 400
@pytest.mark.django_db
def test_network_map_create_with_type(api_client):
map_type = NetworkMapType.objects.create(
name='Тестовая',
sectors=[{'key': 'a', 'label': 'A'}],
circles=[{'key': 'b', 'label': 'B'}],
)
response = api_client.post('/api/v1/network-maps/', {
'name': 'Карта 1',
'description': '',
'map_type': map_type.id,
}, format='json')
assert response.status_code == 201
assert response.data['map_type'] == map_type.id
@pytest.mark.django_db
def test_network_map_type_delete_in_use(api_client):
map_type = NetworkMapType.objects.create(
name='Занятая',
sectors=[{'key': 'a', 'label': 'A'}],
circles=[{'key': 'b', 'label': 'B'}],
)
NetworkMap.objects.create(name='Карта', map_type=map_type)
response = api_client.delete(f'/api/v1/network-map-types/{map_type.id}/')
assert response.status_code == 400