test(functional): Move functional test cases to relevant functional test dir
ref: #15 #375 #382
This commit is contained in:
74
app/itim/tests/functional/cluster/test_cluster_serializer.py
Normal file
74
app/itim/tests/functional/cluster/test_cluster_serializer.py
Normal file
@ -0,0 +1,74 @@
|
||||
import pytest
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from rest_framework.exceptions import ValidationError
|
||||
|
||||
from access.models import Organization
|
||||
|
||||
from itim.serializers.cluster import Cluster, ClusterModelSerializer
|
||||
|
||||
|
||||
|
||||
class ClusterValidationAPI(
|
||||
TestCase,
|
||||
):
|
||||
|
||||
model = Cluster
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
"""Setup Test
|
||||
|
||||
1. Create an org
|
||||
2. Create an item
|
||||
"""
|
||||
|
||||
organization = Organization.objects.create(name='test_org')
|
||||
|
||||
self.organization = organization
|
||||
|
||||
self.item = self.model.objects.create(
|
||||
organization=organization,
|
||||
name = 'os name',
|
||||
)
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_no_name(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating and no name is provided a validation error occurs
|
||||
"""
|
||||
|
||||
with pytest.raises(ValidationError) as err:
|
||||
|
||||
serializer = ClusterModelSerializer(data={
|
||||
"organization": self.organization.id,
|
||||
})
|
||||
|
||||
serializer.is_valid(raise_exception = True)
|
||||
|
||||
assert err.value.get_codes()['name'][0] == 'required'
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_self_not_parent(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if assiging itself as parent a validation error occurs
|
||||
"""
|
||||
|
||||
with pytest.raises(ValidationError) as err:
|
||||
|
||||
serializer = ClusterModelSerializer(
|
||||
self.item,
|
||||
data={
|
||||
"parent_cluster": self.item.id,
|
||||
},
|
||||
partial = True
|
||||
)
|
||||
|
||||
serializer.is_valid(raise_exception = True)
|
||||
|
||||
assert err.value.get_codes()['parent_cluster'] == 'parent_not_self'
|
173
app/itim/tests/functional/cluster/test_cluster_viewset.py
Normal file
173
app/itim/tests/functional/cluster/test_cluster_viewset.py
Normal file
@ -0,0 +1,173 @@
|
||||
import pytest
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.test import TestCase
|
||||
|
||||
from access.models import Organization, Team, TeamUsers, Permission
|
||||
|
||||
from api.tests.abstract.api_permissions_viewset import APIPermissions
|
||||
|
||||
from itim.models.clusters import Cluster
|
||||
|
||||
|
||||
|
||||
class ClusterPermissionsAPI(TestCase, APIPermissions):
|
||||
|
||||
model = Cluster
|
||||
|
||||
app_namespace = 'v2'
|
||||
|
||||
url_name = '_api_v2_cluster'
|
||||
|
||||
change_data = {'name': 'device-change'}
|
||||
|
||||
delete_data = {}
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
"""Setup Test
|
||||
|
||||
1. Create an organization for user and item
|
||||
. create an organization that is different to item
|
||||
2. Create a team
|
||||
3. create teams with each permission: view, add, change, delete
|
||||
4. create a user per team
|
||||
"""
|
||||
|
||||
organization = Organization.objects.create(name='test_org')
|
||||
|
||||
self.organization = organization
|
||||
|
||||
different_organization = Organization.objects.create(name='test_different_organization')
|
||||
|
||||
|
||||
view_permissions = Permission.objects.get(
|
||||
codename = 'view_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
view_team = Team.objects.create(
|
||||
team_name = 'view_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
view_team.permissions.set([view_permissions])
|
||||
|
||||
|
||||
|
||||
add_permissions = Permission.objects.get(
|
||||
codename = 'add_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
add_team = Team.objects.create(
|
||||
team_name = 'add_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
add_team.permissions.set([add_permissions])
|
||||
|
||||
|
||||
|
||||
change_permissions = Permission.objects.get(
|
||||
codename = 'change_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
change_team = Team.objects.create(
|
||||
team_name = 'change_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
change_team.permissions.set([change_permissions])
|
||||
|
||||
|
||||
|
||||
delete_permissions = Permission.objects.get(
|
||||
codename = 'delete_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
delete_team = Team.objects.create(
|
||||
team_name = 'delete_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
delete_team.permissions.set([delete_permissions])
|
||||
|
||||
|
||||
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
|
||||
|
||||
|
||||
self.view_user = User.objects.create_user(username="test_user_view", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = view_team,
|
||||
user = self.view_user
|
||||
)
|
||||
|
||||
|
||||
self.item = self.model.objects.create(
|
||||
organization = self.organization,
|
||||
name = 'one-add'
|
||||
)
|
||||
|
||||
|
||||
self.url_view_kwargs = {'pk': self.item.id}
|
||||
|
||||
self.add_data = {
|
||||
'name': 'team-post',
|
||||
'organization': self.organization.id,
|
||||
}
|
||||
|
||||
|
||||
self.add_user = User.objects.create_user(username="test_user_add", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = add_team,
|
||||
user = self.add_user
|
||||
)
|
||||
|
||||
self.change_user = User.objects.create_user(username="test_user_change", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = change_team,
|
||||
user = self.change_user
|
||||
)
|
||||
|
||||
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = delete_team,
|
||||
user = self.delete_user
|
||||
)
|
||||
|
||||
|
||||
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
|
||||
|
||||
|
||||
different_organization_team = Team.objects.create(
|
||||
team_name = 'different_organization_team',
|
||||
organization = different_organization,
|
||||
)
|
||||
|
||||
different_organization_team.permissions.set([
|
||||
view_permissions,
|
||||
add_permissions,
|
||||
change_permissions,
|
||||
delete_permissions,
|
||||
])
|
||||
|
||||
TeamUsers.objects.create(
|
||||
team = different_organization_team,
|
||||
user = self.different_organization_user
|
||||
)
|
@ -0,0 +1,53 @@
|
||||
import pytest
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from rest_framework.exceptions import ValidationError
|
||||
|
||||
from access.models import Organization
|
||||
|
||||
from itim.serializers.cluster_type import ClusterType, ClusterTypeModelSerializer
|
||||
|
||||
|
||||
|
||||
class ClusterTypeValidationAPI(
|
||||
TestCase,
|
||||
):
|
||||
|
||||
model = ClusterType
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
"""Setup Test
|
||||
|
||||
1. Create an org
|
||||
2. Create an item
|
||||
"""
|
||||
|
||||
organization = Organization.objects.create(name='test_org')
|
||||
|
||||
self.organization = organization
|
||||
|
||||
self.item = self.model.objects.create(
|
||||
organization=organization,
|
||||
name = 'os name',
|
||||
)
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_no_name(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating and no name is provided a validation error occurs
|
||||
"""
|
||||
|
||||
with pytest.raises(ValidationError) as err:
|
||||
|
||||
serializer = ClusterTypeModelSerializer(data={
|
||||
"organization": self.organization.id,
|
||||
})
|
||||
|
||||
serializer.is_valid(raise_exception = True)
|
||||
|
||||
assert err.value.get_codes()['name'][0] == 'required'
|
||||
|
@ -0,0 +1,173 @@
|
||||
import pytest
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.test import TestCase
|
||||
|
||||
from access.models import Organization, Team, TeamUsers, Permission
|
||||
|
||||
from api.tests.abstract.api_permissions_viewset import APIPermissions
|
||||
|
||||
from itim.models.clusters import ClusterType
|
||||
|
||||
|
||||
|
||||
class ClusterTypePermissionsAPI(TestCase, APIPermissions):
|
||||
|
||||
model = ClusterType
|
||||
|
||||
app_namespace = 'v2'
|
||||
|
||||
url_name = '_api_v2_cluster_type'
|
||||
|
||||
change_data = {'name': 'device-change'}
|
||||
|
||||
delete_data = {}
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
"""Setup Test
|
||||
|
||||
1. Create an organization for user and item
|
||||
. create an organization that is different to item
|
||||
2. Create a team
|
||||
3. create teams with each permission: view, add, change, delete
|
||||
4. create a user per team
|
||||
"""
|
||||
|
||||
organization = Organization.objects.create(name='test_org')
|
||||
|
||||
self.organization = organization
|
||||
|
||||
different_organization = Organization.objects.create(name='test_different_organization')
|
||||
|
||||
|
||||
view_permissions = Permission.objects.get(
|
||||
codename = 'view_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
view_team = Team.objects.create(
|
||||
team_name = 'view_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
view_team.permissions.set([view_permissions])
|
||||
|
||||
|
||||
|
||||
add_permissions = Permission.objects.get(
|
||||
codename = 'add_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
add_team = Team.objects.create(
|
||||
team_name = 'add_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
add_team.permissions.set([add_permissions])
|
||||
|
||||
|
||||
|
||||
change_permissions = Permission.objects.get(
|
||||
codename = 'change_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
change_team = Team.objects.create(
|
||||
team_name = 'change_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
change_team.permissions.set([change_permissions])
|
||||
|
||||
|
||||
|
||||
delete_permissions = Permission.objects.get(
|
||||
codename = 'delete_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
delete_team = Team.objects.create(
|
||||
team_name = 'delete_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
delete_team.permissions.set([delete_permissions])
|
||||
|
||||
|
||||
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
|
||||
|
||||
|
||||
self.view_user = User.objects.create_user(username="test_user_view", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = view_team,
|
||||
user = self.view_user
|
||||
)
|
||||
|
||||
|
||||
self.item = self.model.objects.create(
|
||||
organization = self.organization,
|
||||
name = 'one-add'
|
||||
)
|
||||
|
||||
|
||||
self.url_view_kwargs = {'pk': self.item.id}
|
||||
|
||||
self.add_data = {
|
||||
'name': 'team-post',
|
||||
'organization': self.organization.id,
|
||||
}
|
||||
|
||||
|
||||
self.add_user = User.objects.create_user(username="test_user_add", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = add_team,
|
||||
user = self.add_user
|
||||
)
|
||||
|
||||
self.change_user = User.objects.create_user(username="test_user_change", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = change_team,
|
||||
user = self.change_user
|
||||
)
|
||||
|
||||
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = delete_team,
|
||||
user = self.delete_user
|
||||
)
|
||||
|
||||
|
||||
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
|
||||
|
||||
|
||||
different_organization_team = Team.objects.create(
|
||||
team_name = 'different_organization_team',
|
||||
organization = different_organization,
|
||||
)
|
||||
|
||||
different_organization_team.permissions.set([
|
||||
view_permissions,
|
||||
add_permissions,
|
||||
change_permissions,
|
||||
delete_permissions,
|
||||
])
|
||||
|
||||
TeamUsers.objects.create(
|
||||
team = different_organization_team,
|
||||
user = self.different_organization_user
|
||||
)
|
90
app/itim/tests/functional/port/test_port_serializer.py
Normal file
90
app/itim/tests/functional/port/test_port_serializer.py
Normal file
@ -0,0 +1,90 @@
|
||||
import pytest
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from rest_framework.exceptions import ValidationError
|
||||
|
||||
from access.models import Organization
|
||||
|
||||
from itim.serializers.port import Port, PortModelSerializer
|
||||
|
||||
|
||||
|
||||
class PortValidationAPI(
|
||||
TestCase,
|
||||
):
|
||||
|
||||
model = Port
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
"""Setup Test
|
||||
|
||||
1. Create an org
|
||||
# 2. Create an item
|
||||
"""
|
||||
|
||||
organization = Organization.objects.create(name='test_org')
|
||||
|
||||
self.organization = organization
|
||||
|
||||
# self.item = self.model.objects.create(
|
||||
# organization=organization,
|
||||
# number = 'os name',
|
||||
# )
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_can_create(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that a valid item has no validation errors
|
||||
"""
|
||||
|
||||
serializer = PortModelSerializer(data={
|
||||
"organization": self.organization.id,
|
||||
"number": 80,
|
||||
"protocol": Port.Protocol.TCP
|
||||
})
|
||||
|
||||
assert serializer.is_valid(raise_exception = True)
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_no_number(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating and no number is provided a validation error occurs
|
||||
"""
|
||||
|
||||
with pytest.raises(ValidationError) as err:
|
||||
|
||||
serializer = PortModelSerializer(data={
|
||||
"organization": self.organization.id,
|
||||
# "number": 80,
|
||||
"protocol": Port.Protocol.TCP
|
||||
})
|
||||
|
||||
serializer.is_valid(raise_exception = True)
|
||||
|
||||
assert err.value.get_codes()['number'][0] == 'required'
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_no_protocol(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating and no protocol is provided a validation error occurs
|
||||
"""
|
||||
|
||||
with pytest.raises(ValidationError) as err:
|
||||
|
||||
serializer = PortModelSerializer(data={
|
||||
"organization": self.organization.id,
|
||||
"number": 80,
|
||||
# "protocol": Port.Protocol.TCP
|
||||
})
|
||||
|
||||
serializer.is_valid(raise_exception = True)
|
||||
|
||||
assert err.value.get_codes()['protocol'][0] == 'required'
|
175
app/itim/tests/functional/port/test_port_viewset.py
Normal file
175
app/itim/tests/functional/port/test_port_viewset.py
Normal file
@ -0,0 +1,175 @@
|
||||
import pytest
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.test import TestCase
|
||||
|
||||
from access.models import Organization, Team, TeamUsers, Permission
|
||||
|
||||
from api.tests.abstract.api_permissions_viewset import APIPermissions
|
||||
|
||||
from itim.models.services import Port
|
||||
|
||||
|
||||
|
||||
class PortPermissionsAPI(TestCase, APIPermissions):
|
||||
|
||||
model = Port
|
||||
|
||||
app_namespace = 'v2'
|
||||
|
||||
url_name = '_api_v2_port'
|
||||
|
||||
change_data = {'number': 21}
|
||||
|
||||
delete_data = {}
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
"""Setup Test
|
||||
|
||||
1. Create an organization for user and item
|
||||
. create an organization that is different to item
|
||||
2. Create a team
|
||||
3. create teams with each permission: view, add, change, delete
|
||||
4. create a user per team
|
||||
"""
|
||||
|
||||
organization = Organization.objects.create(name='test_org')
|
||||
|
||||
self.organization = organization
|
||||
|
||||
different_organization = Organization.objects.create(name='test_different_organization')
|
||||
|
||||
|
||||
view_permissions = Permission.objects.get(
|
||||
codename = 'view_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
view_team = Team.objects.create(
|
||||
team_name = 'view_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
view_team.permissions.set([view_permissions])
|
||||
|
||||
|
||||
|
||||
add_permissions = Permission.objects.get(
|
||||
codename = 'add_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
add_team = Team.objects.create(
|
||||
team_name = 'add_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
add_team.permissions.set([add_permissions])
|
||||
|
||||
|
||||
|
||||
change_permissions = Permission.objects.get(
|
||||
codename = 'change_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
change_team = Team.objects.create(
|
||||
team_name = 'change_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
change_team.permissions.set([change_permissions])
|
||||
|
||||
|
||||
|
||||
delete_permissions = Permission.objects.get(
|
||||
codename = 'delete_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
delete_team = Team.objects.create(
|
||||
team_name = 'delete_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
delete_team.permissions.set([delete_permissions])
|
||||
|
||||
|
||||
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
|
||||
|
||||
|
||||
self.view_user = User.objects.create_user(username="test_user_view", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = view_team,
|
||||
user = self.view_user
|
||||
)
|
||||
|
||||
|
||||
self.item = self.model.objects.create(
|
||||
organization = self.organization,
|
||||
number = 80,
|
||||
protocol = Port.Protocol.TCP
|
||||
)
|
||||
|
||||
|
||||
self.url_view_kwargs = {'pk': self.item.id}
|
||||
|
||||
self.add_data = {
|
||||
'number': 80,
|
||||
'protocol': Port.Protocol.TCP,
|
||||
'organization': self.organization.id,
|
||||
}
|
||||
|
||||
|
||||
self.add_user = User.objects.create_user(username="test_user_add", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = add_team,
|
||||
user = self.add_user
|
||||
)
|
||||
|
||||
self.change_user = User.objects.create_user(username="test_user_change", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = change_team,
|
||||
user = self.change_user
|
||||
)
|
||||
|
||||
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = delete_team,
|
||||
user = self.delete_user
|
||||
)
|
||||
|
||||
|
||||
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
|
||||
|
||||
|
||||
different_organization_team = Team.objects.create(
|
||||
team_name = 'different_organization_team',
|
||||
organization = different_organization,
|
||||
)
|
||||
|
||||
different_organization_team.permissions.set([
|
||||
view_permissions,
|
||||
add_permissions,
|
||||
change_permissions,
|
||||
delete_permissions,
|
||||
])
|
||||
|
||||
TeamUsers.objects.create(
|
||||
team = different_organization_team,
|
||||
user = self.different_organization_user
|
||||
)
|
@ -0,0 +1,55 @@
|
||||
import pytest
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from core.tests.abstract.test_notes_viewset import NoteViewSetCommon
|
||||
|
||||
from core.models.notes import Notes
|
||||
|
||||
from itim.models.services import Service
|
||||
|
||||
|
||||
|
||||
class ServiceNotePermissionsAPI(
|
||||
NoteViewSetCommon,
|
||||
TestCase,
|
||||
):
|
||||
|
||||
app_namespace = 'API'
|
||||
|
||||
url_name = '_api_v2_service_notes'
|
||||
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
"""Setup Test
|
||||
|
||||
1. Create an organization for user and item
|
||||
. create an organization that is different to item
|
||||
2. Create a team
|
||||
3. create teams with each permission: view, add, change, delete
|
||||
4. create a user per team
|
||||
"""
|
||||
|
||||
super().setUpTestData()
|
||||
|
||||
|
||||
|
||||
self.note_item = Service.objects.create(
|
||||
organization = self.organization,
|
||||
name = 'history-device'
|
||||
)
|
||||
|
||||
self.item = Notes.objects.create(
|
||||
organization = self.organization,
|
||||
note = 'a note',
|
||||
usercreated = self.view_user,
|
||||
service = self.note_item
|
||||
)
|
||||
|
||||
|
||||
self.url_kwargs = {'service_id': self.note_item.id}
|
||||
|
||||
self.url_view_kwargs = {'service_id': self.note_item.id, 'pk': self.item.pk }
|
||||
|
||||
self.add_data = {'note': 'a note added', 'organization': self.organization.id}
|
310
app/itim/tests/functional/service/test_service_serializer.py
Normal file
310
app/itim/tests/functional/service/test_service_serializer.py
Normal file
@ -0,0 +1,310 @@
|
||||
import pytest
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from rest_framework.exceptions import ValidationError
|
||||
|
||||
from access.models import Organization
|
||||
|
||||
from itam.models.device import Device
|
||||
|
||||
from itim.models.services import Port
|
||||
|
||||
from itim.models.clusters import Cluster
|
||||
from itim.serializers.service import Service, ServiceModelSerializer
|
||||
|
||||
|
||||
|
||||
class ServiceValidationAPI(
|
||||
TestCase,
|
||||
):
|
||||
|
||||
model = Service
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
"""Setup Test
|
||||
|
||||
1. Create an org
|
||||
2. Create an item
|
||||
"""
|
||||
|
||||
organization = Organization.objects.create(name='test_org')
|
||||
|
||||
self.organization = organization
|
||||
|
||||
|
||||
self.port = Port.objects.create(
|
||||
organization = self.organization,
|
||||
number = 80,
|
||||
protocol = Port.Protocol.TCP
|
||||
)
|
||||
|
||||
self.device = Device.objects.create(
|
||||
organization = self.organization,
|
||||
name = 'a-device'
|
||||
)
|
||||
|
||||
self.cluster = Cluster.objects.create(
|
||||
organization = self.organization,
|
||||
name = 'a cluster'
|
||||
)
|
||||
|
||||
|
||||
self.item = self.model.objects.create(
|
||||
organization=organization,
|
||||
name = 'os name',
|
||||
cluster = self.cluster,
|
||||
config_key_variable = 'value'
|
||||
)
|
||||
|
||||
self.item_two = self.model.objects.create(
|
||||
organization=organization,
|
||||
name = 'os name',
|
||||
cluster = self.cluster,
|
||||
)
|
||||
|
||||
self.item_two.dependent_service.set([ self.item ])
|
||||
|
||||
|
||||
self.item_is_template = self.model.objects.create(
|
||||
organization=organization,
|
||||
name = 'os name',
|
||||
is_template = True,
|
||||
)
|
||||
|
||||
self.item_is_template.port.set([ self.port ])
|
||||
|
||||
|
||||
self.item_is_template_no_port = self.model.objects.create(
|
||||
organization=organization,
|
||||
name = 'os name',
|
||||
is_template = True,
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_can_create_device(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that a valid item is serialized
|
||||
"""
|
||||
|
||||
serializer = ServiceModelSerializer(
|
||||
data={
|
||||
'organization': self.organization.id,
|
||||
'name': 'service',
|
||||
'port': [
|
||||
self.port.id
|
||||
],
|
||||
'config_key_variable': 'a_key',
|
||||
'device': self.device.id
|
||||
},
|
||||
)
|
||||
|
||||
assert serializer.is_valid(raise_exception = True)
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_can_create_cluster(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that a valid item is serialized
|
||||
"""
|
||||
|
||||
serializer = ServiceModelSerializer(
|
||||
data={
|
||||
'organization': self.organization.id,
|
||||
'name': 'service',
|
||||
'port': [
|
||||
self.port.id
|
||||
],
|
||||
'config_key_variable': 'a_key',
|
||||
'cluster': self.cluster.id
|
||||
},
|
||||
)
|
||||
|
||||
assert serializer.is_valid(raise_exception = True)
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_no_name(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating and no name is provided a validation error occurs
|
||||
"""
|
||||
|
||||
with pytest.raises(ValidationError) as err:
|
||||
|
||||
serializer = ServiceModelSerializer(data={
|
||||
'organization': self.organization.id,
|
||||
'port': [
|
||||
self.port.id
|
||||
],
|
||||
'config_key_variable': 'a_key',
|
||||
'device': self.device.id
|
||||
})
|
||||
|
||||
serializer.is_valid(raise_exception = True)
|
||||
|
||||
assert err.value.get_codes()['name'][0] == 'required'
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_no_port(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating and no port is provided a validation error occurs
|
||||
"""
|
||||
|
||||
with pytest.raises(ValidationError) as err:
|
||||
|
||||
serializer = ServiceModelSerializer(data={
|
||||
'organization': self.organization.id,
|
||||
'name': 'service',
|
||||
'config_key_variable': 'a_key',
|
||||
'device': self.device.id
|
||||
})
|
||||
|
||||
serializer.is_valid(raise_exception = True)
|
||||
|
||||
assert err.value.get_codes()['port'][0] == 'required'
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_no_port_required_if_template_with_port(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating and no port is provided and the template has a port
|
||||
no validation error occurs
|
||||
"""
|
||||
|
||||
serializer = ServiceModelSerializer(data={
|
||||
'organization': self.organization.id,
|
||||
'name': 'service',
|
||||
'config_key_variable': 'a_key',
|
||||
'device': self.device.id,
|
||||
'template': self.item_is_template.id
|
||||
})
|
||||
|
||||
assert serializer.is_valid(raise_exception = True)
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_template_without_port(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating a port is provided and the template has no port
|
||||
no validation error occurs
|
||||
"""
|
||||
|
||||
serializer = ServiceModelSerializer(data={
|
||||
'organization': self.organization.id,
|
||||
'name': 'service',
|
||||
'port': [
|
||||
self.port.id
|
||||
],
|
||||
'config_key_variable': 'a_key',
|
||||
'device': self.device.id,
|
||||
'template': self.item_is_template_no_port.id
|
||||
})
|
||||
|
||||
assert serializer.is_valid(raise_exception = True)
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_no_port_or_template_port(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating and no port is provided and the template
|
||||
has no port a validation error occurs
|
||||
"""
|
||||
|
||||
with pytest.raises(ValidationError) as err:
|
||||
|
||||
serializer = ServiceModelSerializer(data={
|
||||
'organization': self.organization.id,
|
||||
'name': 'service',
|
||||
'config_key_variable': 'a_key',
|
||||
'device': self.device.id,
|
||||
'template': self.item_is_template_no_port.id
|
||||
})
|
||||
|
||||
serializer.is_valid(raise_exception = True)
|
||||
|
||||
assert err.value.get_codes()['port'][0] == 'required'
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_no_device(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating and no device is provided a validation error occurs
|
||||
"""
|
||||
|
||||
with pytest.raises(ValidationError) as err:
|
||||
|
||||
serializer = ServiceModelSerializer(data={
|
||||
'organization': self.organization.id,
|
||||
'name': 'service',
|
||||
'port': [
|
||||
self.port.id
|
||||
],
|
||||
'config_key_variable': 'a_key',
|
||||
})
|
||||
|
||||
serializer.is_valid(raise_exception = True)
|
||||
|
||||
assert err.value.get_codes()['non_field_errors'][0] == 'one_of_cluster_or_device'
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_device_and_cluster(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating and a cluster and device is provided
|
||||
a validation error occurs
|
||||
"""
|
||||
|
||||
with pytest.raises(ValidationError) as err:
|
||||
|
||||
serializer = ServiceModelSerializer(data={
|
||||
'organization': self.organization.id,
|
||||
'name': 'service',
|
||||
'port': [
|
||||
self.port.id
|
||||
],
|
||||
'config_key_variable': 'a_key',
|
||||
'device': self.device.id,
|
||||
'cluster': self.cluster.id
|
||||
})
|
||||
|
||||
serializer.is_valid(raise_exception = True)
|
||||
|
||||
assert err.value.get_codes()['non_field_errors'][0] == 'either_cluster_or_device'
|
||||
|
||||
|
||||
|
||||
def test_serializer_validation_no_circular_dependency(self):
|
||||
"""Serializer Validation Check
|
||||
|
||||
Ensure that if creating and a dependent service loop
|
||||
a validation error occurs
|
||||
"""
|
||||
|
||||
with pytest.raises(ValidationError) as err:
|
||||
|
||||
serializer = ServiceModelSerializer(
|
||||
self.item,
|
||||
data={
|
||||
'dependent_service': [
|
||||
self.item_two.id
|
||||
],
|
||||
},
|
||||
partial = True
|
||||
)
|
||||
|
||||
serializer.is_valid(raise_exception = True)
|
||||
|
||||
assert err.value.get_codes()['dependent_service'][0] == 'no_circular_dependencies'
|
193
app/itim/tests/functional/service/test_service_viewset.py
Normal file
193
app/itim/tests/functional/service/test_service_viewset.py
Normal file
@ -0,0 +1,193 @@
|
||||
import pytest
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.test import TestCase
|
||||
|
||||
from access.models import Organization, Team, TeamUsers, Permission
|
||||
|
||||
from api.tests.abstract.api_permissions_viewset import APIPermissions
|
||||
|
||||
from itam.models.device import Device
|
||||
|
||||
from itim.models.services import Service, Port
|
||||
|
||||
|
||||
|
||||
class ServicePermissionsAPI(TestCase, APIPermissions):
|
||||
|
||||
model = Service
|
||||
|
||||
app_namespace = 'v2'
|
||||
|
||||
url_name = '_api_v2_service'
|
||||
|
||||
change_data = {'name': 'device-change'}
|
||||
|
||||
delete_data = {}
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
"""Setup Test
|
||||
|
||||
1. Create an organization for user and item
|
||||
. create an organization that is different to item
|
||||
2. Create a team
|
||||
3. create teams with each permission: view, add, change, delete
|
||||
4. create a user per team
|
||||
"""
|
||||
|
||||
organization = Organization.objects.create(name='test_org')
|
||||
|
||||
self.organization = organization
|
||||
|
||||
different_organization = Organization.objects.create(name='test_different_organization')
|
||||
|
||||
|
||||
view_permissions = Permission.objects.get(
|
||||
codename = 'view_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
view_team = Team.objects.create(
|
||||
team_name = 'view_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
view_team.permissions.set([view_permissions])
|
||||
|
||||
|
||||
|
||||
add_permissions = Permission.objects.get(
|
||||
codename = 'add_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
add_team = Team.objects.create(
|
||||
team_name = 'add_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
add_team.permissions.set([add_permissions])
|
||||
|
||||
|
||||
|
||||
change_permissions = Permission.objects.get(
|
||||
codename = 'change_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
change_team = Team.objects.create(
|
||||
team_name = 'change_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
change_team.permissions.set([change_permissions])
|
||||
|
||||
|
||||
|
||||
delete_permissions = Permission.objects.get(
|
||||
codename = 'delete_' + self.model._meta.model_name,
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = self.model._meta.app_label,
|
||||
model = self.model._meta.model_name,
|
||||
)
|
||||
)
|
||||
|
||||
delete_team = Team.objects.create(
|
||||
team_name = 'delete_team',
|
||||
organization = organization,
|
||||
)
|
||||
|
||||
delete_team.permissions.set([delete_permissions])
|
||||
|
||||
|
||||
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
|
||||
|
||||
|
||||
self.view_user = User.objects.create_user(username="test_user_view", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = view_team,
|
||||
user = self.view_user
|
||||
)
|
||||
|
||||
device = Device.objects.create(
|
||||
organization=organization,
|
||||
name = 'device'
|
||||
)
|
||||
|
||||
port = Port.objects.create(
|
||||
organization=organization,
|
||||
number = 80,
|
||||
protocol = Port.Protocol.TCP
|
||||
)
|
||||
|
||||
self.item = self.model.objects.create(
|
||||
organization=organization,
|
||||
name = 'os name',
|
||||
device = device,
|
||||
config_key_variable = 'value'
|
||||
)
|
||||
|
||||
self.item.port.set([ port ])
|
||||
|
||||
|
||||
|
||||
self.url_view_kwargs = {'pk': self.item.id}
|
||||
|
||||
self.add_data = {
|
||||
'name': 'team-post',
|
||||
'organization': self.organization.id,
|
||||
'device': device.id,
|
||||
'port': [ port.id ],
|
||||
'config_key_variable': 'value'
|
||||
}
|
||||
|
||||
|
||||
self.add_user = User.objects.create_user(username="test_user_add", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = add_team,
|
||||
user = self.add_user
|
||||
)
|
||||
|
||||
self.change_user = User.objects.create_user(username="test_user_change", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = change_team,
|
||||
user = self.change_user
|
||||
)
|
||||
|
||||
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
|
||||
teamuser = TeamUsers.objects.create(
|
||||
team = delete_team,
|
||||
user = self.delete_user
|
||||
)
|
||||
|
||||
|
||||
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
|
||||
|
||||
|
||||
different_organization_team = Team.objects.create(
|
||||
team_name = 'different_organization_team',
|
||||
organization = different_organization,
|
||||
)
|
||||
|
||||
different_organization_team.permissions.set([
|
||||
view_permissions,
|
||||
add_permissions,
|
||||
change_permissions,
|
||||
delete_permissions,
|
||||
])
|
||||
|
||||
TeamUsers.objects.create(
|
||||
team = different_organization_team,
|
||||
user = self.different_organization_user
|
||||
)
|
42
app/itim/tests/functional/test_itim_viewset.py
Normal file
42
app/itim/tests/functional/test_itim_viewset.py
Normal file
@ -0,0 +1,42 @@
|
||||
from django.contrib.auth.models import User
|
||||
from django.shortcuts import reverse
|
||||
from django.test import Client, TestCase
|
||||
|
||||
from access.models import Organization
|
||||
|
||||
from api.tests.abstract.viewsets import ViewSetCommon
|
||||
|
||||
from itim.viewsets.index import Index
|
||||
|
||||
|
||||
class ITIMViewset(
|
||||
TestCase,
|
||||
ViewSetCommon
|
||||
):
|
||||
|
||||
viewset = Index
|
||||
|
||||
route_name = 'v2:_api_v2_itim_home'
|
||||
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
"""Setup Test
|
||||
|
||||
1. Create an organization for user
|
||||
3. create super user
|
||||
"""
|
||||
|
||||
organization = Organization.objects.create(name='test_org')
|
||||
|
||||
self.organization = organization
|
||||
|
||||
self.view_user = User.objects.create_user(username="test_user_add", password="password", is_superuser=True)
|
||||
|
||||
|
||||
client = Client()
|
||||
url = reverse(self.route_name + '-list')
|
||||
|
||||
|
||||
client.force_login(self.view_user)
|
||||
self.http_options_response_list = client.options(url)
|
@ -0,0 +1,80 @@
|
||||
import pytest
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from core.models.ticket.ticket import Ticket
|
||||
from core.models.ticket.ticket_category import TicketCategory
|
||||
|
||||
from itim.serializers.change import (
|
||||
ChangeAddTicketModelSerializer,
|
||||
ChangeChangeTicketModelSerializer,
|
||||
ChangeImportTicketModelSerializer,
|
||||
ChangeTriageTicketModelSerializer,
|
||||
)
|
||||
|
||||
from project_management.models.projects import Project
|
||||
from project_management.models.project_milestone import ProjectMilestone
|
||||
|
||||
from core.tests.abstract.test_ticket_serializer import TicketValidationAPI
|
||||
|
||||
|
||||
|
||||
class ChangeTicketValidationAPI(
|
||||
TicketValidationAPI,
|
||||
TestCase,
|
||||
):
|
||||
|
||||
add_serializer = ChangeAddTicketModelSerializer
|
||||
change_serializer = ChangeChangeTicketModelSerializer
|
||||
import_serializer = ChangeImportTicketModelSerializer
|
||||
triage_serializer = ChangeTriageTicketModelSerializer
|
||||
|
||||
ticket_type = 'change'
|
||||
|
||||
ticket_type_enum = Ticket.TicketType.CHANGE
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
|
||||
super().setUpTestData()
|
||||
|
||||
|
||||
|
||||
def test_serializer_add_field_remains_default_project(self):
|
||||
"""Ensure serializer doesn't allow edit
|
||||
|
||||
For an ADD operation project should not be editable
|
||||
"""
|
||||
|
||||
assert self.created_ticket_add_serializer.project is None
|
||||
|
||||
|
||||
|
||||
def test_serializer_triage_add_field_remains_default_project(self):
|
||||
"""Ensure serializer allows edit
|
||||
|
||||
For an ADD operation (triage serializer) project should be settable
|
||||
"""
|
||||
|
||||
assert self.created_ticket_triage_serializer.project.id == self.all_fields_data_triage['project']
|
||||
|
||||
|
||||
|
||||
def test_serializer_triage_change_field_remains_default_project(self):
|
||||
"""Ensure serializer allows edit
|
||||
|
||||
For an Change operation (triage serializer) project should be settable
|
||||
"""
|
||||
|
||||
assert self.changed_ticket_triage_serializer.project.id == self.all_fields_data_triage_change['project']
|
||||
|
||||
|
||||
|
||||
def test_serializer_import_add_field_editable_project(self):
|
||||
"""Ensure serializer allows edit
|
||||
|
||||
For an Add operation (import serializer) project should be settable
|
||||
"""
|
||||
|
||||
assert self.changed_ticket_triage_serializer.project.id == self.all_fields_data_import['project']
|
||||
|
@ -0,0 +1,13 @@
|
||||
from django.test import TestCase
|
||||
|
||||
from core.tests.abstract.test_ticket_viewset import Ticket, TicketViewSetPermissionsAPI
|
||||
|
||||
|
||||
class TicketChangePermissionsAPI(
|
||||
TicketViewSetPermissionsAPI,
|
||||
TestCase,
|
||||
):
|
||||
|
||||
ticket_type = 'change'
|
||||
|
||||
ticket_type_enum = Ticket.TicketType.CHANGE
|
@ -0,0 +1,80 @@
|
||||
import pytest
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from core.models.ticket.ticket import Ticket
|
||||
from core.models.ticket.ticket_category import TicketCategory
|
||||
|
||||
from itim.serializers.incident import (
|
||||
IncidentAddTicketModelSerializer,
|
||||
IncidentChangeTicketModelSerializer,
|
||||
IncidentImportTicketModelSerializer,
|
||||
IncidentTriageTicketModelSerializer
|
||||
)
|
||||
|
||||
from project_management.models.projects import Project
|
||||
from project_management.models.project_milestone import ProjectMilestone
|
||||
|
||||
from core.tests.abstract.test_ticket_serializer import TicketValidationAPI
|
||||
|
||||
|
||||
|
||||
class IncidentTicketValidationAPI(
|
||||
TicketValidationAPI,
|
||||
TestCase,
|
||||
):
|
||||
|
||||
add_serializer = IncidentAddTicketModelSerializer
|
||||
change_serializer = IncidentChangeTicketModelSerializer
|
||||
import_serializer = IncidentImportTicketModelSerializer
|
||||
triage_serializer = IncidentTriageTicketModelSerializer
|
||||
|
||||
ticket_type = 'incident'
|
||||
|
||||
ticket_type_enum = Ticket.TicketType.INCIDENT
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
|
||||
super().setUpTestData()
|
||||
|
||||
|
||||
|
||||
def test_serializer_add_field_remains_default_project(self):
|
||||
"""Ensure serializer doesn't allow edit
|
||||
|
||||
For an ADD operation project should not be editable
|
||||
"""
|
||||
|
||||
assert self.created_ticket_add_serializer.project is None
|
||||
|
||||
|
||||
|
||||
def test_serializer_triage_add_field_remains_default_project(self):
|
||||
"""Ensure serializer allows edit
|
||||
|
||||
For an ADD operation (triage serializer) project should be settable
|
||||
"""
|
||||
|
||||
assert self.created_ticket_triage_serializer.project.id == self.all_fields_data_triage['project']
|
||||
|
||||
|
||||
|
||||
def test_serializer_triage_change_field_remains_default_project(self):
|
||||
"""Ensure serializer allows edit
|
||||
|
||||
For an Change operation (triage serializer) project should be settable
|
||||
"""
|
||||
|
||||
assert self.changed_ticket_triage_serializer.project.id == self.all_fields_data_triage_change['project']
|
||||
|
||||
|
||||
|
||||
def test_serializer_import_add_field_editable_project(self):
|
||||
"""Ensure serializer allows edit
|
||||
|
||||
For an Add operation (import serializer) project should be settable
|
||||
"""
|
||||
|
||||
assert self.changed_ticket_triage_serializer.project.id == self.all_fields_data_import['project']
|
||||
|
@ -0,0 +1,13 @@
|
||||
from django.test import TestCase
|
||||
|
||||
from core.tests.abstract.test_ticket_viewset import Ticket, TicketViewSetPermissionsAPI
|
||||
|
||||
|
||||
class TicketIncidentPermissionsAPI(
|
||||
TicketViewSetPermissionsAPI,
|
||||
TestCase,
|
||||
):
|
||||
|
||||
ticket_type = 'incident'
|
||||
|
||||
ticket_type_enum = Ticket.TicketType.INCIDENT
|
@ -0,0 +1,79 @@
|
||||
import pytest
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from core.models.ticket.ticket import Ticket
|
||||
from core.models.ticket.ticket_category import TicketCategory
|
||||
|
||||
from itim.serializers.problem import (
|
||||
ProblemAddTicketModelSerializer,
|
||||
ProblemChangeTicketModelSerializer,
|
||||
ProblemImportTicketModelSerializer,
|
||||
ProblemTriageTicketModelSerializer,
|
||||
)
|
||||
|
||||
from project_management.models.projects import Project
|
||||
from project_management.models.project_milestone import ProjectMilestone
|
||||
|
||||
from core.tests.abstract.test_ticket_serializer import TicketValidationAPI
|
||||
|
||||
|
||||
|
||||
class ProblemTicketValidationAPI(
|
||||
TicketValidationAPI,
|
||||
TestCase,
|
||||
):
|
||||
|
||||
add_serializer = ProblemAddTicketModelSerializer
|
||||
change_serializer = ProblemChangeTicketModelSerializer
|
||||
import_serializer = ProblemImportTicketModelSerializer
|
||||
triage_serializer = ProblemTriageTicketModelSerializer
|
||||
|
||||
ticket_type = 'problem'
|
||||
|
||||
ticket_type_enum = Ticket.TicketType.PROBLEM
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(self):
|
||||
|
||||
super().setUpTestData()
|
||||
|
||||
|
||||
|
||||
def test_serializer_add_field_remains_default_project(self):
|
||||
"""Ensure serializer doesn't allow edit
|
||||
|
||||
For an ADD operation project should not be editable
|
||||
"""
|
||||
|
||||
assert self.created_ticket_add_serializer.project is None
|
||||
|
||||
|
||||
|
||||
def test_serializer_triage_add_field_remains_default_project(self):
|
||||
"""Ensure serializer allows edit
|
||||
|
||||
For an ADD operation (triage serializer) project should be settable
|
||||
"""
|
||||
|
||||
assert self.created_ticket_triage_serializer.project.id == self.all_fields_data_triage['project']
|
||||
|
||||
|
||||
|
||||
def test_serializer_triage_change_field_remains_default_project(self):
|
||||
"""Ensure serializer allows edit
|
||||
|
||||
For an Change operation (triage serializer) project should be settable
|
||||
"""
|
||||
|
||||
assert self.changed_ticket_triage_serializer.project.id == self.all_fields_data_triage_change['project']
|
||||
|
||||
|
||||
|
||||
def test_serializer_import_add_field_editable_project(self):
|
||||
"""Ensure serializer allows edit
|
||||
|
||||
For an Add operation (import serializer) project should be settable
|
||||
"""
|
||||
|
||||
assert self.changed_ticket_triage_serializer.project.id == self.all_fields_data_import['project']
|
@ -0,0 +1,13 @@
|
||||
from django.test import TestCase
|
||||
|
||||
from core.tests.abstract.test_ticket_viewset import Ticket, TicketViewSetPermissionsAPI
|
||||
|
||||
|
||||
class TicketProblemPermissionsAPI(
|
||||
TicketViewSetPermissionsAPI,
|
||||
TestCase,
|
||||
):
|
||||
|
||||
ticket_type = 'problem'
|
||||
|
||||
ticket_type_enum = Ticket.TicketType.PROBLEM
|
Reference in New Issue
Block a user