test(core): Ensure that a ticket milestone comes from the same assigned project

ref: #744 #723
This commit is contained in:
2025-05-12 04:46:44 +09:30
parent 01b4a681da
commit 764f1b20d9
2 changed files with 107 additions and 5 deletions

View File

@ -77,16 +77,17 @@ Describe in detail the following:
### 🧪 Tests
- Unit Tests
- [ ] API Render (fields)
- [ ] [Model](https://nofusscomputing.com/projects/centurion_erp/development/models/#tests)
- [ ] Serializer
- [ ] ViewSet
- Function Test
- [ ] ViewSet
- [ ] History API Render (fields)
- [ ] History Entries
- [ ] API Metadata
- [ ] API Permissions
- [ ] API Render (fields)
- [ ] History Entries
- [ ] History API Render (fields)
- [ ] Model
- [ ] Serializer
- [ ] ViewSet
## ✅ Requirements
@ -95,6 +96,24 @@ A Requirement is a must have. In addition will also be tested.
- [ ] Must have a [model_tag](https://nofusscomputing.com/projects/centurion_erp/user/core/markdown/#model-reference)
<!--
When detailing requirements the following must be taken into account:
- what the user should be able to do
- what the user should not be able to do
- what should occur when a user performs an action
-->
- Functional Requirements
- Non-Functional Requirements
---
<!-- Add additional requirement here and as a check box list -->

View File

@ -241,6 +241,7 @@ class TicketBaseSerializerTestCases:
)
request.cls.valid_data.update({
'organization': request.cls.organization,
'category': TicketCategory.objects.create(
organization = request.cls.organization,
name = 'a category'
@ -262,10 +263,28 @@ class TicketBaseSerializerTestCases:
})
project_two = Project.objects.create(
organization = request.cls.organization,
name = 'project_two'
)
request.cls.project_milestone_two = ProjectMilestone.objects.create(
organization = request.cls.organization,
name = 'project milestone two',
project = project_two
)
yield
with django_db_blocker.unblock():
request.cls.project_milestone_two.delete()
project_two.delete()
request.cls.entity_user.delete()
parent_ticket.delete()
@ -335,6 +354,70 @@ class TicketBaseSerializerTestCases:
def test_serializer_valid_data_milestone_from_different_project_not_valid(self, fake_view, create_serializer):
"""Serializer Validation Check
Ensure that when creating an object with valid data, no validation
error occurs.
"""
valid_data = self.valid_data.copy()
valid_data['milestone'] = self.project_milestone_two.id
view_set = fake_view(
user = self.view_user,
_has_import = True,
_has_triage = True
)
serializer = create_serializer(
context = {
'request': view_set.request,
'view': view_set,
},
data = valid_data
)
assert not serializer.is_valid(raise_exception = False)
def test_serializer_valid_data_milestone_from_different_project_raises_exception(self, fake_view, create_serializer):
"""Serializer Validation Check
Ensure that when creating an object with valid data, no validation
error occurs.
"""
valid_data = self.valid_data.copy()
valid_data['milestone'] = self.project_milestone_two.id
view_set = fake_view(
user = self.view_user,
_has_import = True,
_has_triage = True
)
with pytest.raises(ValidationError) as err:
serializer = create_serializer(
context = {
'request': view_set.request,
'view': view_set,
},
data = valid_data
)
serializer.is_valid(raise_exception = True)
assert err.value.get_codes()['milestone'][0] == 'milestone_same_project'
def test_serializer_valid_data_missing_field_raises_exception(self, fake_view, parameterized, param_key_test_data,
create_serializer,
param_value,