@@ -211,8 +211,16 @@ def test_updating_non_empty_group_does_not_create_extra_sitemap(api_client, supe
211211# ---- DomainGroup destroy ----------------------------------------------------
212212
213213
214+ @pytest .fixture
215+ def guard_group (superuser ):
216+ # destroy 테스트들이 "마지막 그룹 삭제 불가" 규칙에 걸리지 않도록 별도의 그룹을 시드.
217+ return DomainGroup .objects .create (
218+ name = "guard" , domains = ["guard.pycon.kr" ], created_by = superuser , updated_by = superuser
219+ )
220+
221+
214222@pytest .mark .django_db
215- def test_destroy_domain_group_with_lone_root_succeeds_leaving_page (api_client , superuser ):
223+ def test_destroy_domain_group_with_lone_root_succeeds_leaving_page (api_client , superuser , guard_group ):
216224 # lone root만 함께 삭제. Page/Section은 보존 (dangling이 되더라도 의도적 삭제 회피로 안전성 우선).
217225 group = DomainGroup .objects .create (name = "A" , domains = ["a.pycon.kr" ], created_by = superuser , updated_by = superuser )
218226 page = Page .objects .create (title = "A" , subtitle = "A" , created_by = superuser , updated_by = superuser )
@@ -235,7 +243,7 @@ def test_destroy_domain_group_with_lone_root_succeeds_leaving_page(api_client, s
235243
236244
237245@pytest .mark .django_db
238- def test_destroy_domain_group_with_multiple_sitemaps_rejected (api_client , superuser ):
246+ def test_destroy_domain_group_with_multiple_sitemaps_rejected (api_client , superuser , guard_group ):
239247 group = DomainGroup .objects .create (name = "A" , domains = ["a.pycon.kr" ], created_by = superuser , updated_by = superuser )
240248 Sitemap .objects .create (name = "r1" , domain_group = group , route_code = "" , created_by = superuser , updated_by = superuser )
241249 Sitemap .objects .create (
@@ -250,7 +258,7 @@ def test_destroy_domain_group_with_multiple_sitemaps_rejected(api_client, superu
250258
251259
252260@pytest .mark .django_db
253- def test_destroy_domain_group_with_sitemap_having_children_rejected (api_client , superuser ):
261+ def test_destroy_domain_group_with_sitemap_having_children_rejected (api_client , superuser , guard_group ):
254262 group = DomainGroup .objects .create (name = "A" , domains = ["a.pycon.kr" ], created_by = superuser , updated_by = superuser )
255263 parent = Sitemap .objects .create (
256264 name = "parent" , domain_group = group , route_code = "" , created_by = superuser , updated_by = superuser
@@ -271,6 +279,16 @@ def test_destroy_domain_group_with_sitemap_having_children_rejected(api_client,
271279 assert group .deleted_at is None
272280
273281
282+ @pytest .mark .django_db
283+ def test_destroy_last_domain_group_rejected (api_client , domain_group ):
284+ # 유일한 그룹은 삭제 불가
285+ assert DomainGroup .objects .filter_active ().count () == 1
286+ response = api_client .delete (reverse ("v1:admin-domain-group-detail" , kwargs = {"pk" : domain_group .id }))
287+ assert response .status_code == http .HTTPStatus .BAD_REQUEST
288+ domain_group .refresh_from_db ()
289+ assert domain_group .deleted_at is None
290+
291+
274292# ---- Sitemap admin serializer exposes domain_group --------------------------
275293
276294
0 commit comments