Skip to content

Commit b468d31

Browse files
author
Ilyas Gasanov
committed
[DOP-19793] Add test & fix validator
1 parent bc0948d commit b468d31

File tree

5 files changed

+53
-15
lines changed

5 files changed

+53
-15
lines changed

docker-compose.test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ services:
9191
condition: service_healthy
9292
rabbitmq:
9393
condition: service_healthy
94-
profiles: [worker, s3, oracle, hdfs, hive, all]
94+
profiles: [worker, scheduler, s3, oracle, hdfs, hive, all]
9595

9696
test-postgres:
9797
image: postgres

syncmaster/db/models/group.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class Group(Base, TimestampMixin, DeletableMixin):
7777

7878
owner: Mapped[User] = relationship(User)
7979
members: Mapped[list[User]] = relationship(User, secondary="user_group")
80-
queue: Mapped[Queue] = relationship(back_populates="group")
80+
queue: Mapped[Queue] = relationship(back_populates="group", cascade="all, delete-orphan")
8181

8282
search_vector: Mapped[str] = mapped_column(
8383
TSVECTOR,

syncmaster/schemas/v1/queue.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# SPDX-FileCopyrightText: 2023-2024 MTS PJSC
22
# SPDX-License-Identifier: Apache-2.0
3-
from pydantic import BaseModel, Field, constr, model_validator
4-
from pydantic.json_schema import SkipJsonSchema
3+
from pydantic import BaseModel, Field, computed_field, constr
54

65
from syncmaster.schemas.v1.page import PageSchema
76

@@ -13,14 +12,11 @@ class CreateQueueSchema(BaseModel):
1312
)
1413
group_id: int = Field(..., description="Queue owner group id")
1514
description: str = Field(default="", description="Additional description")
16-
slug: SkipJsonSchema[str] = Field(description="Generated slug for unique queue identification")
17-
18-
@model_validator(mode="before")
19-
def generate_slug(cls, values):
20-
if "group_id" not in values or "name" not in values:
21-
raise ValueError("Fields name and group_id are required")
22-
values["slug"] = f"{values["group_id"]}-{values["name"]}"
23-
return values
15+
16+
@computed_field
17+
@property
18+
def slug(self) -> str:
19+
return f"{self.group_id}-{self.name}"
2420

2521

2622
class ReadQueueSchema(BaseModel):

tests/test_unit/conftest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ async def user_with_many_roles(session: AsyncSession, settings: Settings, simple
170170

171171

172172
@pytest_asyncio.fixture
173-
async def empty_group(session: AsyncSession, settings) -> MockGroup:
173+
async def empty_group(session: AsyncSession, settings) -> AsyncGenerator[MockGroup, None]:
174174
owner = await create_user(
175175
session=session,
176176
username="empty_group_owner",
@@ -196,7 +196,7 @@ async def empty_group(session: AsyncSession, settings) -> MockGroup:
196196

197197

198198
@pytest_asyncio.fixture
199-
async def group(session: AsyncSession, settings: Settings) -> MockGroup:
199+
async def group(session: AsyncSession, settings: Settings) -> AsyncGenerator[MockGroup, None]:
200200
owner = await create_user(
201201
session=session,
202202
username="notempty_group_owner",
@@ -240,7 +240,7 @@ async def group(session: AsyncSession, settings: Settings) -> MockGroup:
240240
async def mock_group(
241241
session: AsyncSession,
242242
settings: Settings,
243-
):
243+
) -> AsyncGenerator[MockGroup, None]:
244244
group_owner = await create_user(
245245
session=session,
246246
username=f"{secrets.token_hex(5)}_group_connection_owner",

tests/test_unit/test_queue/test_create_queue.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,3 +399,45 @@ async def test_maintainer_plus_can_not_create_queue_with_duplicate_name_error(
399399
"details": None,
400400
},
401401
}
402+
403+
404+
async def test_maintainer_plus_can_create_queues_with_the_same_name_but_diff_groups(
405+
client: AsyncClient,
406+
session: AsyncSession,
407+
role_maintainer_plus: UserTestRoles,
408+
mock_group: MockGroup,
409+
group: MockGroup,
410+
):
411+
# Arrange
412+
mock_group_user = mock_group.get_member_of_role(role_maintainer_plus)
413+
group_user = group.get_member_of_role(role_maintainer_plus)
414+
415+
# Act
416+
await client.post(
417+
"v1/queues",
418+
headers={"Authorization": f"Bearer {mock_group_user.token}"},
419+
json={
420+
"name": "New_queue",
421+
"description": "Some interesting description",
422+
"group_id": mock_group.group.id,
423+
},
424+
)
425+
result = await client.post(
426+
"v1/queues",
427+
headers={"Authorization": f"Bearer {group_user.token}"},
428+
json={
429+
"name": "New_queue",
430+
"description": "Some interesting description",
431+
"group_id": group.group.id,
432+
},
433+
)
434+
435+
# Assert
436+
assert result.status_code == 200
437+
assert result.json() == {
438+
"id": result.json()["id"],
439+
"name": "New_queue",
440+
"description": "Some interesting description",
441+
"group_id": group.group.id,
442+
"slug": f"{group.group.id}-New_queue",
443+
}

0 commit comments

Comments
 (0)