test(functional): Move functional test cases to relevant functional test dir

ref: #15 #375 #382
This commit is contained in:
2024-11-07 21:54:53 +09:30
parent 506c5354cc
commit f695f14e14
93 changed files with 92 additions and 105 deletions

View 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'

View 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
)

View File

@ -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'

View 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 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
)

View 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'

View 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
)

View File

@ -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}

View 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'

View 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
)

View 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)

View File

@ -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']

View File

@ -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

View File

@ -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']

View File

@ -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

View File

@ -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']

View File

@ -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