From 14dae0803ede7504b6f0973523d177ca9f61e53b Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Wed, 20 Nov 2024 15:50:00 +0100 Subject: [PATCH 01/11] bump dev --- Squest/version.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Squest/version.py b/Squest/version.py index 31204f6e8..16aa1733b 100644 --- a/Squest/version.py +++ b/Squest/version.py @@ -1,2 +1,2 @@ -__version__ = "2.6.1" +__version__ = "2.7.0b" VERSION = __version__ diff --git a/pyproject.toml b/pyproject.toml index 5b160ba85..836797f33 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "squest" -version = "2.6.1" +version = "2.7.0b" description = "Service catalog on top of Red Hat Ansible Automation Platform(RHAAP)/AWX (formerly known as Ansible Tower)" authors = ["Nicolas Marcq ", "Elias Boulharts "] license = "MIT" From 837c3463f04463ed9ae4acdd034f7ba6e5f03d47 Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Wed, 20 Nov 2024 15:48:18 +0100 Subject: [PATCH 02/11] Fix: Credential id set in operation was not sent to AWX Closes #790 --- service_catalog/models/request.py | 20 ++++++++++ .../test_models/test_request.py | 39 +++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/service_catalog/models/request.py b/service_catalog/models/request.py index 5b090d7b4..f64570dcc 100644 --- a/service_catalog/models/request.py +++ b/service_catalog/models/request.py @@ -233,6 +233,26 @@ def perform_processing(self, inventory_override=None, credentials_override=None, "squest_host": settings.SQUEST_HOST, "request": AdminRequestSerializer(self).data } + + # load default override from the operation + if inventory_override is None: + inventory_override = self.operation.default_inventory_id + if credentials_override is None: + if self.operation.default_credentials_ids is not None: + credentials_override = self.operation.default_credentials_ids.split(",") + if tags_override is None and self.operation.default_tags is not None: + tags_override = self.operation.default_tags.split(",") + if skip_tags_override is None and self.operation.default_skip_tags is not None: + skip_tags_override = self.operation.default_skip_tags.split(",") + if limit_override is None and self.operation.default_limits is not None: + limit_override = self.operation.default_limits.split(",") + if verbosity_override is None: + verbosity_override = self.operation.default_verbosity + if job_type_override is None: + job_type_override = self.operation.default_job_type + if diff_mode_override is None: + diff_mode_override = self.operation.default_diff_mode + tower_job_id = None try: tower_job_id, error_message = self.operation.job_template.execute(extra_vars=tower_extra_vars, diff --git a/tests/test_service_catalog/test_models/test_request.py b/tests/test_service_catalog/test_models/test_request.py index b3dbaaa38..2f80e7280 100644 --- a/tests/test_service_catalog/test_models/test_request.py +++ b/tests/test_service_catalog/test_models/test_request.py @@ -537,3 +537,42 @@ def test_date_submitted_not_update_on_save(self): old_submitted_date = new_request.date_submitted new_request.save() self.assertEqual(old_submitted_date, new_request.date_submitted) + + def setup_default_on_operation(self): + self.create_operation_test.default_inventory_id = 1 + self.create_operation_test.default_limits = "machine_one,machine_two" + self.create_operation_test.default_tags = "tag1,tag2" + self.create_operation_test.default_skip_tags = "skipped_tag1,skipped_tag2" + self.create_operation_test.default_credentials_ids = "4,5" + self.create_operation_test.default_verbosity = "3" + self.create_operation_test.default_diff_mode = "new_diff" + self.create_operation_test.default_job_type = "new_job" + self.create_operation_test.save() + + def test_perform_processing_uses_default_from_operation(self): + self.create_operation_test.auto_process = True + self.setup_default_on_operation() + + with mock.patch("service_catalog.models.job_templates.JobTemplate.execute") as mock_job_execute: + mock_job_execute.return_value = 10, "" + self.test_request.accept(user=self.superuser) + args, called_args = mock_job_execute.call_args + self.assertEqual(called_args["inventory_override"],1) + self.assertEqual(called_args["credentials_override"],['4','5']) + self.assertEqual(called_args["tags_override"],["tag1", "tag2"]) + self.assertEqual(called_args["skip_tags_override"],["skipped_tag1","skipped_tag2"]) + self.assertEqual(called_args["limit_override"],["machine_one", "machine_two"]) + self.assertEqual(called_args["verbosity_override"],"3") + self.assertEqual(called_args["job_type_override"],"new_job") + self.assertEqual(called_args["diff_mode_override"],"new_diff") + + def test_perform_processing_uses_default_from_operation_override_on_accept(self): + # in this test we've set default credentials on the operation, but we override them on the process request page + self.setup_default_on_operation() + self.test_request.state = RequestState.PROCESSING + self.test_request.save() + with mock.patch("service_catalog.models.job_templates.JobTemplate.execute") as mock_job_execute: + mock_job_execute.return_value = 10, "" + self.test_request.perform_processing(inventory_override=3) + args, called_args = mock_job_execute.call_args + self.assertEqual(called_args["inventory_override"], 3) From fbec38598fc6325e383d08b065596043b6144265 Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Wed, 20 Nov 2024 16:02:02 +0100 Subject: [PATCH 03/11] Add multiple workers to gunicorn --- docker/entrypoint.sh | 2 +- docker/environment_variables/squest.env | 2 ++ docs/configuration/squest_settings.md | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 2f56e81b0..29ad6e697 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -13,4 +13,4 @@ echo "Inserting default data" python manage.py insert_default_data echo "Starting web server" -gunicorn --bind 0.0.0.0:8000 --pythonpath /app/squest Squest.wsgi +gunicorn --bind 0.0.0.0:8000 --workers ${GUNICORN_WORKERS:-4} --pythonpath /app/squest Squest.wsgi diff --git a/docker/environment_variables/squest.env b/docker/environment_variables/squest.env index 1a208afd7..851fa86e8 100644 --- a/docker/environment_variables/squest.env +++ b/docker/environment_variables/squest.env @@ -33,3 +33,5 @@ REDIS_CACHE_HOST=redis-cache WAIT_HOSTS=db:3306,rabbitmq:5672 WAIT_TIMEOUT=60 + +GUNICORN_WORKERS=4 diff --git a/docs/configuration/squest_settings.md b/docs/configuration/squest_settings.md index 061901ba5..8df50dd60 100644 --- a/docs/configuration/squest_settings.md +++ b/docs/configuration/squest_settings.md @@ -208,6 +208,12 @@ Set to `True` to enable email notifications. Set to `True` to change the navbar and footer color to visually identify a testing instance of Squest. +### GUNICORN_WORKERS + +**Default:** `4` + +Number of workers used by Gunicorn process in charge of serving client connection. Increase the number of worker threads to serve more clients concurrently + ## SMTP ### EMAIL_HOST From 339ee6db1f9514e883bb16d3dd92ed2cb741c643 Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Mon, 9 Dec 2024 10:35:44 +0100 Subject: [PATCH 04/11] drop support for docker compose v1 remove "version" flag --- dev.docker-compose.yml | 2 -- docker-compose.override.yml | 2 -- docker-compose.yml | 2 -- ldap.docker-compose.yml | 2 -- 4 files changed, 8 deletions(-) diff --git a/dev.docker-compose.yml b/dev.docker-compose.yml index baf3f1725..b305f576d 100644 --- a/dev.docker-compose.yml +++ b/dev.docker-compose.yml @@ -1,6 +1,4 @@ # add this file to the docker compose execution when developing Squest -version: '3.7' - services: db: diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 5cbf0961b..2fbe7e6e9 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -1,6 +1,4 @@ # this file is loaded automatically when running "docker-compose up" -version: '3.7' - services: nginx: ports: diff --git a/docker-compose.yml b/docker-compose.yml index da924431f..3b9e74092 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,4 @@ # docker-compose -f docker-compose.yml up -version: '3.7' - services: db: diff --git a/ldap.docker-compose.yml b/ldap.docker-compose.yml index 2070bb264..48ab4d5db 100644 --- a/ldap.docker-compose.yml +++ b/ldap.docker-compose.yml @@ -1,6 +1,4 @@ # docker-compose -f docker-compose.yml -f docker-compose.override.yml -f tls.docker-compose.yml -f ldap.docker-compose.yml up -version: '3.7' - services: django: From 2bbfc0b50623f3627a312fa27e1360b54ded4fb5 Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Mon, 9 Dec 2024 15:03:38 +0100 Subject: [PATCH 05/11] add permission on operation --- Squest/utils/squest_model.py | 6 ++ .../0021_create_default_permissions.py | 2 +- .../api/serializers/request_serializers.py | 7 +- service_catalog/forms/form_utils.py | 12 ++-- service_catalog/forms/operation_forms.py | 14 ++-- service_catalog/forms/portfolio_form.py | 33 +++++++++- service_catalog/forms/service_forms.py | 26 +++++++- .../commands/insert_testing_data.py | 4 +- ..._operation_options_operation_permission.py | 65 +++++++++++++++++++ service_catalog/models/instance.py | 3 +- service_catalog/models/operations.py | 18 ++++- service_catalog/models/portfolio.py | 4 ++ service_catalog/models/services.py | 17 ++++- service_catalog/tables/operation_tables.py | 9 +-- service_catalog/views/catalog_views.py | 14 ++-- service_catalog/views/instance.py | 44 ++++++------- service_catalog/views/operation.py | 26 +++++--- service_catalog/views/portfolio.py | 37 ++++++++--- service_catalog/views/service.py | 19 +++++- .../create_operation_request.html | 6 +- .../service_catalog/operation_detail.html | 6 +- .../test_urls/test_instance/test_crud.py | 4 +- 22 files changed, 284 insertions(+), 92 deletions(-) create mode 100644 service_catalog/migrations/0044_alter_operation_options_operation_permission.py diff --git a/Squest/utils/squest_model.py b/Squest/utils/squest_model.py index 9d676b9a0..9fa503743 100644 --- a/Squest/utils/squest_model.py +++ b/Squest/utils/squest_model.py @@ -73,6 +73,12 @@ class Meta: def get_q_filter(cls, user, perm): return Q(pk=None) + @classmethod + def get_queryset_for_user_filtered(cls, user, perm, unique=True): + app_label, codename = perm.split(".") + return cls.get_queryset_for_user(user, perm).filter(permission__content_type__app_label=app_label, + permission__codename=codename) + @classmethod def get_queryset_for_user(cls, user, perm, unique=True): from profiles.models.squest_permission import Permission diff --git a/profiles/migrations/0021_create_default_permissions.py b/profiles/migrations/0021_create_default_permissions.py index e12d03443..0646e7728 100644 --- a/profiles/migrations/0021_create_default_permissions.py +++ b/profiles/migrations/0021_create_default_permissions.py @@ -112,4 +112,4 @@ class Migration(migrations.Migration): migrations.RunPython(force_create_permissions), migrations.RunPython(add_perm_owner), migrations.RunPython(add_perm_global), - ] + ] \ No newline at end of file diff --git a/service_catalog/api/serializers/request_serializers.py b/service_catalog/api/serializers/request_serializers.py index 526c6dd1d..94c87733f 100644 --- a/service_catalog/api/serializers/request_serializers.py +++ b/service_catalog/api/serializers/request_serializers.py @@ -133,10 +133,9 @@ def save(self, **kwargs): def validate(self, data): super(OperationRequestSerializer, self).validate(data) - - if self.operation.is_admin_operation and not self.user.has_perm("service_catalog.admin_request_on_instance"): + if not self.user.has_perm("service_catalog.request_on_instance"): raise PermissionDenied - if not self.operation.is_admin_operation and not self.user.has_perm("service_catalog.request_on_instance"): + if not self.user.has_perm(self.operation.permission.permission_str, self.squest_instance): raise PermissionDenied if self.squest_instance.state not in [InstanceState.AVAILABLE]: raise PermissionDenied("Instance not available") @@ -180,4 +179,4 @@ class Meta: exclude = ['periodic_task', 'periodic_task_date_expire', 'failure_message'] instance = InstanceReadSerializer(read_only=True) - user = UserSerializerNested(read_only=True) + user = UserSerializerNested(read_only=True) \ No newline at end of file diff --git a/service_catalog/forms/form_utils.py b/service_catalog/forms/form_utils.py index 96a3a040a..84970a6f7 100644 --- a/service_catalog/forms/form_utils.py +++ b/service_catalog/forms/form_utils.py @@ -1,12 +1,10 @@ +import inspect import logging + from jinja2 import Template from jinja2.exceptions import UndefinedError -import inspect - from rest_framework.exceptions import ValidationError -from service_catalog.models import Instance - logger = logging.getLogger(__name__) @@ -30,6 +28,11 @@ def template_field(cls, jinja_template_string, template_data_dict): pass return templated_string + @classmethod + def get_default_permission_for_operation(cls): + from django.contrib.auth.models import Permission + return Permission.objects.get(codename="view_operation").id + @@ -62,3 +65,4 @@ def fail(self, message, field="__all__"): self._form.add_error(field, message) else: raise ValidationError({field: message}) + diff --git a/service_catalog/forms/operation_forms.py b/service_catalog/forms/operation_forms.py index 49fa8e02c..3543b17d5 100644 --- a/service_catalog/forms/operation_forms.py +++ b/service_catalog/forms/operation_forms.py @@ -1,9 +1,11 @@ -from django.forms import MultipleChoiceField, SelectMultiple +from django.forms import MultipleChoiceField, SelectMultiple, CharField, ModelChoiceField, forms from Squest.utils.plugin_controller import PluginController from Squest.utils.squest_model_form import SquestModelForm -from service_catalog.models import Operation +from profiles.models import Permission +from service_catalog.forms.form_utils import FormUtils +from service_catalog.models import Operation class OperationForm(SquestModelForm): validators = MultipleChoiceField(label="Validators", @@ -11,12 +13,16 @@ class OperationForm(SquestModelForm): choices=[], widget=SelectMultiple(attrs={'data-live-search': "true"})) + permission = ModelChoiceField(queryset=Permission.objects.filter(content_type__model="operation", + content_type__app_label="service_catalog"), + initial=FormUtils.get_default_permission_for_operation) + class Meta: model = Operation fields = ["service", "name", "description", "job_template", "type", "process_timeout_second", - "auto_accept", "auto_process", "enabled", "is_admin_operation", "extra_vars", "default_inventory_id", + "auto_accept", "auto_process", "enabled", "extra_vars", "default_inventory_id", "default_limits", "default_tags", "default_skip_tags", "default_credentials_ids", "default_verbosity", - "default_diff_mode", "default_job_type", "validators", "when"] + "default_diff_mode", "default_job_type", "validators", "when", "permission"] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/service_catalog/forms/portfolio_form.py b/service_catalog/forms/portfolio_form.py index 1ad4ffca2..5725c284d 100644 --- a/service_catalog/forms/portfolio_form.py +++ b/service_catalog/forms/portfolio_form.py @@ -1,16 +1,45 @@ -from django.forms import ImageField, FileInput +from django.forms import ImageField, FileInput, CharField, ModelChoiceField from Squest.utils.squest_model_form import SquestModelForm +from profiles.models import Permission +from service_catalog.forms.form_utils import FormUtils from service_catalog.models.portfolio import Portfolio class PortfolioForm(SquestModelForm): class Meta: model = Portfolio - fields = ["name", "description", "image", "description_doc", "parent_portfolio"] + fields = ["name", "description", "image", "description_doc", "parent_portfolio", "permission"] image = ImageField( label="Choose a file", required=False, widget=FileInput() ) + + permission = ModelChoiceField( + queryset=Permission.objects.filter(content_type__model="operation", content_type__app_label="service_catalog"), + initial=FormUtils.get_default_permission_for_operation, + help_text="Applying a new permission here will apply it on all operations in all sub services") + + + def __init__(self, *args, **kwargs): + super(PortfolioForm, self).__init__(*args, **kwargs) + if self.instance.id: # Edit object + # set permission field. If one operation in the service is not using the default + all_permission_current_service = Permission.objects.filter(operation__service__in=self.instance.service_list.all()).distinct() + if all_permission_current_service.count() > 1: + set_at_operation_level = ('set_at_operation_level','OVERWRITTEN BY OPERATION') + self.fields["permission"].choices = list(self.fields['permission'].choices) + [set_at_operation_level] + self.fields["permission"].initial = set_at_operation_level + else: + self.fields["permission"].initial = all_permission_current_service.first() + + + def save(self, commit=True): + # save as usual + obj = super().save(commit) + # bulk edit on permission + new_perm = self.cleaned_data.get('permission') + obj.bulk_set_permission_on_operation(new_perm) + return obj \ No newline at end of file diff --git a/service_catalog/forms/service_forms.py b/service_catalog/forms/service_forms.py index d5dce27ae..05cca955e 100644 --- a/service_catalog/forms/service_forms.py +++ b/service_catalog/forms/service_forms.py @@ -1,6 +1,9 @@ from django import forms +from django.forms import CharField, ModelChoiceField from Squest.utils.squest_model_form import SquestModelForm +from profiles.models import Permission +from service_catalog.forms import FormUtils from service_catalog.models.services import Service @@ -16,6 +19,14 @@ def __init__(self, *args, **kwargs): self.fields['enabled'].disabled = True self.fields['enabled'].help_text = \ "'CREATE' operation with a job template is required to enable this service." + # set permission field. If one operation in the service is not using the default + all_permission_current_service = Permission.objects.filter(operation__service=self.instance).distinct() + if all_permission_current_service.count() > 1: + set_at_operation_level = ('set_at_operation_level','OVERWRITTEN BY OPERATION') + self.fields["permission"].choices = list(self.fields['permission'].choices) + [set_at_operation_level] + self.fields["permission"].initial = set_at_operation_level + else: + self.fields["permission"].initial = all_permission_current_service.first() image = forms.ImageField(label="Choose a file", required=False, @@ -25,8 +36,21 @@ def __init__(self, *args, **kwargs): help_text="Redirect support button to the given URL", widget=forms.Textarea(attrs={'rows': 5, 'class': 'form-control'}), required=False) + permission = ModelChoiceField( + queryset=Permission.objects.filter(content_type__model="operation", content_type__app_label="service_catalog"), + initial=FormUtils.get_default_permission_for_operation, + help_text="Applying a new permission here will apply it on all operations") + + def save(self, commit=True): + # save as usual + obj = super().save(commit) + # bulk edit on permission + new_perm = self.cleaned_data.get('permission') + obj.bulk_set_permission_on_operation(new_perm) + return obj class Meta: model = Service fields = ["name", "description", "image", "enabled", - "parent_portfolio", "external_support_url", "extra_vars", "description_doc", "attribute_definitions"] + "parent_portfolio", "external_support_url", "extra_vars", "description_doc", "attribute_definitions", + "permission"] \ No newline at end of file diff --git a/service_catalog/management/commands/insert_testing_data.py b/service_catalog/management/commands/insert_testing_data.py index 864bd9e32..04a3a7ee5 100644 --- a/service_catalog/management/commands/insert_testing_data.py +++ b/service_catalog/management/commands/insert_testing_data.py @@ -67,10 +67,8 @@ def handle(self, *args, **options): job_template=job_templates.get(name="Demo Job Template")) states = [RequestState.SUBMITTED, RequestState.FAILED, RequestState.ACCEPTED, RequestState.ON_HOLD, RequestState.REJECTED, RequestState.CANCELED, RequestState.PROCESSING, RequestState.COMPLETE] - for i in range(random.randint(1, 3)): + for i in range(3): for username in users: - if random.randint(0, 2) == 1: - continue user = users[username] new_instance = Instance.objects.create(service=service, name=f"Instance - {username} - {i}", requester=user, quota_scope=random.choice(organization)) diff --git a/service_catalog/migrations/0044_alter_operation_options_operation_permission.py b/service_catalog/migrations/0044_alter_operation_options_operation_permission.py new file mode 100644 index 000000000..bad325d1c --- /dev/null +++ b/service_catalog/migrations/0044_alter_operation_options_operation_permission.py @@ -0,0 +1,65 @@ +# Generated by Django 4.2.13 on 2024-12-09 14:01 +from django.db import migrations, models +import django.db.models.deletion + +import service_catalog.models.operations + + +def set_perm_to_operations(apps, schema_editor): + """ + In order to delete the "is_admin_operation" flag we need to set new permission + By default: view_operation + If was admin operation: is_admin_operation + """ + Permission = apps.get_model('profiles', 'Permission') + Operation = apps.get_model('service_catalog', 'Operation') + ContentType = apps.get_model('contenttypes', 'ContentType') + operation_content_type = ContentType.objects.get_for_model(Operation) + + is_admin_operation, _ = Permission.objects.get_or_create(codename="is_admin_operation", content_type=operation_content_type) + view_operation, _ = Permission.objects.get_or_create(codename="view_operation", content_type=operation_content_type) + Operation.objects.filter(is_admin_operation=True).update(permission=is_admin_operation) + Operation.objects.filter(is_admin_operation=False).update(permission=view_operation) + + +class Migration(migrations.Migration): + + dependencies = [ + ('profiles', '0023_notificationstatefield'), + ('service_catalog', '0043_operation_when'), + ] + + operations = [ + migrations.AddField( + model_name='operation', + name='permission', + field=models.ForeignKey(blank=True, limit_choices_to={'content_type__app_label': 'service_catalog', 'content_type__model': 'operation'}, help_text='Permission to view the operation. Evaluated only at Global Scope and Default Permission level',null=True, on_delete=django.db.models.deletion.PROTECT, related_name='operation', to='profiles.permission'), + ), + migrations.RunPython(set_perm_to_operations), + migrations.AlterField( + model_name='operation', + name='permission', + field=models.ForeignKey( + limit_choices_to={'content_type__app_label': 'service_catalog', 'content_type__model': 'operation'}, + on_delete=django.db.models.deletion.PROTECT, related_name='operation', to='profiles.permission', + help_text='Permission to view the operation. Evaluated only at Global Scope and Default Permission level', + default=service_catalog.models.operations.get_default_permission_pk + ) + + ), + migrations.RemoveField( + model_name='operation', + name='is_admin_operation', + ), + migrations.AlterModelOptions( + name='instance', + options={'default_permissions': ('add', 'change', 'delete', 'view', 'list'), 'ordering': ['-last_updated'], + 'permissions': [('archive_instance', 'Can archive instance'), + ('unarchive_instance', 'Can unarchive instance'), + ("request_on_instance", "Can request a day2 operation on instance"), + ('view_admin_spec_instance', 'Can view admin spec on instance'), + ('change_admin_spec_instance', 'Can change admin spec on instance'), + ('rename_instance', 'Can rename instance'), + ('change_requester_on_instance', 'Can change owner of the instance')]}, + ), + ] \ No newline at end of file diff --git a/service_catalog/models/instance.py b/service_catalog/models/instance.py index b6ead00ff..f58a15450 100644 --- a/service_catalog/models/instance.py +++ b/service_catalog/models/instance.py @@ -27,7 +27,6 @@ class Meta: ("archive_instance", "Can archive instance"), ("unarchive_instance", "Can unarchive instance"), ("request_on_instance", "Can request a day2 operation on instance"), - ("admin_request_on_instance", "Can request an admin day2 operation on instance"), ("view_admin_spec_instance", "Can view admin spec on instance"), ("change_admin_spec_instance", "Can change admin spec on instance"), ("rename_instance", "Can rename instance"), @@ -236,4 +235,4 @@ class Meta: managed = False def save(self, force_insert=False, force_update=False, using=None, update_fields=None): - return False + return False \ No newline at end of file diff --git a/service_catalog/models/operations.py b/service_catalog/models/operations.py index 3bf986bd2..1f2ce9c62 100644 --- a/service_catalog/models/operations.py +++ b/service_catalog/models/operations.py @@ -1,5 +1,6 @@ from django.core.exceptions import ValidationError -from django.db.models import CharField, ForeignKey, BooleanField, IntegerField, CASCADE, SET_NULL, JSONField +from django.db.models import CharField, ForeignKey, BooleanField, IntegerField, CASCADE, SET_NULL, JSONField, \ + SET_DEFAULT, Q, PROTECT from django.db.models.signals import post_save, pre_save, post_delete from django.dispatch import receiver from django.urls import reverse @@ -8,11 +9,16 @@ from Squest.utils.ansible_when import AnsibleWhen from Squest.utils.plugin_controller import PluginController from Squest.utils.squest_model import SquestModel +from profiles.models import Permission + from service_catalog.models.job_templates import JobTemplate from service_catalog.models.operation_type import OperationType from service_catalog.models.services import Service +def get_default_permission_pk(): + return Permission.objects.get(codename="view_operation", content_type__app_label="service_catalog").id + class Operation(SquestModel): name = CharField(max_length=100) description = CharField(max_length=500, blank=True, null=True) @@ -29,8 +35,6 @@ class Operation(SquestModel): process_timeout_second = IntegerField(default=60, verbose_name="Process timeout (s)") enabled = BooleanField(default=True, blank=True) extra_vars = JSONField(default=dict, blank=True) - is_admin_operation = BooleanField(default=False, blank=True, verbose_name="Admin operation", - help_text='Create operations are protected by "service_catalog.admin_request_on_service", others by "service_catalog.admin_request_on_instance".') default_inventory_id = CharField(max_length=500, blank=True, null=True, help_text="Jinja supported with context {{ request }}. " "Id of the inventory to use by default. " @@ -54,6 +58,14 @@ class Operation(SquestModel): validators = CharField(null=True, blank=True, max_length=200, verbose_name="Survey validators") when = CharField(max_length=2000, blank=True, null=True, help_text="Ansible like 'when' with `instance` as context. No Jinja brackets needed. Cannot be set on 'create' type of operation as the instance does not exist yet") + permission = ForeignKey( + Permission, + on_delete=PROTECT, + related_name="operation", + limit_choices_to={"content_type__app_label": "service_catalog", 'content_type__model': 'operation'}, + default=get_default_permission_pk, + help_text="Permission to view the operation. Evaluated only at Global Scope and Default Permission level" + ) @property def validators_name(self): diff --git a/service_catalog/models/portfolio.py b/service_catalog/models/portfolio.py index 069dbdd1e..cc4a40fad 100644 --- a/service_catalog/models/portfolio.py +++ b/service_catalog/models/portfolio.py @@ -34,3 +34,7 @@ def delete(self, using=None, keep_parents=False): self.portfolio_list.update(**{"parent_portfolio": self.parent_portfolio}) self.service_list.update(**{"parent_portfolio": self.parent_portfolio}) super(Portfolio, self).delete(using, keep_parents) + + def bulk_set_permission_on_operation(self, target_permission): + for service in self.service_list.all(): + service.bulk_set_permission_on_operation(target_permission) \ No newline at end of file diff --git a/service_catalog/models/services.py b/service_catalog/models/services.py index f7e15503a..ff0e1452c 100644 --- a/service_catalog/models/services.py +++ b/service_catalog/models/services.py @@ -1,3 +1,5 @@ +import logging + from django.core.exceptions import ValidationError from django.db.models import CharField, ImageField, BooleanField, ForeignKey, SET_NULL, JSONField, ManyToManyField from django.db.models.signals import pre_save @@ -5,8 +7,10 @@ from django.utils.translation import gettext_lazy as _ from Squest.utils.squest_model import SquestModel +from profiles.models import Permission from service_catalog.models.operation_type import OperationType +logger = logging.getLogger(__name__) class Service(SquestModel): class Meta: @@ -57,6 +61,17 @@ def clean(self): if self.extra_vars is None or not isinstance(self.extra_vars, dict): raise ValidationError({'extra_vars': _("Please enter a valid JSON. Empty value is {} for JSON.")}) + def bulk_set_permission_on_operation(self, target_permission): + from service_catalog.models import Operation + logger.debug(f"Bulk edit permission on service {self.name} to permission {target_permission}") + # check if all permission are already set to the target perm + all_permission_current_service = Permission.objects.filter(operation__service=self).distinct() + # if the target perm is already the one used we do nothing + if all_permission_current_service.count() == 1: + if all_permission_current_service.first() == target_permission: + return + Operation.objects.filter(service=self).update(permission=target_permission) + @receiver(pre_save, sender=Service) def service_pre_save(sender, instance, **kwargs): @@ -65,4 +80,4 @@ def service_pre_save(sender, instance, **kwargs): instance.operations.filter(type=OperationType.CREATE).update(**{"enabled": False}) if instance.enabled and not instance.can_be_enabled(): instance.enabled = False - instance.save() + instance.save() \ No newline at end of file diff --git a/service_catalog/tables/operation_tables.py b/service_catalog/tables/operation_tables.py index da009a8fd..76772a3a3 100644 --- a/service_catalog/tables/operation_tables.py +++ b/service_catalog/tables/operation_tables.py @@ -9,14 +9,13 @@ class Meta: model = Operation attrs = {"id": "operation_table", "class": "table squest-pagination-tables"} fields = ("enabled", "name", "type", "job_template", "auto_accept", "auto_process", - "is_admin_operation", "actions") + "permission", "actions") name = LinkColumn() enabled = TemplateColumn(template_name='generics/custom_columns/generic_boolean.html') type = TemplateColumn(template_name='service_catalog/custom_columns/operation_type.html') auto_accept = TemplateColumn(template_name='generics/custom_columns/generic_boolean.html') auto_process = TemplateColumn(template_name='generics/custom_columns/generic_boolean.html') - is_admin_operation = TemplateColumn(template_name='generics/custom_columns/generic_boolean.html') actions = TemplateColumn(template_name='generics/custom_columns/generic_actions.html', orderable=False) @@ -24,12 +23,11 @@ class OperationTableFromInstanceDetails(SquestTable): class Meta: model = Operation attrs = {"id": "operation_table", "class": "table squest-pagination-tables"} - fields = ("name", "description", "type", "is_admin_operation","auto_accept", "auto_process", "actions") + fields = ("name", "description", "type", "auto_accept", "auto_process", "actions") type = TemplateColumn(template_name='service_catalog/custom_columns/operation_type.html') auto_accept = TemplateColumn(template_name='generics/custom_columns/generic_boolean.html') auto_process = TemplateColumn(template_name='generics/custom_columns/generic_boolean.html') - is_admin_operation = TemplateColumn(template_name='generics/custom_columns/generic_boolean.html') actions = TemplateColumn(template_name='service_catalog/custom_columns/operation_request.html', orderable=False, verbose_name="") @@ -38,10 +36,9 @@ class CreateOperationTable(SquestTable): class Meta: model = Operation attrs = {"id": "operation_table", "class": "table squest-pagination-tables"} - fields = ("name", "description", "is_admin_operation", "auto_accept", "auto_process", "actions") + fields = ("name", "description", "auto_accept", "auto_process", "actions") auto_accept = TemplateColumn(template_name='generics/custom_columns/generic_boolean.html') auto_process = TemplateColumn(template_name='generics/custom_columns/generic_boolean.html') - is_admin_operation = TemplateColumn(template_name='generics/custom_columns/generic_boolean.html') actions = TemplateColumn(template_name='service_catalog/custom_columns/create_operation_request.html', orderable=False) diff --git a/service_catalog/views/catalog_views.py b/service_catalog/views/catalog_views.py index 571c986a1..c6d6fba1d 100644 --- a/service_catalog/views/catalog_views.py +++ b/service_catalog/views/catalog_views.py @@ -3,7 +3,7 @@ from Squest.utils.squest_rbac import SquestPermissionRequiredMixin from profiles.models import Scope -from service_catalog.models import Service, OperationType, Doc +from service_catalog.models import Service, OperationType, Doc, Operation class ServiceRequestWizardView(SquestPermissionRequiredMixin, SessionWizardView): @@ -11,15 +11,9 @@ class ServiceRequestWizardView(SquestPermissionRequiredMixin, SessionWizardView) def get_permission_required(self): service_id = self.kwargs['service_id'] operation_id = self.kwargs['operation_id'] - self.service = get_object_or_404(Service, **{'id': service_id, 'enabled': True}) - self.operation = get_object_or_404( - self.service.operations.filter(enabled=True, type=OperationType.CREATE), - id=operation_id - ) - if self.operation.is_admin_operation: - return 'service_catalog.admin_request_on_service' - if not self.operation.is_admin_operation: - return 'service_catalog.request_on_service' + self.operation = get_object_or_404(Operation, enabled=True, service__enabled=True, id=operation_id, type=OperationType.CREATE, service__id=service_id) + return self.operation.permission + def get_context_data(self, form, **kwargs): context = super().get_context_data(form=form, **kwargs) diff --git a/service_catalog/views/instance.py b/service_catalog/views/instance.py index f3b94e73b..fa4910397 100644 --- a/service_catalog/views/instance.py +++ b/service_catalog/views/instance.py @@ -1,4 +1,5 @@ import logging +from gc import enable from django.contrib import messages from django.contrib.auth.decorators import login_required @@ -13,6 +14,7 @@ from Squest.utils.squest_table import SquestRequestConfig from Squest.utils.squest_views import SquestListView, SquestDetailView, SquestUpdateView, SquestDeleteView, \ SquestPermissionDenied +from profiles.models import Permission from service_catalog.filters.instance_filter import InstanceFilter, InstanceArchivedFilter from service_catalog.forms import InstanceForm, OperationRequestForm, SupportRequestForm, SupportMessageForm, \ InstanceFormRestricted @@ -89,32 +91,30 @@ def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) config = SquestRequestConfig(self.request) + current_service = self.get_object().service + all_permission_current_service = Permission.objects.filter(operation__service=current_service, operation__enabled=True, + operation__type__in=[OperationType.UPDATE, + OperationType.DELETE]).distinct() + # operations operations = Operation.objects.none() - if self.request.user.has_perm("service_catalog.request_on_instance", self.object): - operations = operations | self.object.service.operations.filter(is_admin_operation=False, - enabled=True, - type__in=[OperationType.UPDATE, - OperationType.DELETE]) - - # admin operations - if self.request.user.has_perm("service_catalog.admin_request_on_instance", self.object): - operations = operations | self.object.service.operations.filter(is_admin_operation=True, - enabled=True, - type__in=[OperationType.UPDATE, - OperationType.DELETE]) + for permission in all_permission_current_service.all(): + operations = operations | Operation.get_queryset_for_user_filtered(self.request.user, permission.permission_str) + + operations = operations.filter(service=current_service, + enabled=True, + type__in=[OperationType.UPDATE, + OperationType.DELETE]) + + # TODO: service form + # TODO: portfolio form + # TODO: tests # filter operation with when condition for operation in operations.all(): if not operation.when_instance_authorized(self.object): operations = operations.exclude(id=operation.id) - if operations.exists(): - context['operations_table'] = OperationTableFromInstanceDetails(operations, prefix="operation-") - if not self.request.user.has_perm("service_catalog.admin_request_on_instance", self.object): - context['operations_table'].exclude = ("is_admin_operation",) - config.configure(context['operations_table']) - # requests if self.request.user.has_perm("service_catalog.view_request", self.object): context['requests_table'] = RequestTable( @@ -189,12 +189,8 @@ class InstanceDeleteView(SquestDeleteView): def instance_request_new_operation(request, instance_id, operation_id): instance = get_object_or_404(Instance, id=instance_id) operation = get_object_or_404(Operation, id=operation_id) - if not operation.is_admin_operation and not request.user.has_perm('service_catalog.request_on_instance', - instance): - raise SquestPermissionDenied(permission='service_catalog.request_on_instance') - if operation.is_admin_operation and not request.user.has_perm('service_catalog.admin_request_on_instance', - instance): - raise SquestPermissionDenied(permission="service_catalog.admin_request_on_instance") + if not request.user.has_perm(operation.permission, instance): + raise SquestPermissionDenied(permission=operation.permission) if instance.state not in [InstanceState.AVAILABLE]: raise PermissionDenied("Instance not available") if operation.enabled is False: diff --git a/service_catalog/views/operation.py b/service_catalog/views/operation.py index 3bb413431..539d77da7 100644 --- a/service_catalog/views/operation.py +++ b/service_catalog/views/operation.py @@ -2,6 +2,7 @@ from Squest.utils.squest_table import SquestRequestConfig from Squest.utils.squest_views import * +from profiles.models import Permission from service_catalog.filters.operation_filter import OperationFilter, OperationFilterLimited from service_catalog.forms import OperationForm from service_catalog.models import Operation, Service, OperationType, ApprovalWorkflow @@ -93,14 +94,23 @@ def get_generic_url(self, action): return "" def get_queryset(self): - operation_qs = Operation.get_queryset_for_user(self.request.user, "service_catalog.view_operation").filter( - service__id=self.kwargs.get('service_id'), - enabled=True, type=OperationType.CREATE, - ) - if Service.get_queryset_for_user(self.request.user, perm="service_catalog.admin_request_on_service").filter(id=self.kwargs.get('service_id')).exists(): - return operation_qs - else: - return operation_qs.exclude(is_admin_operation=True) + service_id = self.kwargs.get('service_id') + current_service = Service.objects.get(id=service_id) + # get all create and enabled permission for current selected service + all_permission_current_service = Permission.objects.filter(operation__service=current_service, + operation__enabled=True, + operation__type__in=[OperationType.CREATE]).distinct() + # Init empty queryset to be returned + operation_qs = Operation.objects.none() + for permission in all_permission_current_service.all(): + # add allowed operation for all service if the user has the permission + operation_qs = operation_qs | Operation.get_queryset_for_user_filtered(self.request.user, + permission.permission_str) + # restrict to only the selected service + operation_qs = operation_qs.filter(service=current_service, + enabled=True, + type__in=[OperationType.CREATE]) + return operation_qs def dispatch(self, request, *args, **kwargs): if self.get_queryset().count() == 1: diff --git a/service_catalog/views/portfolio.py b/service_catalog/views/portfolio.py index e2ebbbad0..ced18fb41 100644 --- a/service_catalog/views/portfolio.py +++ b/service_catalog/views/portfolio.py @@ -2,9 +2,10 @@ from django.shortcuts import render, get_object_or_404 from Squest.utils.squest_views import * +from profiles.models import Permission from service_catalog.filters.portfolio_filter import PortfolioFilter from service_catalog.forms import PortfolioForm -from service_catalog.models import Service +from service_catalog.models import Service, Operation, OperationType from service_catalog.models.portfolio import Portfolio from service_catalog.tables.portfolio_tables import PortfolioTable @@ -30,8 +31,8 @@ def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['multipart'] = True context['breadcrumbs'] = [ - {'text': 'Service catalog', 'url': reverse('service_catalog:service_catalog_list')}, - ] + context['breadcrumbs'] + {'text': 'Service catalog', 'url': reverse('service_catalog:service_catalog_list')}, + ] + context['breadcrumbs'] return context @@ -43,8 +44,8 @@ def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['multipart'] = True context['breadcrumbs'] = [ - {'text': 'Service catalog', 'url': reverse('service_catalog:service_catalog_list')}, - ] + context['breadcrumbs'] + {'text': 'Service catalog', 'url': reverse('service_catalog:service_catalog_list')}, + ] + context['breadcrumbs'] return context @@ -54,8 +55,8 @@ class PortfolioDeleteView(SquestDeleteView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['breadcrumbs'] = [ - {'text': 'Service catalog', 'url': reverse('service_catalog:service_catalog_list')}, - ] + context['breadcrumbs'] + {'text': 'Service catalog', 'url': reverse('service_catalog:service_catalog_list')}, + ] + context['breadcrumbs'] return context @@ -64,7 +65,27 @@ def service_catalog_list(request): current_portfolio_id = request.GET.get('parent_portfolio') if request.GET.get('parent_portfolio') else None current_portfolio = get_object_or_404(Portfolio.objects.all(), id=current_portfolio_id) if current_portfolio_id else None sub_portfolio_list = Portfolio.objects.filter(parent_portfolio__id=current_portfolio_id) - service_list = Service.objects.filter(parent_portfolio__id=current_portfolio_id, enabled=True) + + # service_list = Service.objects.filter(parent_portfolio__id=current_portfolio_id, enabled=True) + + # get all create and enabled permission for current selected service + all_permission_current_service = Permission.objects.filter(operation__service__parent_portfolio__id=current_portfolio_id, + operation__enabled=True, + operation__type__in=[ + OperationType.CREATE]).distinct() + # Init empty queryset to be returned + operation_qs = Operation.objects.none() + for permission in all_permission_current_service.all(): + # add allowed operation for all service if the user has the permission + operation_qs = operation_qs | Operation.get_queryset_for_user_filtered(request.user, + permission.permission_str) + # restrict to only the selected service + service_ids = operation_qs.filter(service__parent_portfolio__id=current_portfolio_id, + enabled=True, + type__in=[OperationType.CREATE]).values_list('service__id', flat=True) + service_list = Service.objects.filter(id__in=service_ids) + + context = { 'breadcrumbs': get_portfolio_breadcrumbs(current_portfolio_id), 'portfolio_list': sub_portfolio_list, diff --git a/service_catalog/views/service.py b/service_catalog/views/service.py index bd04d8cea..9a282a97f 100644 --- a/service_catalog/views/service.py +++ b/service_catalog/views/service.py @@ -1,8 +1,9 @@ from Squest.utils.squest_views import * +from profiles.models import Permission from service_catalog.filters.service_filter import ServiceFilter from service_catalog.forms import ServiceForm -from service_catalog.models import Service, Operation +from service_catalog.models import Service, Operation, OperationType from service_catalog.tables.operation_tables import OperationTable from service_catalog.tables.service_tables import ServiceTable @@ -26,6 +27,22 @@ def get_context_data(self, **kwargs): context['breadcrumbs'] = get_breadcrumbs_for_service() return context + def get_queryset(self): + # get all create and enabled permission for current selected service + all_permission_current_service = Permission.objects.filter(operation__enabled=True, + operation__type__in=[ + OperationType.CREATE]).distinct() + # Init empty queryset to be returned + operation_qs = Operation.objects.none() + for permission in all_permission_current_service.all(): + # add allowed operation for all service if the user has the permission + operation_qs = operation_qs | Operation.get_queryset_for_user_filtered(self.request.user, + permission.permission_str) + # restrict to only the selected service + service_ids = operation_qs.filter(enabled=True, + type__in=[OperationType.CREATE]).values_list('service__id', flat=True) + return Service.objects.filter(id__in=service_ids) + class ServiceDetailView(SquestDetailView): model = Service diff --git a/templates/service_catalog/custom_columns/create_operation_request.html b/templates/service_catalog/custom_columns/create_operation_request.html index ffc8da040..a642d7807 100644 --- a/templates/service_catalog/custom_columns/create_operation_request.html +++ b/templates/service_catalog/custom_columns/create_operation_request.html @@ -1,8 +1,4 @@ -{% if record.is_admin_operation %} - {% has_perm request.user "service_catalog.admin_request_on_service" as can_request_operation %} -{% else %} - {% has_perm request.user "service_catalog.request_on_service" as can_request_operation %} -{% endif %} +{% has_perm request.user record.permission as can_request_operation %} {% if can_request_operation %} diff --git a/templates/service_catalog/operation_detail.html b/templates/service_catalog/operation_detail.html index 06253bd12..ea06beaeb 100644 --- a/templates/service_catalog/operation_detail.html +++ b/templates/service_catalog/operation_detail.html @@ -30,10 +30,10 @@

Details

  • Job template {{ object.job_template }}
  • -
  • - Is admin +
  • + Permision
    - {{ object.is_admin_operation | display_boolean }} + {{ object.permission }}
  • diff --git a/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py b/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py index 715bad74a..f3bbee634 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py +++ b/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py @@ -62,7 +62,7 @@ def test_instance_views(self): ), TestingPostContextView( url='api_operation_request_create', - perm_str='service_catalog.admin_request_on_instance', + perm_str=self.update_operation_test_2.permission.permission_str, url_kwargs={'instance_id': self.test_instance_2.id, 'operation_id': self.update_operation_test_2.id}, data={ 'fill_in_survey': { @@ -105,4 +105,4 @@ def test_instance_views(self): url_kwargs={'pk': self.test_instance.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file From c319f82ebd867514861029f32b31a030e7a4860c Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Thu, 12 Dec 2024 11:47:48 +0100 Subject: [PATCH 06/11] update test framework to support multiple permission --- tests/permission_endpoint.py | 32 +++++++++++-------- .../test_api/test_urls/test_globalscope.py | 16 +++++----- .../test_api/test_urls/test_organization.py | 22 ++++++------- .../test_api/test_urls/test_permission.py | 14 ++++---- .../test_api/test_urls/test_quota/test_org.py | 14 ++++---- .../test_urls/test_quota/test_team.py | 14 ++++---- .../test_api/test_urls/test_role.py | 14 ++++---- .../test_api/test_urls/test_team.py | 22 ++++++------- .../test_api/test_urls/test_user.py | 8 ++--- .../test_urls/test_globalscope.py | 20 ++++++------ .../test_urls/test_organization.py | 28 ++++++++-------- .../test_urls/test_permission.py | 16 +++++----- tests/test_profiles/test_urls/test_quota.py | 18 +++++------ tests/test_profiles/test_urls/test_role.py | 18 +++++------ tests/test_profiles/test_urls/test_scope.py | 6 ++-- tests/test_profiles/test_urls/test_team.py | 26 +++++++-------- tests/test_profiles/test_urls/test_user.py | 6 ++-- .../test_urls/test_attributedefinition.py | 14 ++++---- .../test_api/test_urls/test_resource.py | 14 ++++---- .../test_api/test_urls/test_resourcegroup.py | 14 ++++---- .../test_api/test_urls/test_transformer.py | 14 ++++---- .../test_urls/test_attributedefinition.py | 18 +++++------ .../test_urls/test_resource.py | 24 +++++++------- .../test_urls/test_resourcegroup.py | 22 ++++++------- .../test_urls/test_transformer.py | 18 +++++------ .../test_api/test_urls/test_approvalstep.py | 14 ++++---- .../test_approvalworkflow/test_crud.py | 14 ++++---- .../test_state_machine.py | 10 +++--- .../test_api/test_urls/test_customlink.py | 14 ++++---- .../test_urls/test_instance/test_crud.py | 31 ++++++++++-------- .../test_urls/test_instance/test_spec.py | 14 ++++---- .../test_api/test_urls/test_jobtemplate.py | 14 ++++---- .../test_api/test_urls/test_operation.py | 22 ++++++------- .../test_api/test_urls/test_portfolio.py | 14 ++++---- .../test_urls/test_request/test_crud.py | 14 ++++---- .../test_state_machine/test_accept.py | 6 ++-- .../test_state_machine/test_archive.py | 6 ++-- .../test_state_machine/test_cancel.py | 6 ++-- .../test_state_machine/test_on_hold.py | 6 ++-- .../test_state_machine/test_process.py | 6 ++-- .../test_state_machine/test_re_submit.py | 6 ++-- .../test_state_machine/test_reject.py | 6 ++-- .../test_state_machine/test_unarchive.py | 6 ++-- .../test_api/test_urls/test_service.py | 16 +++++----- .../test_api/test_urls/test_towerserver.py | 18 +++++------ .../test_urls/test_announcement.py | 16 +++++----- .../test_urls/test_approvalstep.py | 18 +++++------ .../test_urls/test_approvalworkflow.py | 24 +++++++------- .../test_urls/test_customlink.py | 16 +++++----- .../test_urls/test_doc.py | 6 ++-- .../test_instance/test_bulk_delete.py | 6 ++-- .../test_urls/test_instance/test_crud.py | 22 ++++++------- .../test_instance/test_state_machine.py | 10 +++--- .../test_urls/test_instancehook.py | 16 +++++----- .../test_urls/test_jobtemplate.py | 12 +++---- .../test_urls/test_operation.py | 24 +++++++------- .../test_urls/test_portfolio.py | 16 +++++----- .../test_request/test_bulk_delete.py | 6 ++-- .../test_urls/test_request/test_crud.py | 16 +++++----- .../test_state_machine/test_accept.py | 22 ++++++------- .../test_state_machine/test_archive.py | 6 ++-- .../test_state_machine/test_cancel.py | 6 ++-- .../test_state_machine/test_on_hold.py | 6 ++-- .../test_state_machine/test_process.py | 6 ++-- .../test_state_machine/test_re_submit.py | 6 ++-- .../test_state_machine/test_reject.py | 6 ++-- .../test_state_machine/test_unarchive.py | 6 ++-- .../test_urls/test_requesthook.py | 16 +++++----- .../test_urls/test_requestmessage.py | 10 +++--- .../test_urls/test_service.py | 30 ++++++++--------- .../test_urls/test_support.py | 28 ++++++++-------- .../test_urls/test_towerserver.py | 26 +++++++-------- .../test_request/test_admin_request_view.py | 8 ++--- 73 files changed, 538 insertions(+), 527 deletions(-) diff --git a/tests/permission_endpoint.py b/tests/permission_endpoint.py index d104008ac..07a497617 100644 --- a/tests/permission_endpoint.py +++ b/tests/permission_endpoint.py @@ -12,7 +12,7 @@ class TestingContextView: expected_status_code = None expected_not_allowed_status_code = None - def __init__(self, url, perm_str, url_kwargs=None, data=None, expected_status_code=None, + def __init__(self, url, perm_str_list, url_kwargs=None, data=None, expected_status_code=None, expected_not_allowed_status_code=None, follow=None): if expected_not_allowed_status_code is not None: self.expected_not_allowed_status_code = expected_not_allowed_status_code @@ -25,18 +25,22 @@ def __init__(self, url, perm_str, url_kwargs=None, data=None, expected_status_co except NoReverseMatch: raise NoReverseMatch(f'url: {url}, kwargs: {url_kwargs}') self.data = {} if data is None else data - try: - self.permission = Permission.objects.get(content_type__app_label=perm_str.split('.')[0], - codename=perm_str.split('.')[1]) - except Permission.DoesNotExist: - raise Permission.DoesNotExist(f'Permission {perm_str} does not exist.') - except Permission.MultipleObjectsReturned: - raise Permission.MultipleObjectsReturned( - Permission.objects.filter(content_type__app_label=perm_str.split('.')[0], - codename=perm_str.split('.')[1])) + + permission_id = list() + for perm_str in perm_str_list: + try: + permission_id.append(Permission.objects.get(content_type__app_label=perm_str.split('.')[0], + codename=perm_str.split('.')[1]).id) + except Permission.DoesNotExist: + raise Permission.DoesNotExist(f'Permission {perm_str_list} does not exist.') + except Permission.MultipleObjectsReturned: + raise Permission.MultipleObjectsReturned( + Permission.objects.filter(content_type__app_label=perm_str.split('.')[0], + codename=perm_str.split('.')[1])) + self.permissions = Permission.objects.filter(id__in=permission_id) def __str__(self): - return f"{str(self.__class__)} - {self.url} - {self.permission}" + return f"{str(self.__class__)} - {self.url} - {self.permissions}" def call_url(self, client): raise NotImplemented @@ -110,10 +114,12 @@ def run_permissions_tests(self, testing_list): response = test_context.call_url(self.client) self.assertEqual(test_context.get_expected_not_allowed_status_code(self.client), response.status_code, f"{test_context}: expected: {test_context.get_expected_not_allowed_status_code(self.client)}, got: {response.status_code}") - self.empty_role.permissions.add(test_context.permission) + # for permission in test_context.permissions: + self.empty_role.permissions.add(*test_context.permissions) response = test_context.call_url(self.client) if response.status_code == 400: print(response.content) self.assertEqual(test_context.get_expected_status_code(self.client), response.status_code, f"{test_context}: expected: {test_context.get_expected_status_code(self.client)}, got: {response.status_code}") - self.empty_role.permissions.remove(test_context.permission) + for permission in test_context.permissions: + self.empty_role.permissions.remove(permission) \ No newline at end of file diff --git a/tests/test_profiles/test_api/test_urls/test_globalscope.py b/tests/test_profiles/test_api/test_urls/test_globalscope.py index f2df73e97..4c5d5e84a 100644 --- a/tests/test_profiles/test_api/test_urls/test_globalscope.py +++ b/tests/test_profiles/test_api/test_urls/test_globalscope.py @@ -13,11 +13,11 @@ def test_globalscope_views(self): testing_view_list = [ TestingGetContextView( url='api_globalscope_details', - perm_str='profiles.view_globalscope', + perm_str_list=['profiles.view_globalscope'], ), TestingPutContextView( url='api_globalscope_details', - perm_str='profiles.change_globalscope', + perm_str_list=['profiles.change_globalscope'], data={ 'roles': [], 'global_permissions': [] @@ -25,25 +25,25 @@ def test_globalscope_views(self): ), TestingPatchContextView( url='api_globalscope_details', - perm_str='profiles.change_globalscope', + perm_str_list=['profiles.change_globalscope'], data={ 'global_permissions': [] }, ), TestingGetContextView( url='api_globalscope_rbac_create', - perm_str='profiles.view_users_globalscope', + perm_str_list=['profiles.view_users_globalscope'], url_kwargs={'scope_id': self.global_scope.id} ), TestingPostContextView( url='api_globalscope_rbac_create', - perm_str='profiles.add_users_globalscope', + perm_str_list=['profiles.add_users_globalscope'], url_kwargs={'scope_id': self.global_scope.id}, data={'users': [self.standard_user.id], 'roles': [self.empty_role.id]} ), TestingDeleteContextView( url='api_globalscope_rbac_delete', - perm_str='profiles.delete_users_globalscope', + perm_str_list=['profiles.delete_users_globalscope'], url_kwargs={ 'scope_id': self.global_scope.id, 'user_id': self.standard_user.id, @@ -52,11 +52,11 @@ def test_globalscope_views(self): ), TestingDeleteContextView( url='api_globalscope_user_delete', - perm_str='profiles.delete_users_globalscope', + perm_str_list=['profiles.delete_users_globalscope'], url_kwargs={ 'scope_id': self.global_scope.id, 'user_id': self.standard_user.id, }, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_api/test_urls/test_organization.py b/tests/test_profiles/test_api/test_urls/test_organization.py index 40c354959..1639ff296 100644 --- a/tests/test_profiles/test_api/test_urls/test_organization.py +++ b/tests/test_profiles/test_api/test_urls/test_organization.py @@ -15,11 +15,11 @@ def test_organization_views(self): testing_view_list = [ TestingGetContextView( url='api_organization_list_create', - perm_str='profiles.list_organization', + perm_str_list=['profiles.list_organization'], ), TestingPostContextView( url='api_organization_list_create', - perm_str='profiles.add_organization', + perm_str_list=['profiles.add_organization'], data={ 'name': "test organization", 'description': "test description" @@ -27,12 +27,12 @@ def test_organization_views(self): ), TestingGetContextView( url='api_organization_details', - perm_str='profiles.view_organization', + perm_str_list=['profiles.view_organization'], url_kwargs={'pk': self.test_quota_scope_org.id} ), TestingPutContextView( url='api_organization_details', - perm_str='profiles.change_organization', + perm_str_list=['profiles.change_organization'], data={ 'name': "test organization put", 'description': "test description put" @@ -41,7 +41,7 @@ def test_organization_views(self): ), TestingPatchContextView( url='api_organization_details', - perm_str='profiles.change_organization', + perm_str_list=['profiles.change_organization'], data={ 'description': "new description patch" }, @@ -49,18 +49,18 @@ def test_organization_views(self): ), TestingGetContextView( url='api_team_rbac_create', - perm_str='profiles.view_users_organization', + perm_str_list=['profiles.view_users_organization'], url_kwargs={'scope_id': self.test_quota_scope_org.id} ), TestingPostContextView( url='api_organization_rbac_create', - perm_str='profiles.add_users_organization', + perm_str_list=['profiles.add_users_organization'], url_kwargs={'scope_id': self.test_quota_scope_org.id}, data={'users': [self.standard_user.id], 'roles': [self.empty_role.id]} ), TestingDeleteContextView( url='api_organization_rbac_delete', - perm_str='profiles.delete_users_organization', + perm_str_list=['profiles.delete_users_organization'], url_kwargs={ 'scope_id': self.test_quota_scope_org.id, 'user_id': self.standard_user.id, @@ -69,7 +69,7 @@ def test_organization_views(self): ), TestingDeleteContextView( url='api_organization_user_delete', - perm_str='profiles.delete_users_organization', + perm_str_list=['profiles.delete_users_organization'], url_kwargs={ 'scope_id': self.test_quota_scope_org.id, 'user_id': self.standard_user.id, @@ -77,8 +77,8 @@ def test_organization_views(self): ), TestingDeleteContextView( url='api_organization_details', - perm_str='profiles.delete_organization', + perm_str_list=['profiles.delete_organization'], url_kwargs={'pk': self.organization_to_delete.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_api/test_urls/test_permission.py b/tests/test_profiles/test_api/test_urls/test_permission.py index 8c6a7025e..d4cfff0b1 100644 --- a/tests/test_profiles/test_api/test_urls/test_permission.py +++ b/tests/test_profiles/test_api/test_urls/test_permission.py @@ -13,11 +13,11 @@ def test_permission_views(self): testing_view_list = [ TestingGetContextView( url='api_permission_list_create', - perm_str='profiles.list_permission', + perm_str_list=['profiles.list_permission'], ), TestingPostContextView( url='api_permission_list_create', - perm_str='profiles.add_permission', + perm_str_list=['profiles.add_permission'], data={ 'name': 'New permission', 'codename': 'the_code_name', @@ -26,12 +26,12 @@ def test_permission_views(self): ), TestingGetContextView( url='api_permission_details', - perm_str='profiles.view_permission', + perm_str_list=['profiles.view_permission'], url_kwargs={'pk': self.permission_test.id} ), TestingPutContextView( url='api_permission_details', - perm_str='profiles.change_permission', + perm_str_list=['profiles.change_permission'], data={ 'name': 'New permission put', 'codename': 'the_code_name_put', @@ -41,7 +41,7 @@ def test_permission_views(self): ), TestingPatchContextView( url='api_permission_details', - perm_str='profiles.change_permission', + perm_str_list=['profiles.change_permission'], data={ 'name': 'New permission patch', }, @@ -49,8 +49,8 @@ def test_permission_views(self): ), TestingDeleteContextView( url='api_permission_details', - perm_str='profiles.delete_permission', + perm_str_list=['profiles.delete_permission'], url_kwargs={'pk': self.permission_test.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_api/test_urls/test_quota/test_org.py b/tests/test_profiles/test_api/test_urls/test_quota/test_org.py index ed07d45cc..16bfbbfaf 100644 --- a/tests/test_profiles/test_api/test_urls/test_quota/test_org.py +++ b/tests/test_profiles/test_api/test_urls/test_quota/test_org.py @@ -10,11 +10,11 @@ def test_quota_organization_views(self): testing_view_list = [ TestingGetContextView( url='api_quota_list_create', - perm_str='profiles.list_quota', + perm_str_list=['profiles.list_quota'], ), TestingPostContextView( url='api_quota_list_create', - perm_str='profiles.add_quota', + perm_str_list=['profiles.add_quota'], data={ 'scope': self.test_quota_scope_org.id, 'attribute_definition': self.cpu_attribute.id, @@ -23,12 +23,12 @@ def test_quota_organization_views(self): ), TestingGetContextView( url='api_quota_details', - perm_str='profiles.view_quota', + perm_str_list=['profiles.view_quota'], url_kwargs={'pk': self.test_quota_org.id} ), TestingPutContextView( url='api_quota_details', - perm_str='profiles.change_organization_quota', + perm_str_list=['profiles.change_organization_quota'], data={ 'scope': self.test_org.id, 'attribute_definition': self.cpu_attribute.id, @@ -38,7 +38,7 @@ def test_quota_organization_views(self): ), TestingPatchContextView( url='api_quota_details', - perm_str='profiles.change_organization_quota', + perm_str_list=['profiles.change_organization_quota'], data={ 'limit': 100 }, @@ -46,8 +46,8 @@ def test_quota_organization_views(self): ), TestingDeleteContextView( url='api_quota_details', - perm_str='profiles.delete_quota', + perm_str_list=['profiles.delete_quota'], url_kwargs={'pk': self.test_quota_org.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_api/test_urls/test_quota/test_team.py b/tests/test_profiles/test_api/test_urls/test_quota/test_team.py index 23626bfc5..f7ee4e55c 100644 --- a/tests/test_profiles/test_api/test_urls/test_quota/test_team.py +++ b/tests/test_profiles/test_api/test_urls/test_quota/test_team.py @@ -17,11 +17,11 @@ def test_quota_team_views(self): testing_view_list = [ TestingGetContextView( url='api_quota_list_create', - perm_str='profiles.list_quota', + perm_str_list=['profiles.list_quota'], ), TestingPostContextView( url='api_quota_list_create', - perm_str='profiles.add_quota', + perm_str_list=['profiles.add_quota'], data={ 'scope': self.test_quota_scope_team.id, 'attribute_definition': self.attribute_test.id, @@ -30,12 +30,12 @@ def test_quota_team_views(self): ), TestingGetContextView( url='api_quota_details', - perm_str='profiles.view_quota', + perm_str_list=['profiles.view_quota'], url_kwargs={'pk': self.test_quota_team.id} ), TestingPutContextView( url='api_quota_details', - perm_str='profiles.change_team_quota', + perm_str_list=['profiles.change_team_quota'], data={ 'scope': self.test_quota_team.scope.id, 'attribute_definition': self.cpu_attribute.id, @@ -45,7 +45,7 @@ def test_quota_team_views(self): ), TestingPatchContextView( url='api_quota_details', - perm_str='profiles.change_team_quota', + perm_str_list=['profiles.change_team_quota'], data={ 'limit': 50 }, @@ -53,8 +53,8 @@ def test_quota_team_views(self): ), TestingDeleteContextView( url='api_quota_details', - perm_str='profiles.delete_quota', + perm_str_list=['profiles.delete_quota'], url_kwargs={'pk': self.test_quota_team.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_api/test_urls/test_role.py b/tests/test_profiles/test_api/test_urls/test_role.py index bb8a228e1..750608757 100644 --- a/tests/test_profiles/test_api/test_urls/test_role.py +++ b/tests/test_profiles/test_api/test_urls/test_role.py @@ -8,11 +8,11 @@ def test_role_views(self): testing_view_list = [ TestingGetContextView( url='api_role_list_create', - perm_str='profiles.list_role', + perm_str_list=['profiles.list_role'], ), TestingPostContextView( url='api_role_list_create', - perm_str='profiles.add_role', + perm_str_list=['profiles.add_role'], data={ 'name': 'New role', 'description': 'The description', @@ -21,12 +21,12 @@ def test_role_views(self): ), TestingGetContextView( url='api_role_details', - perm_str='profiles.view_role', + perm_str_list=['profiles.view_role'], url_kwargs={'pk': self.organization_admin_role.id} ), TestingPutContextView( url='api_role_details', - perm_str='profiles.change_role', + perm_str_list=['profiles.change_role'], data={ 'name': 'Role put', 'description': 'The description', @@ -37,7 +37,7 @@ def test_role_views(self): ), TestingPatchContextView( url='api_role_details', - perm_str='profiles.change_role', + perm_str_list=['profiles.change_role'], data={ 'description': "new description patch" }, @@ -45,8 +45,8 @@ def test_role_views(self): ), TestingDeleteContextView( url='api_role_details', - perm_str='profiles.delete_role', + perm_str_list=['profiles.delete_role'], url_kwargs={'pk': self.organization_admin_role.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_api/test_urls/test_team.py b/tests/test_profiles/test_api/test_urls/test_team.py index 6da599bfb..4c7eb0f87 100644 --- a/tests/test_profiles/test_api/test_urls/test_team.py +++ b/tests/test_profiles/test_api/test_urls/test_team.py @@ -19,11 +19,11 @@ def test_team_views(self): testing_view_list = [ TestingGetContextView( url='api_team_list_create', - perm_str='profiles.list_team', + perm_str_list=['profiles.list_team'], ), TestingPostContextView( url='api_team_list_create', - perm_str='profiles.add_team', + perm_str_list=['profiles.add_team'], data={ 'name': 'New team', 'description': 'The description', @@ -32,12 +32,12 @@ def test_team_views(self): ), TestingGetContextView( url='api_team_details', - perm_str='profiles.view_team', + perm_str_list=['profiles.view_team'], url_kwargs={'pk': self.test_quota_scope_team.id} ), TestingPutContextView( url='api_team_details', - perm_str='profiles.change_team', + perm_str_list=['profiles.change_team'], data={ 'name': 'Team put', 'description': 'The description', @@ -48,7 +48,7 @@ def test_team_views(self): ), TestingPatchContextView( url='api_team_details', - perm_str='profiles.change_team', + perm_str_list=['profiles.change_team'], data={ 'description': "new description patch" }, @@ -56,18 +56,18 @@ def test_team_views(self): ), TestingGetContextView( url='api_team_rbac_create', - perm_str='profiles.view_users_team', + perm_str_list=['profiles.view_users_team'], url_kwargs={'scope_id': self.test_quota_scope_team.id} ), TestingPostContextView( url='api_team_rbac_create', - perm_str='profiles.add_users_team', + perm_str_list=['profiles.add_users_team'], url_kwargs={'scope_id': self.test_quota_scope_team.id}, data={'users': [self.standard_user.id], 'roles': [self.empty_role.id]} ), TestingDeleteContextView( url='api_team_rbac_delete', - perm_str='profiles.delete_users_team', + perm_str_list=['profiles.delete_users_team'], url_kwargs={ 'scope_id': self.test_quota_scope_team.id, 'user_id': self.standard_user.id, @@ -76,7 +76,7 @@ def test_team_views(self): ), TestingDeleteContextView( url='api_team_user_delete', - perm_str='profiles.delete_users_team', + perm_str_list=['profiles.delete_users_team'], url_kwargs={ 'scope_id': self.test_quota_scope_team.id, 'user_id': self.standard_user.id, @@ -84,8 +84,8 @@ def test_team_views(self): ), TestingDeleteContextView( url='api_team_details', - perm_str='profiles.delete_team', + perm_str_list=['profiles.delete_team'], url_kwargs={'pk': self.test_quota_scope_team.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_api/test_urls/test_user.py b/tests/test_profiles/test_api/test_urls/test_user.py index abd789058..9e596bc32 100644 --- a/tests/test_profiles/test_api/test_urls/test_user.py +++ b/tests/test_profiles/test_api/test_urls/test_user.py @@ -8,20 +8,20 @@ def test_user_views(self): # TODO: to be tested when User has been replaced by SquestUser (list_user permission not defined) # TestingGetUIViews( # url='profiles:api_user_list_create', - # perm_str='auth.list_user', + # perm_str_list=['auth.list_user'], # ), TestingGetContextView( url='api_user_details', - perm_str='auth.view_user', + perm_str_list=['auth.view_user'], url_kwargs={'pk': self.standard_user.id} ), TestingPostContextView( url='api_user_list_create', - perm_str='auth.add_user', + perm_str_list=['auth.add_user'], data={ 'username': "testuser", 'password': "password", }, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_urls/test_globalscope.py b/tests/test_profiles/test_urls/test_globalscope.py index 256e3bbb6..b2d86071b 100644 --- a/tests/test_profiles/test_urls/test_globalscope.py +++ b/tests/test_profiles/test_urls/test_globalscope.py @@ -13,36 +13,36 @@ def test_globalscope(self): testing_view_list = [ TestingGetContextView( url='profiles:globalscope_rbac', - perm_str='profiles.view_users_globalscope', + perm_str_list=['profiles.view_users_globalscope'], ), TestingGetContextView( url='profiles:globalscope_default_permissions', - perm_str='profiles.view_globalscope', + perm_str_list=['profiles.view_globalscope'], ), TestingGetContextView( url='profiles:globalscope_edit', - perm_str='profiles.change_globalscope', + perm_str_list=['profiles.change_globalscope'], ), TestingPostContextView( url='profiles:globalscope_edit', - perm_str='profiles.change_globalscope', + perm_str_list=['profiles.change_globalscope'], data={'user_permission': [ Permission.objects.filter(content_type__app_label='service_catalog').first().id]} ), TestingGetContextView( url='profiles:globalscope_rbac_create', - perm_str='profiles.add_users_globalscope', + perm_str_list=['profiles.add_users_globalscope'], url_kwargs={'scope_id': self.global_scope.id} ), TestingPostContextView( url='profiles:globalscope_rbac_create', - perm_str='profiles.add_users_globalscope', + perm_str_list=['profiles.add_users_globalscope'], url_kwargs={'scope_id': self.global_scope.id}, data={'users': self.standard_user.id, 'roles': self.empty_role.id} ), TestingPostContextView( url='profiles:globalscope_rbac_delete', - perm_str='profiles.delete_users_globalscope', + perm_str_list=['profiles.delete_users_globalscope'], url_kwargs={ 'pk': self.global_scope.id, 'user_id': self.standard_user.id, @@ -51,7 +51,7 @@ def test_globalscope(self): ), TestingGetContextView( url='profiles:globalscope_rbac_delete', - perm_str='profiles.delete_users_globalscope', + perm_str_list=['profiles.delete_users_globalscope'], url_kwargs={ 'pk': self.global_scope.id, 'user_id': self.testing_user.id, @@ -59,11 +59,11 @@ def test_globalscope(self): ), TestingPostContextView( url='profiles:globalscope_rbac_delete', - perm_str='profiles.delete_users_globalscope', + perm_str_list=['profiles.delete_users_globalscope'], url_kwargs={ 'pk': self.global_scope.id, 'user_id': self.testing_user.id, }, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_urls/test_organization.py b/tests/test_profiles/test_urls/test_organization.py index 0ef9135bf..0c3c0c239 100644 --- a/tests/test_profiles/test_urls/test_organization.py +++ b/tests/test_profiles/test_urls/test_organization.py @@ -14,15 +14,15 @@ def test_organization_views(self): testing_view_list = [ TestingGetContextView( url='profiles:organization_list', - perm_str='profiles.list_organization', + perm_str_list=['profiles.list_organization'], ), TestingGetContextView( url='profiles:organization_create', - perm_str='profiles.add_organization', + perm_str_list=['profiles.add_organization'], ), TestingPostContextView( url='profiles:organization_create', - perm_str='profiles.add_organization', + perm_str_list=['profiles.add_organization'], data={ 'name': 'New organization', 'description': 'The description', @@ -31,17 +31,17 @@ def test_organization_views(self): ), TestingGetContextView( url='profiles:organization_details', - perm_str='profiles.view_organization', + perm_str_list=['profiles.view_organization'], url_kwargs={'pk': self.test_quota_scope_org.id} ), TestingGetContextView( url='profiles:organization_edit', - perm_str='profiles.change_organization', + perm_str_list=['profiles.change_organization'], url_kwargs={'pk': self.test_quota_scope_org.id} ), TestingPostContextView( url='profiles:organization_edit', - perm_str='profiles.change_organization', + perm_str_list=['profiles.change_organization'], url_kwargs={'pk': self.test_quota_scope_org.id}, data={ 'name': 'Organization updated', @@ -51,18 +51,18 @@ def test_organization_views(self): ), TestingGetContextView( url='profiles:organization_rbac_create', - perm_str='profiles.add_users_organization', + perm_str_list=['profiles.add_users_organization'], url_kwargs={'scope_id': self.test_quota_scope_org.id} ), TestingPostContextView( url='profiles:organization_rbac_create', - perm_str='profiles.add_users_organization', + perm_str_list=['profiles.add_users_organization'], url_kwargs={'scope_id': self.test_quota_scope_org.id}, data={'users': self.standard_user.id, 'roles': self.empty_role.id} ), TestingPostContextView( url='profiles:organization_rbac_delete', - perm_str='profiles.delete_users_organization', + perm_str_list=['profiles.delete_users_organization'], url_kwargs={ 'pk': self.test_quota_scope_org.id, 'user_id': self.standard_user.id, @@ -71,7 +71,7 @@ def test_organization_views(self): ), TestingGetContextView( url='profiles:organization_rbac_delete', - perm_str='profiles.delete_users_organization', + perm_str_list=['profiles.delete_users_organization'], url_kwargs={ 'pk': self.test_quota_scope_org.id, 'user_id': self.standard_user.id, @@ -79,7 +79,7 @@ def test_organization_views(self): ), TestingPostContextView( url='profiles:organization_rbac_delete', - perm_str='profiles.delete_users_organization', + perm_str_list=['profiles.delete_users_organization'], url_kwargs={ 'pk': self.test_quota_scope_org.id, 'user_id': self.standard_user.id, @@ -87,13 +87,13 @@ def test_organization_views(self): ), TestingGetContextView( url='profiles:organization_delete', - perm_str='profiles.delete_organization', + perm_str_list=['profiles.delete_organization'], url_kwargs={'pk': self.organization_to_delete.id} ), TestingPostContextView( url='profiles:organization_delete', - perm_str='profiles.delete_organization', + perm_str_list=['profiles.delete_organization'], url_kwargs={'pk': self.organization_to_delete.id}, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_urls/test_permission.py b/tests/test_profiles/test_urls/test_permission.py index 912a76a1e..e26a6ac3e 100644 --- a/tests/test_profiles/test_urls/test_permission.py +++ b/tests/test_profiles/test_urls/test_permission.py @@ -13,15 +13,15 @@ def test_permission_views(self): testing_view_list = [ TestingGetContextView( url='profiles:permission_list', - perm_str='profiles.list_permission', + perm_str_list=['profiles.list_permission'], ), TestingGetContextView( url='profiles:permission_create', - perm_str='profiles.add_permission', + perm_str_list=['profiles.add_permission'], ), TestingPostContextView( url='profiles:permission_create', - perm_str='profiles.add_permission', + perm_str_list=['profiles.add_permission'], data={ 'name': 'New permission', 'codename': 'the_code_name', @@ -30,12 +30,12 @@ def test_permission_views(self): ), TestingGetContextView( url='profiles:permission_edit', - perm_str='profiles.change_permission', + perm_str_list=['profiles.change_permission'], url_kwargs={'pk': self.permission_test.id} ), TestingPostContextView( url='profiles:permission_edit', - perm_str='profiles.change_permission', + perm_str_list=['profiles.change_permission'], url_kwargs={'pk': self.permission_test.id}, data={ 'name': 'Permission updated', @@ -45,14 +45,14 @@ def test_permission_views(self): ), TestingGetContextView( url='profiles:permission_delete', - perm_str='profiles.delete_permission', + perm_str_list=['profiles.delete_permission'], url_kwargs={'pk': self.permission_test.id} ), TestingPostContextView( url='profiles:permission_delete', - perm_str='profiles.delete_permission', + perm_str_list=['profiles.delete_permission'], url_kwargs={'pk': self.permission_test.id}, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_urls/test_quota.py b/tests/test_profiles/test_urls/test_quota.py index a353030c2..d4c747f1b 100644 --- a/tests/test_profiles/test_urls/test_quota.py +++ b/tests/test_profiles/test_urls/test_quota.py @@ -7,21 +7,21 @@ def test_quota_views(self): testing_view_list = [ TestingGetContextView( url='profiles:quota_list', - perm_str='profiles.list_quota' + perm_str_list=['profiles.list_quota'] ), TestingGetContextView( url='profiles:quota_details', - perm_str='profiles.view_quota', + perm_str_list=['profiles.view_quota'], url_kwargs={'pk': self.test_quota_org.id} ), TestingGetContextView( url='profiles:organization_quota_edit', - perm_str='profiles.change_organization_quota', + perm_str_list=['profiles.change_organization_quota'], url_kwargs={'scope_id': self.test_org.id} ), TestingPostContextView( url='profiles:organization_quota_edit', - perm_str='profiles.change_organization_quota', + perm_str_list=['profiles.change_organization_quota'], url_kwargs={'scope_id': self.test_org.id}, data={ f"attribute_definition_{self.cpu_attribute.id}": 100, @@ -30,12 +30,12 @@ def test_quota_views(self): ), TestingGetContextView( url='profiles:team_quota_edit', - perm_str='profiles.change_team_quota', + perm_str_list=['profiles.change_team_quota'], url_kwargs={'scope_id': self.test_quota_scope_team.id} ), TestingPostContextView( url='profiles:team_quota_edit', - perm_str='profiles.change_team_quota', + perm_str_list=['profiles.change_team_quota'], url_kwargs={'scope_id': self.test_quota_scope_team.id}, data={ f"attribute_definition_{self.cpu_attribute.id}": 100, @@ -44,13 +44,13 @@ def test_quota_views(self): ), TestingGetContextView( url='profiles:quota_delete', - perm_str='profiles.delete_quota', + perm_str_list=['profiles.delete_quota'], url_kwargs={'pk': self.test_quota_org.id} ), TestingPostContextView( url='profiles:quota_delete', - perm_str='profiles.delete_quota', + perm_str_list=['profiles.delete_quota'], url_kwargs={'pk': self.test_quota_org.id} ), ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_urls/test_role.py b/tests/test_profiles/test_urls/test_role.py index 9c8c891cc..8968c1eaa 100644 --- a/tests/test_profiles/test_urls/test_role.py +++ b/tests/test_profiles/test_urls/test_role.py @@ -7,20 +7,20 @@ def test_role_views(self): testing_view_list = [ TestingGetContextView( url='profiles:role_list', - perm_str='profiles.list_role', + perm_str_list=['profiles.list_role'], ), TestingGetContextView( url='profiles:role_details', - perm_str='profiles.view_role', + perm_str_list=['profiles.view_role'], url_kwargs={'pk': self.organization_admin_role.id} ), TestingGetContextView( url='profiles:role_create', - perm_str='profiles.add_role', + perm_str_list=['profiles.add_role'], ), TestingPostContextView( url='profiles:role_create', - perm_str='profiles.add_role', + perm_str_list=['profiles.add_role'], data={ 'name': 'New role', 'description': 'The description', @@ -29,12 +29,12 @@ def test_role_views(self): ), TestingGetContextView( url='profiles:role_edit', - perm_str='profiles.change_role', + perm_str_list=['profiles.change_role'], url_kwargs={'pk': self.organization_admin_role.id} ), TestingPostContextView( url='profiles:role_edit', - perm_str='profiles.change_role', + perm_str_list=['profiles.change_role'], url_kwargs={'pk': self.organization_admin_role.id}, data={ 'name': 'Role updated', @@ -44,14 +44,14 @@ def test_role_views(self): ), TestingGetContextView( url='profiles:role_delete', - perm_str='profiles.delete_role', + perm_str_list=['profiles.delete_role'], url_kwargs={'pk': self.organization_admin_role.id} ), TestingPostContextView( url='profiles:role_delete', - perm_str='profiles.delete_role', + perm_str_list=['profiles.delete_role'], url_kwargs={'pk': self.organization_admin_role.id}, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_urls/test_scope.py b/tests/test_profiles/test_urls/test_scope.py index 1ce1eebe1..9e1a0bcab 100644 --- a/tests/test_profiles/test_urls/test_scope.py +++ b/tests/test_profiles/test_urls/test_scope.py @@ -14,17 +14,17 @@ def test_scope_redirect_views(self): testing_view_list = [ TestingGetContextView( url='profiles:scope_details', - perm_str='profiles.view_organization', + perm_str_list=['profiles.view_organization'], url_kwargs={'pk': self.organization.id}, follow=True ), TestingGetContextView( url='profiles:scope_details', - perm_str='profiles.view_team', + perm_str_list=['profiles.view_team'], url_kwargs={'pk': self.team.id}, follow=True ), ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_urls/test_team.py b/tests/test_profiles/test_urls/test_team.py index 93b7c68e8..3066824e6 100644 --- a/tests/test_profiles/test_urls/test_team.py +++ b/tests/test_profiles/test_urls/test_team.py @@ -20,11 +20,11 @@ def test_team_views(self): testing_view_list = [ TestingGetContextView( url='profiles:team_list', - perm_str='profiles.list_team', + perm_str_list=['profiles.list_team'], ), TestingPostContextView( url='profiles:team_create', - perm_str='profiles.add_team', + perm_str_list=['profiles.add_team'], data={ 'name': 'New team', 'description': 'The description', @@ -35,23 +35,23 @@ def test_team_views(self): ), TestingGetContextView( url='profiles:team_details', - perm_str='profiles.view_team', + perm_str_list=['profiles.view_team'], url_kwargs={'pk': self.test_quota_scope_team.id} ), TestingGetContextView( url='profiles:team_rbac_create', - perm_str='profiles.add_users_team', + perm_str_list=['profiles.add_users_team'], url_kwargs={'scope_id': self.test_quota_scope_team.id} ), TestingPostContextView( url='profiles:team_rbac_create', - perm_str='profiles.add_users_team', + perm_str_list=['profiles.add_users_team'], url_kwargs={'scope_id': self.test_quota_scope_team.id}, data={'users': self.standard_user.id, 'roles': self.empty_role.id} ), TestingPostContextView( url='profiles:team_rbac_delete', - perm_str='profiles.delete_users_team', + perm_str_list=['profiles.delete_users_team'], url_kwargs={ 'pk': self.test_quota_scope_team.id, 'user_id': self.standard_user.id, @@ -60,7 +60,7 @@ def test_team_views(self): ), TestingGetContextView( url='profiles:team_rbac_delete', - perm_str='profiles.delete_users_team', + perm_str_list=['profiles.delete_users_team'], url_kwargs={ 'pk': self.test_quota_scope_team.id, 'user_id': self.standard_user.id, @@ -68,7 +68,7 @@ def test_team_views(self): ), TestingPostContextView( url='profiles:team_rbac_delete', - perm_str='profiles.delete_users_team', + perm_str_list=['profiles.delete_users_team'], url_kwargs={ 'pk': self.test_quota_scope_team.id, 'user_id': self.standard_user.id, @@ -76,17 +76,17 @@ def test_team_views(self): ), TestingGetContextView( url='profiles:team_delete', - perm_str='profiles.delete_team', + perm_str_list=['profiles.delete_team'], url_kwargs={'pk': self.test_quota_scope_team.id} ), TestingGetContextView( url='profiles:team_edit', - perm_str='profiles.change_team', + perm_str_list=['profiles.change_team'], url_kwargs={'pk': self.test_quota_scope_team.id} ), TestingPostContextView( url='profiles:team_edit', - perm_str='profiles.change_team', + perm_str_list=['profiles.change_team'], url_kwargs={'pk': self.test_quota_scope_team.id}, data={ 'name': 'Organization updated', @@ -97,8 +97,8 @@ def test_team_views(self): ), TestingPostContextView( url='profiles:team_delete', - perm_str='profiles.delete_team', + perm_str_list=['profiles.delete_team'], url_kwargs={'pk': self.test_quota_scope_team.id}, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_profiles/test_urls/test_user.py b/tests/test_profiles/test_urls/test_user.py index e09d08946..5ed929efa 100644 --- a/tests/test_profiles/test_urls/test_user.py +++ b/tests/test_profiles/test_urls/test_user.py @@ -8,12 +8,12 @@ def test_user_views(self): # TODO: to be tested when User has been replaced by SquestUser (list_user permission not defined) # TestingGetUIViews( # url='profiles:user_list', - # perm_str='auth.list_user', + # perm_str_list=['auth.list_user'], # ), TestingGetContextView( url='profiles:user_details', - perm_str='auth.view_user', + perm_str_list=['auth.view_user'], url_kwargs={'pk': self.standard_user.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_resource_tracker_v2/test_api/test_urls/test_attributedefinition.py b/tests/test_resource_tracker_v2/test_api/test_urls/test_attributedefinition.py index 260764003..6192fd91a 100644 --- a/tests/test_resource_tracker_v2/test_api/test_urls/test_attributedefinition.py +++ b/tests/test_resource_tracker_v2/test_api/test_urls/test_attributedefinition.py @@ -8,11 +8,11 @@ def test_attributedefinition_views(self): testing_view_list = [ TestingGetContextView( url='api_attributedefinition_list_create', - perm_str='resource_tracker_v2.list_attributedefinition', + perm_str_list=['resource_tracker_v2.list_attributedefinition'], ), TestingPostContextView( url='api_attributedefinition_list_create', - perm_str='resource_tracker_v2.add_attributedefinition', + perm_str_list=['resource_tracker_v2.add_attributedefinition'], data={ 'name': 'New attribute', 'description': 'The description', @@ -20,12 +20,12 @@ def test_attributedefinition_views(self): ), TestingGetContextView( url='api_attributedefinition_details', - perm_str='resource_tracker_v2.view_attributedefinition', + perm_str_list=['resource_tracker_v2.view_attributedefinition'], url_kwargs={'pk': self.core_attribute.id} ), TestingPutContextView( url='api_attributedefinition_details', - perm_str='resource_tracker_v2.change_attributedefinition', + perm_str_list=['resource_tracker_v2.change_attributedefinition'], data={ 'name': 'Attribute PUT', 'description': 'The description', @@ -34,7 +34,7 @@ def test_attributedefinition_views(self): ), TestingPatchContextView( url='api_attributedefinition_details', - perm_str='resource_tracker_v2.change_attributedefinition', + perm_str_list=['resource_tracker_v2.change_attributedefinition'], data={ 'name': 'Attribute PATCH', }, @@ -42,8 +42,8 @@ def test_attributedefinition_views(self): ), TestingDeleteContextView( url='api_attributedefinition_details', - perm_str='resource_tracker_v2.delete_attributedefinition', + perm_str_list=['resource_tracker_v2.delete_attributedefinition'], url_kwargs={'pk': self.core_attribute.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_resource_tracker_v2/test_api/test_urls/test_resource.py b/tests/test_resource_tracker_v2/test_api/test_urls/test_resource.py index 4772ee70d..39556eb9f 100644 --- a/tests/test_resource_tracker_v2/test_api/test_urls/test_resource.py +++ b/tests/test_resource_tracker_v2/test_api/test_urls/test_resource.py @@ -8,11 +8,11 @@ def test_resource_views(self): testing_view_list = [ TestingGetContextView( url='api_resource_list_create', - perm_str='resource_tracker_v2.list_resource', + perm_str_list=['resource_tracker_v2.list_resource'], ), TestingPostContextView( url='api_resource_list_create', - perm_str='resource_tracker_v2.add_resource', + perm_str_list=['resource_tracker_v2.add_resource'], data={ 'resource_group': self.single_vms.id, 'name': 'New Resource', @@ -30,12 +30,12 @@ def test_resource_views(self): ), TestingGetContextView( url='api_resource_details', - perm_str='resource_tracker_v2.view_resource', + perm_str_list=['resource_tracker_v2.view_resource'], url_kwargs={'pk': self.vm1.id} ), TestingPutContextView( url='api_resource_details', - perm_str='resource_tracker_v2.change_resource', + perm_str_list=['resource_tracker_v2.change_resource'], data={ 'resource_group': self.single_vms.id, 'name': 'Resource PUT', @@ -54,7 +54,7 @@ def test_resource_views(self): ), TestingPatchContextView( url='api_resource_details', - perm_str='resource_tracker_v2.change_resource', + perm_str_list=['resource_tracker_v2.change_resource'], data={ 'name': 'Resource PATCH', }, @@ -62,8 +62,8 @@ def test_resource_views(self): ), TestingDeleteContextView( url='api_resource_details', - perm_str='resource_tracker_v2.delete_resource', + perm_str_list=['resource_tracker_v2.delete_resource'], url_kwargs={'pk': self.vm1.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_resource_tracker_v2/test_api/test_urls/test_resourcegroup.py b/tests/test_resource_tracker_v2/test_api/test_urls/test_resourcegroup.py index a825fec92..bfaf8979e 100644 --- a/tests/test_resource_tracker_v2/test_api/test_urls/test_resourcegroup.py +++ b/tests/test_resource_tracker_v2/test_api/test_urls/test_resourcegroup.py @@ -8,11 +8,11 @@ def test_resourcegroup_views(self): testing_view_list = [ TestingGetContextView( url='api_resourcegroup_list_create', - perm_str='resource_tracker_v2.list_resourcegroup', + perm_str_list=['resource_tracker_v2.list_resourcegroup'], ), TestingPostContextView( url='api_resourcegroup_list_create', - perm_str='resource_tracker_v2.add_resourcegroup', + perm_str_list=['resource_tracker_v2.add_resourcegroup'], data={ 'name': 'New Resource Group', 'tags': ["testTag"] @@ -20,12 +20,12 @@ def test_resourcegroup_views(self): ), TestingGetContextView( url='api_resourcegroup_details', - perm_str='resource_tracker_v2.view_resourcegroup', + perm_str_list=['resource_tracker_v2.view_resourcegroup'], url_kwargs={'pk': self.cluster.id} ), TestingPutContextView( url='api_resourcegroup_details', - perm_str='resource_tracker_v2.change_resourcegroup', + perm_str_list=['resource_tracker_v2.change_resourcegroup'], data={ 'name': 'Resource Group PUT', 'tags': ["testTag"] @@ -34,7 +34,7 @@ def test_resourcegroup_views(self): ), TestingPatchContextView( url='api_resourcegroup_details', - perm_str='resource_tracker_v2.change_resourcegroup', + perm_str_list=['resource_tracker_v2.change_resourcegroup'], data={ 'name': 'Resource Group PATCH', }, @@ -42,8 +42,8 @@ def test_resourcegroup_views(self): ), TestingDeleteContextView( url='api_resourcegroup_details', - perm_str='resource_tracker_v2.delete_resourcegroup', + perm_str_list=['resource_tracker_v2.delete_resourcegroup'], url_kwargs={'pk': self.cluster.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_resource_tracker_v2/test_api/test_urls/test_transformer.py b/tests/test_resource_tracker_v2/test_api/test_urls/test_transformer.py index c678e7f6e..2312db2ba 100644 --- a/tests/test_resource_tracker_v2/test_api/test_urls/test_transformer.py +++ b/tests/test_resource_tracker_v2/test_api/test_urls/test_transformer.py @@ -12,11 +12,11 @@ def test_transformer_views(self): testing_view_list = [ TestingGetContextView( url='api_transformer_list_create', - perm_str='resource_tracker_v2.list_transformer', + perm_str_list=['resource_tracker_v2.list_transformer'], ), TestingPostContextView( url='api_transformer_list_create', - perm_str='resource_tracker_v2.add_transformer', + perm_str_list=['resource_tracker_v2.add_transformer'], data={ 'resource_group': self.single_vms.id, 'attribute_definition': self.vcpu_attribute.id, @@ -26,14 +26,14 @@ def test_transformer_views(self): ), TestingGetContextView( url='api_transformer_details', - perm_str='resource_tracker_v2.view_transformer', + perm_str_list=['resource_tracker_v2.view_transformer'], url_kwargs={ 'pk': self.v_memory_from_memory_transformer.id, } ), TestingPutContextView( url='api_transformer_details', - perm_str='resource_tracker_v2.change_transformer', + perm_str_list=['resource_tracker_v2.change_transformer'], data={ 'resource_group': self.single_vms.id, 'attribute_definition': self.v_memory_attribute.id, @@ -47,7 +47,7 @@ def test_transformer_views(self): ), TestingPatchContextView( url='api_transformer_details', - perm_str='resource_tracker_v2.change_transformer', + perm_str_list=['resource_tracker_v2.change_transformer'], data={ 'factor': 16, }, @@ -57,10 +57,10 @@ def test_transformer_views(self): ), TestingDeleteContextView( url='api_transformer_details', - perm_str='resource_tracker_v2.delete_transformer', + perm_str_list=['resource_tracker_v2.delete_transformer'], url_kwargs={ 'pk': self.v_memory_from_memory_transformer.id, } ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_resource_tracker_v2/test_urls/test_attributedefinition.py b/tests/test_resource_tracker_v2/test_urls/test_attributedefinition.py index b323b5b7a..5ca34e1f1 100644 --- a/tests/test_resource_tracker_v2/test_urls/test_attributedefinition.py +++ b/tests/test_resource_tracker_v2/test_urls/test_attributedefinition.py @@ -7,20 +7,20 @@ def test_attributedefinition_views(self): testing_view_list = [ TestingGetContextView( url='resource_tracker_v2:attributedefinition_list', - perm_str='resource_tracker_v2.list_attributedefinition', + perm_str_list=['resource_tracker_v2.list_attributedefinition'], ), TestingGetContextView( url='resource_tracker_v2:attributedefinition_details', - perm_str='resource_tracker_v2.view_attributedefinition', + perm_str_list=['resource_tracker_v2.view_attributedefinition'], url_kwargs={'pk': self.core_attribute.id} ), TestingGetContextView( url='resource_tracker_v2:attributedefinition_create', - perm_str='resource_tracker_v2.add_attributedefinition', + perm_str_list=['resource_tracker_v2.add_attributedefinition'], ), TestingPostContextView( url='resource_tracker_v2:attributedefinition_create', - perm_str='resource_tracker_v2.add_attributedefinition', + perm_str_list=['resource_tracker_v2.add_attributedefinition'], data={ 'name': 'New attribute', 'description': 'The description', @@ -28,12 +28,12 @@ def test_attributedefinition_views(self): ), TestingGetContextView( url='resource_tracker_v2:attributedefinition_edit', - perm_str='resource_tracker_v2.change_attributedefinition', + perm_str_list=['resource_tracker_v2.change_attributedefinition'], url_kwargs={'pk': self.core_attribute.id} ), TestingPostContextView( url='resource_tracker_v2:attributedefinition_edit', - perm_str='resource_tracker_v2.change_attributedefinition', + perm_str_list=['resource_tracker_v2.change_attributedefinition'], url_kwargs={'pk': self.core_attribute.id}, data={ 'name': 'Attribute updated', @@ -42,14 +42,14 @@ def test_attributedefinition_views(self): ), TestingGetContextView( url='resource_tracker_v2:attributedefinition_delete', - perm_str='resource_tracker_v2.delete_attributedefinition', + perm_str_list=['resource_tracker_v2.delete_attributedefinition'], url_kwargs={'pk': self.core_attribute.id} ), TestingPostContextView( url='resource_tracker_v2:attributedefinition_delete', - perm_str='resource_tracker_v2.delete_attributedefinition', + perm_str_list=['resource_tracker_v2.delete_attributedefinition'], url_kwargs={'pk': self.core_attribute.id}, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_resource_tracker_v2/test_urls/test_resource.py b/tests/test_resource_tracker_v2/test_urls/test_resource.py index d169f41b2..8d93784cb 100644 --- a/tests/test_resource_tracker_v2/test_urls/test_resource.py +++ b/tests/test_resource_tracker_v2/test_urls/test_resource.py @@ -7,17 +7,17 @@ def test_resource_views(self): testing_view_list = [ TestingGetContextView( url='resource_tracker_v2:resource_list', - perm_str='resource_tracker_v2.list_resource', + perm_str_list=['resource_tracker_v2.list_resource'], url_kwargs={'resource_group_id': self.single_vms.id} ), TestingGetContextView( url='resource_tracker_v2:resource_create', - perm_str='resource_tracker_v2.add_resource', + perm_str_list=['resource_tracker_v2.add_resource'], url_kwargs={'resource_group_id': self.single_vms.id} ), TestingPostContextView( url='resource_tracker_v2:resource_create', - perm_str='resource_tracker_v2.add_resource', + perm_str_list=['resource_tracker_v2.add_resource'], url_kwargs={'resource_group_id': self.single_vms.id}, data={ 'name': 'vm3', @@ -28,12 +28,12 @@ def test_resource_views(self): ), TestingGetContextView( url='resource_tracker_v2:resource_edit', - perm_str='resource_tracker_v2.change_resource', + perm_str_list=['resource_tracker_v2.change_resource'], url_kwargs={'resource_group_id': self.single_vms.id, 'pk': self.vm1.id} ), TestingPostContextView( url='resource_tracker_v2:resource_edit', - perm_str='resource_tracker_v2.change_resource', + perm_str_list=['resource_tracker_v2.change_resource'], url_kwargs={'resource_group_id': self.single_vms.id, 'pk': self.vm1.id}, data={ 'name': 'vm updated', @@ -44,12 +44,12 @@ def test_resource_views(self): ), TestingGetContextView( url='resource_tracker_v2:resource_move', - perm_str='resource_tracker_v2.change_resource', + perm_str_list=['resource_tracker_v2.change_resource'], url_kwargs={'resource_group_id': self.single_vms.id, 'pk': self.vm1.id} ), TestingPostContextView( url='resource_tracker_v2:resource_move', - perm_str='resource_tracker_v2.change_resource', + perm_str_list=['resource_tracker_v2.change_resource'], url_kwargs={'resource_group_id': self.single_vms.id, 'pk': self.vm1.id}, data={ 'resource_group': self.cluster.id @@ -57,12 +57,12 @@ def test_resource_views(self): ), TestingGetContextView( url='resource_tracker_v2:resource_delete', - perm_str='resource_tracker_v2.delete_resource', + perm_str_list=['resource_tracker_v2.delete_resource'], url_kwargs={'resource_group_id': self.single_vms.id, 'pk': self.vm1.id} ), TestingPostContextView( url='resource_tracker_v2:resource_delete', - perm_str='resource_tracker_v2.delete_resource', + perm_str_list=['resource_tracker_v2.delete_resource'], url_kwargs={'resource_group_id': self.single_vms.id, 'pk': self.vm1.id} ) ] @@ -73,7 +73,7 @@ def test_resource_views_bulk_delete(self): TestingGetContextView( url='resource_tracker_v2:resource_bulk_delete', - perm_str='resource_tracker_v2.delete_resource', + perm_str_list=['resource_tracker_v2.delete_resource'], url_kwargs={'resource_group_id': self.single_vms.id}, data={ 'selection': [resource.id for resource in self.single_vms.resources.all()] @@ -81,7 +81,7 @@ def test_resource_views_bulk_delete(self): }), TestingPostContextView( url='resource_tracker_v2:resource_bulk_delete', - perm_str='resource_tracker_v2.delete_resource', + perm_str_list=['resource_tracker_v2.delete_resource'], url_kwargs={'resource_group_id': self.single_vms.id}, data={ 'selection': [resource.id for resource in self.single_vms.resources.all()] @@ -89,4 +89,4 @@ def test_resource_views_bulk_delete(self): } ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_resource_tracker_v2/test_urls/test_resourcegroup.py b/tests/test_resource_tracker_v2/test_urls/test_resourcegroup.py index 0686f2b5c..a4e10a6ac 100644 --- a/tests/test_resource_tracker_v2/test_urls/test_resourcegroup.py +++ b/tests/test_resource_tracker_v2/test_urls/test_resourcegroup.py @@ -7,23 +7,23 @@ def test_resourcegroup_views(self): testing_view_list = [ TestingGetContextView( url='resource_tracker_v2:resourcegroup_list', - perm_str='resource_tracker_v2.list_resourcegroup', + perm_str_list=['resource_tracker_v2.list_resourcegroup'], ), TestingGetContextView( url='resource_tracker_v2:resourcegroup_list_table', - perm_str='resource_tracker_v2.list_resourcegroup', + perm_str_list=['resource_tracker_v2.list_resourcegroup'], ), TestingGetContextView( url='resource_tracker_v2:resource_tracker_graph', - perm_str='resource_tracker_v2.list_resourcegroup', + perm_str_list=['resource_tracker_v2.list_resourcegroup'], ), TestingGetContextView( url='resource_tracker_v2:resourcegroup_create', - perm_str='resource_tracker_v2.add_resourcegroup', + perm_str_list=['resource_tracker_v2.add_resourcegroup'], ), TestingPostContextView( url='resource_tracker_v2:resourcegroup_create', - perm_str='resource_tracker_v2.add_resourcegroup', + perm_str_list=['resource_tracker_v2.add_resourcegroup'], data={ 'name': 'New attribute', 'description': 'The description', @@ -31,17 +31,17 @@ def test_resourcegroup_views(self): ), TestingGetContextView( url='resource_tracker_v2:resourcegroup_details', - perm_str='resource_tracker_v2.view_resourcegroup', + perm_str_list=['resource_tracker_v2.view_resourcegroup'], url_kwargs={'pk': self.cluster.id} ), TestingGetContextView( url='resource_tracker_v2:resourcegroup_edit', - perm_str='resource_tracker_v2.change_resourcegroup', + perm_str_list=['resource_tracker_v2.change_resourcegroup'], url_kwargs={'pk': self.cluster.id} ), TestingPostContextView( url='resource_tracker_v2:resourcegroup_edit', - perm_str='resource_tracker_v2.change_resourcegroup', + perm_str_list=['resource_tracker_v2.change_resourcegroup'], url_kwargs={'pk': self.cluster.id}, data={ 'name': 'Attribute updated', @@ -50,14 +50,14 @@ def test_resourcegroup_views(self): ), TestingGetContextView( url='resource_tracker_v2:resourcegroup_delete', - perm_str='resource_tracker_v2.delete_resourcegroup', + perm_str_list=['resource_tracker_v2.delete_resourcegroup'], url_kwargs={'pk': self.cluster.id} ), TestingPostContextView( url='resource_tracker_v2:resourcegroup_delete', - perm_str='resource_tracker_v2.delete_resourcegroup', + perm_str_list=['resource_tracker_v2.delete_resourcegroup'], url_kwargs={'pk': self.cluster.id}, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_resource_tracker_v2/test_urls/test_transformer.py b/tests/test_resource_tracker_v2/test_urls/test_transformer.py index 6b9eca22e..bc7db0ed5 100644 --- a/tests/test_resource_tracker_v2/test_urls/test_transformer.py +++ b/tests/test_resource_tracker_v2/test_urls/test_transformer.py @@ -11,7 +11,7 @@ def test_transformer_views(self): testing_view_list = [ TestingGetContextView( url='resource_tracker_v2:ajax_load_attribute', - perm_str='resource_tracker_v2.list_transformer', + perm_str_list=['resource_tracker_v2.list_transformer'], data={ 'current_resource_group_id': self.single_vms.id, 'target_resource_group_id': self.cluster.id @@ -19,17 +19,17 @@ def test_transformer_views(self): ), TestingGetContextView( url='resource_tracker_v2:transformer_list', - perm_str='resource_tracker_v2.list_transformer', + perm_str_list=['resource_tracker_v2.list_transformer'], url_kwargs={'resource_group_id': self.single_vms.id} ), TestingGetContextView( url='resource_tracker_v2:transformer_create', - perm_str='resource_tracker_v2.add_transformer', + perm_str_list=['resource_tracker_v2.add_transformer'], url_kwargs={'resource_group_id': self.single_vms.id} ), TestingPostContextView( url='resource_tracker_v2:transformer_create', - perm_str='resource_tracker_v2.add_transformer', + perm_str_list=['resource_tracker_v2.add_transformer'], url_kwargs={'resource_group_id': self.single_vms.id}, data={ 'attribute_definition': self.vcpu_attribute.id, @@ -40,12 +40,12 @@ def test_transformer_views(self): ), TestingGetContextView( url='resource_tracker_v2:transformer_edit', - perm_str='resource_tracker_v2.change_transformer', + perm_str_list=['resource_tracker_v2.change_transformer'], url_kwargs={'resource_group_id': self.single_vms.id, 'attribute_id': self.vcpu_attribute.id} ), TestingPostContextView( url='resource_tracker_v2:transformer_edit', - perm_str='resource_tracker_v2.change_transformer', + perm_str_list=['resource_tracker_v2.change_transformer'], url_kwargs={'resource_group_id': self.single_vms.id, 'attribute_id': self.vcpu_attribute.id}, data={ 'attribute_definition': self.vcpu_attribute.id, @@ -56,13 +56,13 @@ def test_transformer_views(self): ), TestingGetContextView( url='resource_tracker_v2:transformer_delete', - perm_str='resource_tracker_v2.delete_transformer', + perm_str_list=['resource_tracker_v2.delete_transformer'], url_kwargs={'resource_group_id': self.single_vms.id, 'attribute_id': self.vcpu_attribute.id} ), TestingPostContextView( url='resource_tracker_v2:transformer_delete', - perm_str='resource_tracker_v2.delete_transformer', + perm_str_list=['resource_tracker_v2.delete_transformer'], url_kwargs={'resource_group_id': self.single_vms.id, 'attribute_id': self.vcpu_attribute.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_approvalstep.py b/tests/test_service_catalog/test_api/test_urls/test_approvalstep.py index f33c1e432..a2883ef8f 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_approvalstep.py +++ b/tests/test_service_catalog/test_api/test_urls/test_approvalstep.py @@ -26,11 +26,11 @@ def test_approvalstep_views(self): testing_view_list = [ TestingGetContextView( url='api_approvalstep_list_create', - perm_str='service_catalog.list_approvalstep', + perm_str_list=['service_catalog.list_approvalstep'], ), TestingPostContextView( url='api_approvalstep_list_create', - perm_str='service_catalog.add_approvalstep', + perm_str_list=['service_catalog.add_approvalstep'], data={ 'approval_workflow': self.approval_workflow.id, 'name': 'New approval step', @@ -41,12 +41,12 @@ def test_approvalstep_views(self): ), TestingGetContextView( url='api_approvalstep_details', - perm_str='service_catalog.view_approvalstep', + perm_str_list=['service_catalog.view_approvalstep'], url_kwargs={'pk': self.approval_step.id} ), TestingPutContextView( url='api_approvalstep_details', - perm_str='service_catalog.change_approvalstep', + perm_str_list=['service_catalog.change_approvalstep'], data={ 'approval_workflow': self.approval_workflow.id, 'name': 'Approval step PUT', @@ -58,7 +58,7 @@ def test_approvalstep_views(self): ), TestingPatchContextView( url='api_approvalstep_details', - perm_str='service_catalog.change_approvalstep', + perm_str_list=['service_catalog.change_approvalstep'], data={ 'name': 'Approval step PATCH' }, @@ -66,8 +66,8 @@ def test_approvalstep_views(self): ), TestingDeleteContextView( url='api_approvalstep_details', - perm_str='service_catalog.delete_approvalstep', + perm_str_list=['service_catalog.delete_approvalstep'], url_kwargs={'pk': self.approval_step.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_approvalworkflow/test_crud.py b/tests/test_service_catalog/test_api/test_urls/test_approvalworkflow/test_crud.py index 87178949b..9ca8052e4 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_approvalworkflow/test_crud.py +++ b/tests/test_service_catalog/test_api/test_urls/test_approvalworkflow/test_crud.py @@ -17,11 +17,11 @@ def test_approvalworkflow_views(self): testing_view_list = [ TestingGetContextView( url='api_approvalworkflow_list_create', - perm_str='service_catalog.list_approvalworkflow', + perm_str_list=['service_catalog.list_approvalworkflow'], ), TestingPostContextView( url='api_approvalworkflow_list_create', - perm_str='service_catalog.add_approvalworkflow', + perm_str_list=['service_catalog.add_approvalworkflow'], data={ 'name': 'New approval workflow', 'operation': self.update_operation_test.id, @@ -30,12 +30,12 @@ def test_approvalworkflow_views(self): ), TestingGetContextView( url='api_approvalworkflow_details', - perm_str='service_catalog.view_approvalworkflow', + perm_str_list=['service_catalog.view_approvalworkflow'], url_kwargs={'pk': self.approval_workflow.id} ), TestingPutContextView( url='api_approvalworkflow_details', - perm_str='service_catalog.change_approvalworkflow', + perm_str_list=['service_catalog.change_approvalworkflow'], data={ 'name': 'Approval workflow PUT', 'operation': self.create_operation_test.id, @@ -45,7 +45,7 @@ def test_approvalworkflow_views(self): ), TestingPatchContextView( url='api_approvalworkflow_details', - perm_str='service_catalog.change_approvalworkflow', + perm_str_list=['service_catalog.change_approvalworkflow'], data={ 'name': 'Approval workflow PATCH', }, @@ -53,8 +53,8 @@ def test_approvalworkflow_views(self): ), TestingDeleteContextView( url='api_approvalworkflow_details', - perm_str='service_catalog.delete_approvalworkflow', + perm_str_list=['service_catalog.delete_approvalworkflow'], url_kwargs={'pk': self.approval_workflow.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_approvalworkflow/test_state_machine.py b/tests/test_service_catalog/test_api/test_urls/test_approvalworkflow/test_state_machine.py index 2a4099e20..ebc3805a0 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_approvalworkflow/test_state_machine.py +++ b/tests/test_service_catalog/test_api/test_urls/test_approvalworkflow/test_state_machine.py @@ -44,12 +44,12 @@ def test_approvalworkflow_approve(self): TestingGetContextView( url='api_request_approval_workflow_state_approve', url_kwargs={'pk': self.test_request.pk}, - perm_str='service_catalog.approve_reject_approvalstep', + perm_str_list=['service_catalog.approve_reject_approvalstep'], ), TestingPostContextView( url='api_request_approval_workflow_state_approve', url_kwargs={'pk': self.test_request.pk}, - perm_str='service_catalog.approve_reject_approvalstep', + perm_str_list=['service_catalog.approve_reject_approvalstep'], expected_status_code=200 ) ] @@ -60,13 +60,13 @@ def test_approvalworkflow_reject(self): TestingGetContextView( url='api_request_approval_workflow_state_reject', url_kwargs={'pk': self.test_request.pk}, - perm_str='service_catalog.approve_reject_approvalstep', + perm_str_list=['service_catalog.approve_reject_approvalstep'], ), TestingPostContextView( url='api_request_approval_workflow_state_reject', url_kwargs={'pk': self.test_request.pk}, - perm_str='service_catalog.approve_reject_approvalstep', + perm_str_list=['service_catalog.approve_reject_approvalstep'], expected_status_code=200 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_customlink.py b/tests/test_service_catalog/test_api/test_urls/test_customlink.py index ab9007360..bff750dfd 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_customlink.py +++ b/tests/test_service_catalog/test_api/test_urls/test_customlink.py @@ -17,11 +17,11 @@ def test_customlink_views(self): testing_view_list = [ TestingGetContextView( url='api_customlink_list_create', - perm_str='service_catalog.list_customlink', + perm_str_list=['service_catalog.list_customlink'], ), TestingPostContextView( url='api_customlink_list_create', - perm_str='service_catalog.add_customlink', + perm_str_list=['service_catalog.add_customlink'], data={ 'name': 'New cusom link', 'text': 'new_custom_link', @@ -30,12 +30,12 @@ def test_customlink_views(self): ), TestingGetContextView( url='api_customlink_details', - perm_str='service_catalog.view_customlink', + perm_str_list=['service_catalog.view_customlink'], url_kwargs={'pk': self.custom_link.id} ), TestingPutContextView( url='api_customlink_details', - perm_str='service_catalog.change_customlink', + perm_str_list=['service_catalog.change_customlink'], data={ 'name': 'Custom link PUT', 'text': 'new_custom_link', @@ -45,7 +45,7 @@ def test_customlink_views(self): ), TestingPatchContextView( url='api_customlink_details', - perm_str='service_catalog.change_customlink', + perm_str_list=['service_catalog.change_customlink'], data={ 'name': 'Custom link PATCH', }, @@ -53,8 +53,8 @@ def test_customlink_views(self): ), TestingDeleteContextView( url='api_customlink_details', - perm_str='service_catalog.delete_customlink', + perm_str_list=['service_catalog.delete_customlink'], url_kwargs={'pk': self.custom_link.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py b/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py index f3bbee634..07500cb9b 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py +++ b/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py @@ -1,4 +1,7 @@ -from service_catalog.models import CustomLink, InstanceState +from django.contrib.contenttypes.models import ContentType + +from profiles.models import Permission +from service_catalog.models import CustomLink, InstanceState, Operation from tests.permission_endpoint import TestPermissionEndpoint, TestingGetContextView, TestingPostContextView, \ TestingPatchContextView, TestingPutContextView, TestingDeleteContextView from tests.test_service_catalog.base_test_request import BaseTestRequestAPI @@ -12,19 +15,21 @@ def setUp(self): self.test_instance_2.service = self.update_operation_test_2.service self.test_instance.save() self.test_instance_2.save() - - self.update_operation_test_2.is_admin_operation = True + operation_content_type = ContentType.objects.get_for_model(Operation) + self.update_operation_test_2.permission, _ = Permission.objects.get_or_create(content_type=operation_content_type, + codename="is_admin_operation") self.update_operation_test_2.save() + def test_instance_views(self): testing_view_list = [ TestingGetContextView( url='api_instance_list_create', - perm_str='service_catalog.list_instance', + perm_str_list=['service_catalog.list_instance'], ), TestingPostContextView( url='api_instance_list_create', - perm_str='service_catalog.add_instance', + perm_str_list=['service_catalog.add_instance'], data={ "name": "New instance", "service": self.service_test_2.id, @@ -39,14 +44,14 @@ def test_instance_views(self): ), TestingGetContextView( url='api_operation_request_create', - perm_str='service_catalog.view_request', + perm_str_list=['service_catalog.view_request'], url_kwargs={'instance_id': self.test_instance.id, 'operation_id': self.update_operation_test.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPostContextView( url='api_operation_request_create', - perm_str='service_catalog.request_on_instance', + perm_str_list=['service_catalog.request_on_instance', self.update_operation_test.permission.permission_str], url_kwargs={'instance_id': self.test_instance.id, 'operation_id': self.update_operation_test.id}, data={ 'fill_in_survey': { @@ -55,14 +60,14 @@ def test_instance_views(self): ), TestingGetContextView( url='api_operation_request_create', - perm_str='service_catalog.view_request', + perm_str_list=['service_catalog.view_request'], url_kwargs={'instance_id': self.test_instance_2.id, 'operation_id': self.update_operation_test_2.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPostContextView( url='api_operation_request_create', - perm_str=self.update_operation_test_2.permission.permission_str, + perm_str_list=['service_catalog.request_on_instance', self.update_operation_test_2.permission.permission_str], url_kwargs={'instance_id': self.test_instance_2.id, 'operation_id': self.update_operation_test_2.id}, data={ 'fill_in_survey': { @@ -72,12 +77,12 @@ def test_instance_views(self): ), TestingGetContextView( url='api_instance_details', - perm_str='service_catalog.view_instance', + perm_str_list=['service_catalog.view_instance'], url_kwargs={'pk': self.test_instance.id} ), TestingPutContextView( url='api_instance_details', - perm_str='service_catalog.change_instance', + perm_str_list=['service_catalog.change_instance'], data={ 'name': 'Instance PUT', "service": self.service_test_2.id, @@ -93,7 +98,7 @@ def test_instance_views(self): ), TestingPatchContextView( url='api_instance_details', - perm_str='service_catalog.change_instance', + perm_str_list=['service_catalog.change_instance'], data={ 'name': 'Instance PATCH', }, @@ -101,7 +106,7 @@ def test_instance_views(self): ), TestingDeleteContextView( url='api_instance_details', - perm_str='service_catalog.delete_instance', + perm_str_list=['service_catalog.delete_instance'], url_kwargs={'pk': self.test_instance.id} ) ] diff --git a/tests/test_service_catalog/test_api/test_urls/test_instance/test_spec.py b/tests/test_service_catalog/test_api/test_urls/test_instance/test_spec.py index 7d1404837..330e5a428 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_instance/test_spec.py +++ b/tests/test_service_catalog/test_api/test_urls/test_instance/test_spec.py @@ -9,12 +9,12 @@ def test_user_spec_views(self): testing_view_list = [ TestingGetContextView( url='api_instance_user_spec_details', - perm_str='service_catalog.view_instance', + perm_str_list=['service_catalog.view_instance'], url_kwargs={'pk': self.test_instance.id} ), TestingPutContextView( url='api_instance_user_spec_details', - perm_str='service_catalog.change_instance', + perm_str_list=['service_catalog.change_instance'], data={ "key1": "value1", "key2": "value2", @@ -23,7 +23,7 @@ def test_user_spec_views(self): ), TestingPatchContextView( url='api_instance_user_spec_details', - perm_str='service_catalog.change_instance', + perm_str_list=['service_catalog.change_instance'], data={ 'key1': 'value PATCH', }, @@ -36,12 +36,12 @@ def test_admin_spec_views(self): testing_view_list = [ TestingGetContextView( url='api_instance_spec_details', - perm_str='service_catalog.view_admin_spec_instance', + perm_str_list=['service_catalog.view_admin_spec_instance'], url_kwargs={'pk': self.test_instance.id} ), TestingPutContextView( url='api_instance_spec_details', - perm_str='service_catalog.change_admin_spec_instance', + perm_str_list=['service_catalog.change_admin_spec_instance'], data={ "key1": "value1", "key2": "value2", @@ -50,11 +50,11 @@ def test_admin_spec_views(self): ), TestingPatchContextView( url='api_instance_spec_details', - perm_str='service_catalog.change_admin_spec_instance', + perm_str_list=['service_catalog.change_admin_spec_instance'], data={ 'key1': 'value PATCH', }, url_kwargs={'pk': self.test_instance.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_jobtemplate.py b/tests/test_service_catalog/test_api/test_urls/test_jobtemplate.py index fc0fa881f..98f1002de 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_jobtemplate.py +++ b/tests/test_service_catalog/test_api/test_urls/test_jobtemplate.py @@ -9,39 +9,39 @@ def test_jobtemplate_views(self): testing_view_list = [ TestingGetContextView( url='api_jobtemplate_list', - perm_str='service_catalog.list_jobtemplate', + perm_str_list=['service_catalog.list_jobtemplate'], ), TestingPostContextView( url='api_jobtemplate_list', - perm_str='service_catalog.add_jobtemplate', + perm_str_list=['service_catalog.add_jobtemplate'], expected_status_code=405, expected_not_allowed_status_code=405 ), TestingGetContextView( url='api_jobtemplate_details', - perm_str='service_catalog.view_jobtemplate', + perm_str_list=['service_catalog.view_jobtemplate'], url_kwargs={'pk': self.job_template_test.id}, ), TestingPutContextView( url='api_jobtemplate_details', - perm_str='service_catalog.change_jobtemplate', + perm_str_list=['service_catalog.change_jobtemplate'], url_kwargs={'pk': self.job_template_test.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPatchContextView( url='api_jobtemplate_details', - perm_str='service_catalog.change_jobtemplate', + perm_str_list=['service_catalog.change_jobtemplate'], url_kwargs={'pk': self.job_template_test.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingDeleteContextView( url='api_jobtemplate_details', - perm_str='service_catalog.delete_jobtemplate', + perm_str_list=['service_catalog.delete_jobtemplate'], url_kwargs={'pk': self.job_template_test.id}, expected_status_code=405, expected_not_allowed_status_code=405 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_operation.py b/tests/test_service_catalog/test_api/test_urls/test_operation.py index f98c3350e..80b21fa89 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_operation.py +++ b/tests/test_service_catalog/test_api/test_urls/test_operation.py @@ -13,16 +13,16 @@ def test_operation_views(self): testing_view_list = [ TestingGetContextView( url='api_operation_list_create', - perm_str='service_catalog.list_operation', + perm_str_list=['service_catalog.list_operation'], ), TestingGetContextView( url='api_instance_operation_list', - perm_str='service_catalog.list_operation', + perm_str_list=['service_catalog.list_operation'], url_kwargs={'instance_id': self.test_instance.id} ), TestingPostContextView( url='api_operation_list_create', - perm_str='service_catalog.add_operation', + perm_str_list=['service_catalog.add_operation'], data={ 'service': self.service_test.id, 'name': 'New operation', @@ -34,12 +34,12 @@ def test_operation_views(self): ), TestingGetContextView( url='api_operation_survey_list_update', - perm_str='service_catalog.change_operation', + perm_str_list=['service_catalog.change_operation'], url_kwargs={'pk': self.create_operation_test.id} ), TestingPutContextView( url='api_operation_survey_list_update', - perm_str='service_catalog.change_operation', + perm_str_list=['service_catalog.change_operation'], data=[ {'variable': 'text_variable', 'is_customer_field': True, 'default': "text_variable_default"}, {'variable': 'multiplechoice_variable', 'is_customer_field': False, 'default': "multiplechoice_variable_default"}, @@ -53,19 +53,19 @@ def test_operation_views(self): ), TestingPatchContextView( url='api_operation_survey_list_update', - perm_str='service_catalog.change_operation', + perm_str_list=['service_catalog.change_operation'], url_kwargs={'pk': self.create_operation_test.id}, expected_not_allowed_status_code=405, expected_status_code=405 ), TestingGetContextView( url='api_operation_details', - perm_str='service_catalog.view_operation', + perm_str_list=['service_catalog.view_operation'], url_kwargs={'pk': self.create_operation_test.id} ), TestingPutContextView( url='api_operation_details', - perm_str='service_catalog.change_operation', + perm_str_list=['service_catalog.change_operation'], data={ 'service': self.service_test.id, 'name': 'Operation PUT', @@ -77,7 +77,7 @@ def test_operation_views(self): ), TestingPatchContextView( url='api_operation_details', - perm_str='service_catalog.change_operation', + perm_str_list=['service_catalog.change_operation'], data={ 'name': 'Operation PATCH', }, @@ -85,8 +85,8 @@ def test_operation_views(self): ), TestingDeleteContextView( url='api_operation_details', - perm_str='service_catalog.delete_operation', + perm_str_list=['service_catalog.delete_operation'], url_kwargs={'pk': self.create_operation_test.id} ), ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_portfolio.py b/tests/test_service_catalog/test_api/test_urls/test_portfolio.py index 9d1c8ccfd..cb3c549ee 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_portfolio.py +++ b/tests/test_service_catalog/test_api/test_urls/test_portfolio.py @@ -9,23 +9,23 @@ def test_portfolio_views(self): testing_view_list = [ TestingGetContextView( url='api_portfolio_list_create', - perm_str='service_catalog.list_portfolio', + perm_str_list=['service_catalog.list_portfolio'], ), TestingPostContextView( url='api_portfolio_list_create', - perm_str='service_catalog.add_portfolio', + perm_str_list=['service_catalog.add_portfolio'], data={ 'name': "New portfolio" } ), TestingGetContextView( url='api_portfolio_details', - perm_str='service_catalog.view_portfolio', + perm_str_list=['service_catalog.view_portfolio'], url_kwargs={'pk': self.portfolio_test_1.id} ), TestingPutContextView( url='api_portfolio_details', - perm_str='service_catalog.change_portfolio', + perm_str_list=['service_catalog.change_portfolio'], data={ 'name': 'Portfolio PUT', }, @@ -33,7 +33,7 @@ def test_portfolio_views(self): ), TestingPatchContextView( url='api_portfolio_details', - perm_str='service_catalog.change_portfolio', + perm_str_list=['service_catalog.change_portfolio'], data={ 'name': 'Portfolio PATCH', }, @@ -41,8 +41,8 @@ def test_portfolio_views(self): ), TestingDeleteContextView( url='api_portfolio_details', - perm_str='service_catalog.delete_portfolio', + perm_str_list=['service_catalog.delete_portfolio'], url_kwargs={'pk': self.portfolio_test_1.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_request/test_crud.py b/tests/test_service_catalog/test_api/test_urls/test_request/test_crud.py index e6e769cb7..2b02fbe1a 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_request/test_crud.py +++ b/tests/test_service_catalog/test_api/test_urls/test_request/test_crud.py @@ -9,22 +9,22 @@ def test_request_views(self): testing_view_list = [ TestingGetContextView( url='api_request_list', - perm_str='service_catalog.list_request', + perm_str_list=['service_catalog.list_request'], ), TestingPostContextView( url='api_request_list', - perm_str='service_catalog.add_request', + perm_str_list=['service_catalog.add_request'], expected_status_code=405, expected_not_allowed_status_code=405 ), TestingGetContextView( url='api_request_details', - perm_str='service_catalog.view_request', + perm_str_list=['service_catalog.view_request'], url_kwargs={'pk': self.test_request.id} ), TestingPutContextView( url='api_request_details', - perm_str='service_catalog.change_request', + perm_str_list=['service_catalog.change_request'], data={ 'fill_in_survey': dict(), 'tower_job_id': 6, @@ -36,7 +36,7 @@ def test_request_views(self): ), TestingPatchContextView( url='api_request_details', - perm_str='service_catalog.change_request', + perm_str_list=['service_catalog.change_request'], data={ 'tower_job_id': 8, }, @@ -44,8 +44,8 @@ def test_request_views(self): ), TestingDeleteContextView( url='api_request_details', - perm_str='service_catalog.delete_request', + perm_str_list=['service_catalog.delete_request'], url_kwargs={'pk': self.test_request.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_accept.py b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_accept.py index fb8ca67f7..db0438168 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_accept.py +++ b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_accept.py @@ -13,12 +13,12 @@ def test_accept_view(self): testing_view_list = [ TestingGetContextView( url='api_request_accept', - perm_str='service_catalog.accept_request', + perm_str_list=['service_catalog.accept_request'], url_kwargs={'pk': self.test_request.id}, ), TestingPostContextView( url='api_request_accept', - perm_str='service_catalog.accept_request', + perm_str_list=['service_catalog.accept_request'], url_kwargs={'pk': self.test_request.id}, data={ 'text_variable': "test text var", @@ -32,4 +32,4 @@ def test_accept_view(self): expected_status_code=200 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_archive.py b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_archive.py index a698a3ecb..b83a94fe4 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_archive.py +++ b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_archive.py @@ -13,16 +13,16 @@ def test_archive_view(self): testing_view_list = [ TestingGetContextView( url='api_request_archive', - perm_str='service_catalog.archive_request', + perm_str_list=['service_catalog.archive_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPostContextView( url='api_request_archive', - perm_str='service_catalog.archive_request', + perm_str_list=['service_catalog.archive_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=200 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_cancel.py b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_cancel.py index 719761aaa..bd85d54ee 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_cancel.py +++ b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_cancel.py @@ -13,16 +13,16 @@ def test_cancel_view(self): testing_view_list = [ TestingGetContextView( url='api_request_cancel', - perm_str='service_catalog.cancel_request', + perm_str_list=['service_catalog.cancel_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPostContextView( url='api_request_cancel', - perm_str='service_catalog.cancel_request', + perm_str_list=['service_catalog.cancel_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=200 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_on_hold.py b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_on_hold.py index da189dc6a..cf4ec687e 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_on_hold.py +++ b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_on_hold.py @@ -13,14 +13,14 @@ def test_on_hold_view(self): testing_view_list = [ TestingGetContextView( url='api_request_on_hold', - perm_str='service_catalog.hold_request', + perm_str_list=['service_catalog.hold_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPostContextView( url='api_request_on_hold', - perm_str='service_catalog.hold_request', + perm_str_list=['service_catalog.hold_request'], url_kwargs={'pk': self.test_request.id}, data={ 'content': 'My comment' @@ -28,4 +28,4 @@ def test_on_hold_view(self): expected_status_code=200 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_process.py b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_process.py index ca5f644fa..dfb4be5e5 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_process.py +++ b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_process.py @@ -13,16 +13,16 @@ def test_process_view(self): testing_view_list = [ TestingGetContextView( url='api_request_process', - perm_str='service_catalog.process_request', + perm_str_list=['service_catalog.process_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPostContextView( url='api_request_process', - perm_str='service_catalog.process_request', + perm_str_list=['service_catalog.process_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=200 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_re_submit.py b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_re_submit.py index b73ba890c..04f4a140b 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_re_submit.py +++ b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_re_submit.py @@ -13,16 +13,16 @@ def test_re_submit_view(self): testing_view_list = [ TestingGetContextView( url='api_request_re_submit', - perm_str='service_catalog.re_submit_request', + perm_str_list=['service_catalog.re_submit_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPostContextView( url='api_request_re_submit', - perm_str='service_catalog.re_submit_request', + perm_str_list=['service_catalog.re_submit_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=200 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_reject.py b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_reject.py index 026ba63ec..d92af84fd 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_reject.py +++ b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_reject.py @@ -13,14 +13,14 @@ def test_reject_view(self): testing_view_list = [ TestingGetContextView( url='api_request_reject', - perm_str='service_catalog.reject_request', + perm_str_list=['service_catalog.reject_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPostContextView( url='api_request_reject', - perm_str='service_catalog.reject_request', + perm_str_list=['service_catalog.reject_request'], url_kwargs={'pk': self.test_request.id}, data={ 'content': 'My comment' @@ -28,4 +28,4 @@ def test_reject_view(self): expected_status_code=200 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_unarchive.py b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_unarchive.py index 9bb2a8e7f..b071347c1 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_unarchive.py +++ b/tests/test_service_catalog/test_api/test_urls/test_request/test_state_machine/test_unarchive.py @@ -13,16 +13,16 @@ def test_unarchive_view(self): testing_view_list = [ TestingGetContextView( url='api_request_unarchive', - perm_str='service_catalog.unarchive_request', + perm_str_list=['service_catalog.unarchive_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPostContextView( url='api_request_unarchive', - perm_str='service_catalog.unarchive_request', + perm_str_list=['service_catalog.unarchive_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=200 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_service.py b/tests/test_service_catalog/test_api/test_urls/test_service.py index 8d1760760..859d9e8c3 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_service.py +++ b/tests/test_service_catalog/test_api/test_urls/test_service.py @@ -8,11 +8,11 @@ def test_service_views(self): testing_view_list = [ TestingGetContextView( url='api_service_list_create', - perm_str='service_catalog.list_service', + perm_str_list=['service_catalog.list_service'], ), TestingPostContextView( url='api_service_list_create', - perm_str='service_catalog.add_service', + perm_str_list=['service_catalog.add_service'], data={ 'name': "New service", 'description': "Service description", @@ -22,7 +22,7 @@ def test_service_views(self): ), TestingPostContextView( url='api_service_request_create', - perm_str='service_catalog.request_on_service', + perm_str_list=['service_catalog.request_on_service'], url_kwargs={"service_id": self.service_test.id, "pk": self.create_operation_test.id}, data={ 'squest_instance_name': 'instance test', @@ -34,12 +34,12 @@ def test_service_views(self): ), TestingGetContextView( url='api_service_details', - perm_str='service_catalog.view_service', + perm_str_list=['service_catalog.view_service'], url_kwargs={'pk': self.service_test.id} ), TestingPutContextView( url='api_service_details', - perm_str='service_catalog.change_service', + perm_str_list=['service_catalog.change_service'], data={ 'name': "Service PUT", 'description': "Service description", @@ -50,7 +50,7 @@ def test_service_views(self): ), TestingPatchContextView( url='api_service_details', - perm_str='service_catalog.change_service', + perm_str_list=['service_catalog.change_service'], data={ 'name': 'Service PATCH', }, @@ -58,8 +58,8 @@ def test_service_views(self): ), TestingDeleteContextView( url='api_service_details', - perm_str='service_catalog.delete_service', + perm_str_list=['service_catalog.delete_service'], url_kwargs={'pk': self.service_test.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_api/test_urls/test_towerserver.py b/tests/test_service_catalog/test_api/test_urls/test_towerserver.py index a1fd82686..1865df692 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_towerserver.py +++ b/tests/test_service_catalog/test_api/test_urls/test_towerserver.py @@ -8,11 +8,11 @@ def test_towerserver_views(self): testing_view_list = [ TestingGetContextView( url='api_towerserver_list_create', - perm_str='service_catalog.list_towerserver' + perm_str_list=['service_catalog.list_towerserver'] ), TestingPostContextView( url='api_towerserver_list_create', - perm_str='service_catalog.add_towerserver', + perm_str_list=['service_catalog.add_towerserver'], data={ 'name': "New Tower Server", 'host': "my-tower-domain.com", @@ -24,24 +24,24 @@ def test_towerserver_views(self): ), TestingPostContextView( url='api_jobtemplate_sync_all', - perm_str='service_catalog.sync_towerserver', + perm_str_list=['service_catalog.sync_towerserver'], url_kwargs={'tower_server_id': self.tower_server_test.id}, expected_status_code=202 ), TestingPostContextView( url='api_jobtemplate_sync', - perm_str='service_catalog.sync_towerserver', + perm_str_list=['service_catalog.sync_towerserver'], url_kwargs={'tower_server_id': self.tower_server_test.id, 'job_template_id': self.job_template_test.id}, expected_status_code=202 ), TestingGetContextView( url='api_towerserver_details', - perm_str='service_catalog.view_towerserver', + perm_str_list=['service_catalog.view_towerserver'], url_kwargs={'pk': self.tower_server_test.id} ), TestingPutContextView( url='api_towerserver_details', - perm_str='service_catalog.change_towerserver', + perm_str_list=['service_catalog.change_towerserver'], data={ 'name': 'Tower Server PUT', 'host': "my-tower-domain2.com", @@ -54,7 +54,7 @@ def test_towerserver_views(self): ), TestingPatchContextView( url='api_towerserver_details', - perm_str='service_catalog.change_towerserver', + perm_str_list=['service_catalog.change_towerserver'], data={ 'name': 'Tower Server PATCH', }, @@ -62,8 +62,8 @@ def test_towerserver_views(self): ), TestingDeleteContextView( url='api_towerserver_details', - perm_str='service_catalog.delete_towerserver', + perm_str_list=['service_catalog.delete_towerserver'], url_kwargs={'pk': self.tower_server_test.id} ), ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_announcement.py b/tests/test_service_catalog/test_urls/test_announcement.py index 95706fa23..24d0e2309 100644 --- a/tests/test_service_catalog/test_urls/test_announcement.py +++ b/tests/test_service_catalog/test_urls/test_announcement.py @@ -21,15 +21,15 @@ def test_announcement_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:announcement_list', - perm_str='service_catalog.list_announcement', + perm_str_list=['service_catalog.list_announcement'], ), TestingGetContextView( url='service_catalog:announcement_create', - perm_str='service_catalog.add_announcement', + perm_str_list=['service_catalog.add_announcement'], ), TestingPostContextView( url='service_catalog:announcement_create', - perm_str='service_catalog.add_announcement', + perm_str_list=['service_catalog.add_announcement'], data={ 'title': 'My announcement title info', 'message': 'My announcement message info', @@ -40,12 +40,12 @@ def test_announcement_views(self): ), TestingGetContextView( url='service_catalog:announcement_edit', - perm_str='service_catalog.change_announcement', + perm_str_list=['service_catalog.change_announcement'], url_kwargs={'pk': self.announcement.id} ), TestingPostContextView( url='service_catalog:announcement_edit', - perm_str='service_catalog.change_announcement', + perm_str_list=['service_catalog.change_announcement'], url_kwargs={'pk': self.announcement.id}, data={ 'title': 'My announcement title danger', @@ -57,13 +57,13 @@ def test_announcement_views(self): ), TestingGetContextView( url='service_catalog:announcement_delete', - perm_str='service_catalog.delete_announcement', + perm_str_list=['service_catalog.delete_announcement'], url_kwargs={'pk': self.announcement.id} ), TestingPostContextView( url='service_catalog:announcement_delete', - perm_str='service_catalog.delete_announcement', + perm_str_list=['service_catalog.delete_announcement'], url_kwargs={'pk': self.announcement.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_approvalstep.py b/tests/test_service_catalog/test_urls/test_approvalstep.py index 430354463..61dce3a26 100644 --- a/tests/test_service_catalog/test_urls/test_approvalstep.py +++ b/tests/test_service_catalog/test_urls/test_approvalstep.py @@ -28,12 +28,12 @@ def test_approvalstep_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:approvalstep_create', - perm_str='service_catalog.add_approvalstep', + perm_str_list=['service_catalog.add_approvalstep'], url_kwargs={'approval_workflow_id': self.approval_workflow.id}, ), TestingPostContextView( url='service_catalog:approvalstep_create', - perm_str='service_catalog.add_approvalstep', + perm_str_list=['service_catalog.add_approvalstep'], url_kwargs={'approval_workflow_id': self.approval_workflow.id}, data={ 'name': 'New approval step', @@ -45,12 +45,12 @@ def test_approvalstep_views(self): ), TestingGetContextView( url='service_catalog:approvalstep_edit', - perm_str='service_catalog.change_approvalstep', + perm_str_list=['service_catalog.change_approvalstep'], url_kwargs={'approval_workflow_id': self.approval_workflow.id, 'pk': self.approval_step.id} ), TestingPutContextView( url='service_catalog:approvalstep_edit', - perm_str='service_catalog.change_approvalstep', + perm_str_list=['service_catalog.change_approvalstep'], url_kwargs={'approval_workflow_id': self.approval_workflow.id, 'pk': self.approval_step.id}, data={ 'name': 'Approval step update', @@ -62,13 +62,13 @@ def test_approvalstep_views(self): ), TestingGetContextView( url='service_catalog:ajax_approval_step_position_update', - perm_str='service_catalog.change_approvalstep', + perm_str_list=['service_catalog.change_approvalstep'], expected_status_code=405, expected_not_allowed_status_code=405, ), TestingPostContextView( url='service_catalog:ajax_approval_step_position_update', - perm_str='service_catalog.change_approvalstep', + perm_str_list=['service_catalog.change_approvalstep'], data={ 'listStepToUpdate': json.dumps([ { @@ -85,13 +85,13 @@ def test_approvalstep_views(self): TestingGetContextView( url='service_catalog:approvalstep_delete', - perm_str='service_catalog.delete_approvalstep', + perm_str_list=['service_catalog.delete_approvalstep'], url_kwargs={'approval_workflow_id': self.approval_workflow.id, 'pk': self.approval_step.id} ), TestingPostContextView( url='service_catalog:approvalstep_delete', - perm_str='service_catalog.delete_approvalstep', + perm_str_list=['service_catalog.delete_approvalstep'], url_kwargs={'approval_workflow_id': self.approval_workflow.id, 'pk': self.approval_step.id} ), ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_approvalworkflow.py b/tests/test_service_catalog/test_urls/test_approvalworkflow.py index 54493f532..2d8ef3a58 100644 --- a/tests/test_service_catalog/test_urls/test_approvalworkflow.py +++ b/tests/test_service_catalog/test_urls/test_approvalworkflow.py @@ -16,20 +16,20 @@ def test_approvalworkflow_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:approvalworkflow_list', - perm_str='service_catalog.list_approvalworkflow', + perm_str_list=['service_catalog.list_approvalworkflow'], ), TestingGetContextView( url='service_catalog:approvalworkflow_details', - perm_str='service_catalog.view_approvalworkflow', + perm_str_list=['service_catalog.view_approvalworkflow'], url_kwargs={'pk': self.approval_workflow.id} ), TestingGetContextView( url='service_catalog:approvalworkflow_create', - perm_str='service_catalog.add_approvalworkflow', + perm_str_list=['service_catalog.add_approvalworkflow'], ), TestingPostContextView( url='service_catalog:approvalworkflow_create', - perm_str='service_catalog.add_approvalworkflow', + perm_str_list=['service_catalog.add_approvalworkflow'], data={ 'name': 'New approvalworkflow', 'operation': self.update_operation_test.id, @@ -38,17 +38,17 @@ def test_approvalworkflow_views(self): ), TestingGetContextView( url='service_catalog:approvalworkflow_edit', - perm_str='service_catalog.change_approvalworkflow', + perm_str_list=['service_catalog.change_approvalworkflow'], url_kwargs={'pk': self.approval_workflow.id} ), TestingGetContextView( url='service_catalog:approvalworkflow_preview', - perm_str='service_catalog.view_approvalworkflow', + perm_str_list=['service_catalog.view_approvalworkflow'], url_kwargs={'pk': self.approval_workflow.id, 'scope_id': self.test_quota_scope.id} ), TestingPostContextView( url='service_catalog:approvalworkflow_edit', - perm_str='service_catalog.change_approvalworkflow', + perm_str_list=['service_catalog.change_approvalworkflow'], url_kwargs={'pk': self.approval_workflow.id}, data={ 'name': 'Approvalworkflow updated', @@ -58,23 +58,23 @@ def test_approvalworkflow_views(self): ), TestingGetContextView( url='service_catalog:approvalworkflow_reset_requests', - perm_str='service_catalog.re_submit_request', + perm_str_list=['service_catalog.re_submit_request'], url_kwargs={'pk': self.approval_workflow.id} ), TestingPostContextView( url='service_catalog:approvalworkflow_reset_requests', - perm_str='service_catalog.re_submit_request', + perm_str_list=['service_catalog.re_submit_request'], url_kwargs={'pk': self.approval_workflow.id} ), TestingGetContextView( url='service_catalog:approvalworkflow_delete', - perm_str='service_catalog.delete_approvalworkflow', + perm_str_list=['service_catalog.delete_approvalworkflow'], url_kwargs={'pk': self.approval_workflow.id} ), TestingPostContextView( url='service_catalog:approvalworkflow_delete', - perm_str='service_catalog.delete_approvalworkflow', + perm_str_list=['service_catalog.delete_approvalworkflow'], url_kwargs={'pk': self.approval_workflow.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_customlink.py b/tests/test_service_catalog/test_urls/test_customlink.py index 0a02030b1..b67a56671 100644 --- a/tests/test_service_catalog/test_urls/test_customlink.py +++ b/tests/test_service_catalog/test_urls/test_customlink.py @@ -17,15 +17,15 @@ def test_customlink_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:customlink_list', - perm_str='service_catalog.list_customlink', + perm_str_list=['service_catalog.list_customlink'], ), TestingGetContextView( url='service_catalog:customlink_create', - perm_str='service_catalog.add_customlink', + perm_str_list=['service_catalog.add_customlink'], ), TestingPostContextView( url='service_catalog:customlink_create', - perm_str='service_catalog.add_customlink', + perm_str_list=['service_catalog.add_customlink'], data={ "name": "custom_link_1", "text": "custom_link__text_1", @@ -35,12 +35,12 @@ def test_customlink_views(self): ), TestingGetContextView( url='service_catalog:customlink_edit', - perm_str='service_catalog.change_customlink', + perm_str_list=['service_catalog.change_customlink'], url_kwargs={'pk': self.custom_link.id} ), TestingPostContextView( url='service_catalog:customlink_edit', - perm_str='service_catalog.change_customlink', + perm_str_list=['service_catalog.change_customlink'], url_kwargs={'pk': self.custom_link.id}, data={ "name": "updated_name", @@ -51,13 +51,13 @@ def test_customlink_views(self): ), TestingGetContextView( url='service_catalog:customlink_delete', - perm_str='service_catalog.delete_customlink', + perm_str_list=['service_catalog.delete_customlink'], url_kwargs={'pk': self.custom_link.id} ), TestingPostContextView( url='service_catalog:customlink_delete', - perm_str='service_catalog.delete_customlink', + perm_str_list=['service_catalog.delete_customlink'], url_kwargs={'pk': self.custom_link.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_doc.py b/tests/test_service_catalog/test_urls/test_doc.py index 1cd013723..3145c7e96 100644 --- a/tests/test_service_catalog/test_urls/test_doc.py +++ b/tests/test_service_catalog/test_urls/test_doc.py @@ -13,13 +13,13 @@ def test_doc_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:doc_list', - perm_str='service_catalog.list_doc', + perm_str_list=['service_catalog.list_doc'], ), TestingGetContextView( url='service_catalog:doc_details', - perm_str='service_catalog.view_doc', + perm_str_list=['service_catalog.view_doc'], url_kwargs={'pk': self.doc.id} ), ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_instance/test_bulk_delete.py b/tests/test_service_catalog/test_urls/test_instance/test_bulk_delete.py index 28420f440..42f29ea8b 100644 --- a/tests/test_service_catalog/test_urls/test_instance/test_bulk_delete.py +++ b/tests/test_service_catalog/test_urls/test_instance/test_bulk_delete.py @@ -8,18 +8,18 @@ def test_bulk_delete_view(self): testing_view_list = [ TestingGetContextView( url='service_catalog:instance_bulk_delete', - perm_str='service_catalog.delete_instance', + perm_str_list=['service_catalog.delete_instance'], data={ 'selection': [instance.id for instance in Instance.objects.all()] }), TestingPostContextView( url='service_catalog:instance_bulk_delete', - perm_str='service_catalog.delete_instance', + perm_str_list=['service_catalog.delete_instance'], data={ 'selection': [instance.id for instance in Instance.objects.all()] } ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_instance/test_crud.py b/tests/test_service_catalog/test_urls/test_instance/test_crud.py index faef8d94c..858976a71 100644 --- a/tests/test_service_catalog/test_urls/test_instance/test_crud.py +++ b/tests/test_service_catalog/test_urls/test_instance/test_crud.py @@ -21,21 +21,21 @@ def test_crud_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:instance_list', - perm_str='service_catalog.list_instance', + perm_str_list=['service_catalog.list_instance'], ), TestingGetContextView( url='service_catalog:instance_details', - perm_str='service_catalog.view_instance', + perm_str_list=['service_catalog.view_instance'], url_kwargs={'pk': self.test_instance.id} ), TestingGetContextView( url='service_catalog:instance_request_new_operation', - perm_str='service_catalog.request_on_instance', + perm_str_list=['service_catalog.request_on_instance'], url_kwargs={'instance_id': self.test_instance.id, 'operation_id': self.update_operation_test.id} ), TestingPostContextView( url='service_catalog:instance_request_new_operation', - perm_str='service_catalog.request_on_instance', + perm_str_list=['service_catalog.request_on_instance'], url_kwargs={'instance_id': self.test_instance.id, 'operation_id': self.update_operation_test.id}, data={ 'text_variable': 'test' @@ -43,12 +43,12 @@ def test_crud_views(self): ), TestingGetContextView( url='service_catalog:instance_request_new_operation', - perm_str='service_catalog.admin_request_on_instance', + perm_str_list=['service_catalog.admin_request_on_instance'], url_kwargs={'instance_id': self.test_instance_2.id, 'operation_id': self.update_operation_test_2.id} ), TestingPostContextView( url='service_catalog:instance_request_new_operation', - perm_str='service_catalog.admin_request_on_instance', + perm_str_list=['service_catalog.admin_request_on_instance'], url_kwargs={'instance_id': self.test_instance_2.id, 'operation_id': self.update_operation_test_2.id}, data={ 'text_variable': 'test' @@ -56,12 +56,12 @@ def test_crud_views(self): ), TestingGetContextView( url='service_catalog:instance_edit', - perm_str='service_catalog.change_instance', + perm_str_list=['service_catalog.change_instance'], url_kwargs={'pk': self.test_instance.id} ), TestingPostContextView( url='service_catalog:instance_edit', - perm_str='service_catalog.change_instance', + perm_str_list=['service_catalog.change_instance'], url_kwargs={'pk': self.test_instance.id}, data={ 'name': 'new_instance_name', @@ -75,13 +75,13 @@ def test_crud_views(self): ), TestingGetContextView( url='service_catalog:instance_delete', - perm_str='service_catalog.delete_instance', + perm_str_list=['service_catalog.delete_instance'], url_kwargs={'pk': self.test_instance.id} ), TestingPostContextView( url='service_catalog:instance_delete', - perm_str='service_catalog.delete_instance', + perm_str_list=['service_catalog.delete_instance'], url_kwargs={'pk': self.test_instance.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_instance/test_state_machine.py b/tests/test_service_catalog/test_urls/test_instance/test_state_machine.py index d833d845c..55e51560a 100644 --- a/tests/test_service_catalog/test_urls/test_instance/test_state_machine.py +++ b/tests/test_service_catalog/test_urls/test_instance/test_state_machine.py @@ -13,31 +13,31 @@ def test_state_machine_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:instance_archive', - perm_str='service_catalog.archive_instance', + perm_str_list=['service_catalog.archive_instance'], url_kwargs={'pk': self.test_instance.id}, expected_status_code=302 ), TestingPostContextView( url='service_catalog:instance_archive', - perm_str='service_catalog.archive_instance', + perm_str_list=['service_catalog.archive_instance'], url_kwargs={'pk': self.test_instance.id}, expected_not_allowed_status_code=405, expected_status_code=405 ), TestingGetContextView( url='service_catalog:instance_unarchive', - perm_str='service_catalog.unarchive_instance', + perm_str_list=['service_catalog.unarchive_instance'], url_kwargs={'pk': self.test_instance.id}, expected_status_code = 302 ), TestingPostContextView( url='service_catalog:instance_archive', - perm_str='service_catalog.archive_instance', + perm_str_list=['service_catalog.archive_instance'], url_kwargs={'pk': self.test_instance.id}, expected_not_allowed_status_code=405, expected_status_code=405 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_instancehook.py b/tests/test_service_catalog/test_urls/test_instancehook.py index fa3016e80..6d048eccb 100644 --- a/tests/test_service_catalog/test_urls/test_instancehook.py +++ b/tests/test_service_catalog/test_urls/test_instancehook.py @@ -16,15 +16,15 @@ def test_instancehook_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:instancehook_list', - perm_str='service_catalog.list_instancehook', + perm_str_list=['service_catalog.list_instancehook'], ), TestingGetContextView( url='service_catalog:instancehook_create', - perm_str='service_catalog.add_instancehook', + perm_str_list=['service_catalog.add_instancehook'], ), TestingPostContextView( url='service_catalog:instancehook_create', - perm_str='service_catalog.add_instancehook', + perm_str_list=['service_catalog.add_instancehook'], data={ "name": "New hook", "state": InstanceState.PROVISIONING, @@ -34,12 +34,12 @@ def test_instancehook_views(self): ), TestingGetContextView( url='service_catalog:instancehook_edit', - perm_str='service_catalog.change_instancehook', + perm_str_list=['service_catalog.change_instancehook'], url_kwargs={'pk': self.instance_hook.id} ), TestingPostContextView( url='service_catalog:instancehook_edit', - perm_str='service_catalog.change_instancehook', + perm_str_list=['service_catalog.change_instancehook'], url_kwargs={'pk': self.instance_hook.id}, data={ "name": "Hook updated", @@ -50,13 +50,13 @@ def test_instancehook_views(self): ), TestingGetContextView( url='service_catalog:instancehook_delete', - perm_str='service_catalog.delete_instancehook', + perm_str_list=['service_catalog.delete_instancehook'], url_kwargs={'pk': self.instance_hook.id} ), TestingPostContextView( url='service_catalog:instancehook_delete', - perm_str='service_catalog.delete_instancehook', + perm_str_list=['service_catalog.delete_instancehook'], url_kwargs={'pk': self.instance_hook.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_jobtemplate.py b/tests/test_service_catalog/test_urls/test_jobtemplate.py index 1bf1958d8..5b52a2199 100644 --- a/tests/test_service_catalog/test_urls/test_jobtemplate.py +++ b/tests/test_service_catalog/test_urls/test_jobtemplate.py @@ -7,28 +7,28 @@ def test_jobtemplate_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:jobtemplate_list', - perm_str='service_catalog.list_jobtemplate', + perm_str_list=['service_catalog.list_jobtemplate'], url_kwargs={'tower_id': self.tower_server_test.id}, ), TestingGetContextView( url='service_catalog:jobtemplate_details', - perm_str='service_catalog.view_jobtemplate', + perm_str_list=['service_catalog.view_jobtemplate'], url_kwargs={'tower_id': self.tower_server_test.id, 'pk': self.job_template_test.id} ), TestingGetContextView( url='service_catalog:job_template_compliancy', - perm_str='service_catalog.view_jobtemplate', + perm_str_list=['service_catalog.view_jobtemplate'], url_kwargs={'tower_id': self.tower_server_test.id, 'pk': self.job_template_test.id} ), TestingGetContextView( url='service_catalog:jobtemplate_delete', - perm_str='service_catalog.delete_jobtemplate', + perm_str_list=['service_catalog.delete_jobtemplate'], url_kwargs={'tower_id': self.tower_server_test.id, 'pk': self.job_template_test.id} ), TestingPostContextView( url='service_catalog:jobtemplate_delete', - perm_str='service_catalog.delete_jobtemplate', + perm_str_list=['service_catalog.delete_jobtemplate'], url_kwargs={'tower_id': self.tower_server_test.id, 'pk': self.job_template_test.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_operation.py b/tests/test_service_catalog/test_urls/test_operation.py index bd007589d..276f8bfe6 100644 --- a/tests/test_service_catalog/test_urls/test_operation.py +++ b/tests/test_service_catalog/test_urls/test_operation.py @@ -7,20 +7,20 @@ def test_operation_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:operation_list', - perm_str='service_catalog.list_operation' + perm_str_list=['service_catalog.list_operation'] ), TestingGetContextView( url='service_catalog:create_operation_list', - perm_str='service_catalog.list_operation', + perm_str_list=['service_catalog.list_operation'], url_kwargs={'service_id': self.create_operation_test.service.id} ), TestingGetContextView( url='service_catalog:operation_create', - perm_str='service_catalog.add_operation', + perm_str_list=['service_catalog.add_operation'], ), TestingPostContextView( url='service_catalog:operation_create', - perm_str='service_catalog.add_operation', + perm_str_list=['service_catalog.add_operation'], data={ 'service': self.service_test.id, 'name': 'New operation', @@ -32,17 +32,17 @@ def test_operation_views(self): ), TestingGetContextView( url='service_catalog:operation_details', - perm_str='service_catalog.view_operation', + perm_str_list=['service_catalog.view_operation'], url_kwargs={'pk': self.create_operation_test.id} ), TestingGetContextView( url='service_catalog:operation_edit', - perm_str='service_catalog.change_operation', + perm_str_list=['service_catalog.change_operation'], url_kwargs={'pk': self.create_operation_test.id} ), TestingPostContextView( url='service_catalog:operation_edit', - perm_str='service_catalog.change_operation', + perm_str_list=['service_catalog.change_operation'], url_kwargs={'pk': self.create_operation_test.id}, data={ 'service': self.create_operation_test.service.id, @@ -55,12 +55,12 @@ def test_operation_views(self): ), TestingGetContextView( url='service_catalog:operation_edit_survey', - perm_str='service_catalog.change_operation', + perm_str_list=['service_catalog.change_operation'], url_kwargs={'pk': self.update_operation_test.id} ), TestingPostContextView( url='service_catalog:operation_edit_survey', - perm_str='service_catalog.change_operation', + perm_str_list=['service_catalog.change_operation'], url_kwargs={'pk': self.update_operation_test.id}, data={ 'form-0-id': self.update_operation_test.tower_survey_fields.get(variable='text_variable').id, @@ -74,13 +74,13 @@ def test_operation_views(self): ), TestingGetContextView( url='service_catalog:operation_delete', - perm_str='service_catalog.delete_operation', + perm_str_list=['service_catalog.delete_operation'], url_kwargs={'pk': self.create_operation_test.id} ), TestingPostContextView( url='service_catalog:operation_delete', - perm_str='service_catalog.delete_operation', + perm_str_list=['service_catalog.delete_operation'], url_kwargs={'pk': self.create_operation_test.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_portfolio.py b/tests/test_service_catalog/test_urls/test_portfolio.py index c28cbcf4c..6da08dac6 100644 --- a/tests/test_service_catalog/test_urls/test_portfolio.py +++ b/tests/test_service_catalog/test_urls/test_portfolio.py @@ -7,27 +7,27 @@ def test_portfolio_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:portfolio_list', - perm_str='service_catalog.list_portfolio', + perm_str_list=['service_catalog.list_portfolio'], ), TestingGetContextView( url='service_catalog:portfolio_create', - perm_str='service_catalog.add_portfolio', + perm_str_list=['service_catalog.add_portfolio'], ), TestingPostContextView( url='service_catalog:portfolio_create', - perm_str='service_catalog.add_portfolio', + perm_str_list=['service_catalog.add_portfolio'], data={ 'name': 'New name' } ), TestingGetContextView( url='service_catalog:portfolio_edit', - perm_str='service_catalog.change_portfolio', + perm_str_list=['service_catalog.change_portfolio'], url_kwargs={'pk': self.portfolio_test_1.id} ), TestingPostContextView( url='service_catalog:portfolio_edit', - perm_str='service_catalog.change_portfolio', + perm_str_list=['service_catalog.change_portfolio'], url_kwargs={'pk': self.portfolio_test_1.id}, data={ 'name': 'name updated' @@ -35,13 +35,13 @@ def test_portfolio_views(self): ), TestingGetContextView( url='service_catalog:portfolio_delete', - perm_str='service_catalog.delete_portfolio', + perm_str_list=['service_catalog.delete_portfolio'], url_kwargs={'pk': self.portfolio_test_1.id} ), TestingPostContextView( url='service_catalog:portfolio_delete', - perm_str='service_catalog.delete_portfolio', + perm_str_list=['service_catalog.delete_portfolio'], url_kwargs={'pk': self.portfolio_test_1.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_request/test_bulk_delete.py b/tests/test_service_catalog/test_urls/test_request/test_bulk_delete.py index 026bfdfa4..9b529c88d 100644 --- a/tests/test_service_catalog/test_urls/test_request/test_bulk_delete.py +++ b/tests/test_service_catalog/test_urls/test_request/test_bulk_delete.py @@ -13,7 +13,7 @@ def test_bulk_delete_view(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_bulk_delete', - perm_str='service_catalog.delete_request', + perm_str_list=['service_catalog.delete_request'], data={ 'selection': [request.id for request in Request.objects.all()] @@ -21,11 +21,11 @@ def test_bulk_delete_view(self): ), TestingPostContextView( url='service_catalog:request_bulk_delete', - perm_str='service_catalog.delete_request', + perm_str_list=['service_catalog.delete_request'], data={ 'selection': [request.id for request in Request.objects.all()] } ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_request/test_crud.py b/tests/test_service_catalog/test_urls/test_request/test_crud.py index 05f2d839b..4b80e8df6 100644 --- a/tests/test_service_catalog/test_urls/test_request/test_crud.py +++ b/tests/test_service_catalog/test_urls/test_request/test_crud.py @@ -8,25 +8,25 @@ def test_crud_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_list', - perm_str='service_catalog.list_request', + perm_str_list=['service_catalog.list_request'], ), TestingGetContextView( url='service_catalog:request_archived_list', - perm_str='service_catalog.list_request', + perm_str_list=['service_catalog.list_request'], ), TestingGetContextView( url='service_catalog:request_details', - perm_str='service_catalog.view_request', + perm_str_list=['service_catalog.view_request'], url_kwargs={'pk': self.test_request.id} ), TestingGetContextView( url='service_catalog:request_edit', - perm_str='service_catalog.change_request', + perm_str_list=['service_catalog.change_request'], url_kwargs={'pk': self.test_request.id} ), TestingPostContextView( url='service_catalog:request_edit', - perm_str='service_catalog.change_request', + perm_str_list=['service_catalog.change_request'], url_kwargs={'pk': self.test_request.id}, data={ "fill_in_survey": "{}", @@ -44,14 +44,14 @@ def test_crud_views(self): ), TestingGetContextView( url='service_catalog:request_delete', - perm_str='service_catalog.delete_request', + perm_str_list=['service_catalog.delete_request'], url_kwargs={'pk': self.test_request.id} ), TestingPostContextView( url='service_catalog:request_delete', - perm_str='service_catalog.delete_request', + perm_str_list=['service_catalog.delete_request'], url_kwargs={'pk': self.test_request.id}, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_accept.py b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_accept.py index fc992c105..363304d6c 100644 --- a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_accept.py +++ b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_accept.py @@ -14,12 +14,12 @@ def test_accept_view(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_accept', - perm_str='service_catalog.accept_request', + perm_str_list=['service_catalog.accept_request'], url_kwargs={'pk': self.test_request.id}, ), TestingPostContextView( url='service_catalog:request_accept', - perm_str='service_catalog.accept_request', + perm_str_list=['service_catalog.accept_request'], url_kwargs={'pk': self.test_request.id}, data={ 'text_variable': 'my_var', @@ -35,14 +35,14 @@ def test_accept_view(self): self.run_permissions_tests(testing_view_list) def test_accept_and_process_view_with_accept(self): - perm_str = "service_catalog.accept_request" - accept_perm = Permission.objects.get(content_type__app_label=perm_str.split('.')[0], - codename=perm_str.split('.')[1]) + perm_str_list = "service_catalog.accept_request" + accept_perm = Permission.objects.get(content_type__app_label=perm_str_list.split('.')[0], + codename=perm_str_list.split('.')[1]) self.empty_role.permissions.add(accept_perm) testing_view_list = [ TestingPostContextView( url='service_catalog:request_accept', - perm_str='service_catalog.process_request', + perm_str_list=['service_catalog.process_request'], url_kwargs={'pk': self.test_request.id}, data={ 'text_variable': 'my_var', @@ -59,14 +59,14 @@ def test_accept_and_process_view_with_accept(self): self.run_permissions_tests(testing_view_list) def test_accept_and_process_view_with_process(self): - perm_str = "service_catalog.process_request" - accept_perm = Permission.objects.get(content_type__app_label=perm_str.split('.')[0], - codename=perm_str.split('.')[1]) + perm_str_list = "service_catalog.process_request" + accept_perm = Permission.objects.get(content_type__app_label=perm_str_list.split('.')[0], + codename=perm_str_list.split('.')[1]) self.empty_role.permissions.add(accept_perm) testing_view_list = [ TestingPostContextView( url='service_catalog:request_accept', - perm_str='service_catalog.accept_request', + perm_str_list=['service_catalog.accept_request'], url_kwargs={'pk': self.test_request.id}, data={ 'text_variable': 'my_var', @@ -80,4 +80,4 @@ def test_accept_and_process_view_with_process(self): } ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_archive.py b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_archive.py index c8e59077c..7a904f673 100644 --- a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_archive.py +++ b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_archive.py @@ -13,16 +13,16 @@ def test_archive_view(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_archive', - perm_str='service_catalog.archive_request', + perm_str_list=['service_catalog.archive_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=302 ), TestingPostContextView( url='service_catalog:request_archive', - perm_str='service_catalog.archive_request', + perm_str_list=['service_catalog.archive_request'], url_kwargs={'pk': self.test_request.id}, expected_not_allowed_status_code=405, expected_status_code=405 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_cancel.py b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_cancel.py index a61f98895..c217cc535 100644 --- a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_cancel.py +++ b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_cancel.py @@ -13,13 +13,13 @@ def test_cancel_view(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_cancel', - perm_str='service_catalog.cancel_request', + perm_str_list=['service_catalog.cancel_request'], url_kwargs={'pk': self.test_request.id}, ), TestingPostContextView( url='service_catalog:request_cancel', - perm_str='service_catalog.cancel_request', + perm_str_list=['service_catalog.cancel_request'], url_kwargs={'pk': self.test_request.id}, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_on_hold.py b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_on_hold.py index 32df14d09..a92877859 100644 --- a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_on_hold.py +++ b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_on_hold.py @@ -13,16 +13,16 @@ def test_on_hold_view(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_on_hold', - perm_str='service_catalog.hold_request', + perm_str_list=['service_catalog.hold_request'], url_kwargs={'pk': self.test_request.id}, ), TestingPostContextView( url='service_catalog:request_on_hold', - perm_str='service_catalog.hold_request', + perm_str_list=['service_catalog.hold_request'], url_kwargs={'pk': self.test_request.id}, data={ 'content': 'My comment' } ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_process.py b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_process.py index 1842e458c..c1f755146 100644 --- a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_process.py +++ b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_process.py @@ -13,13 +13,13 @@ def test_process_view(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_process', - perm_str='service_catalog.process_request', + perm_str_list=['service_catalog.process_request'], url_kwargs={'pk': self.test_request.id}, ), TestingPostContextView( url='service_catalog:request_process', - perm_str='service_catalog.process_request', + perm_str_list=['service_catalog.process_request'], url_kwargs={'pk': self.test_request.id}, ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_re_submit.py b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_re_submit.py index 1206c3cb6..cb1ca3714 100644 --- a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_re_submit.py +++ b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_re_submit.py @@ -13,13 +13,13 @@ def test_re_submit_view(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_re_submit', - perm_str='service_catalog.re_submit_request', + perm_str_list=['service_catalog.re_submit_request'], url_kwargs={'pk': self.test_request.id}, ), TestingPostContextView( url='service_catalog:request_re_submit', - perm_str='service_catalog.re_submit_request', + perm_str_list=['service_catalog.re_submit_request'], url_kwargs={'pk': self.test_request.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_reject.py b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_reject.py index 0cc0dce23..0c9d3caf9 100644 --- a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_reject.py +++ b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_reject.py @@ -13,16 +13,16 @@ def test_reject_view(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_reject', - perm_str='service_catalog.reject_request', + perm_str_list=['service_catalog.reject_request'], url_kwargs={'pk': self.test_request.id}, ), TestingPostContextView( url='service_catalog:request_reject', - perm_str='service_catalog.reject_request', + perm_str_list=['service_catalog.reject_request'], url_kwargs={'pk': self.test_request.id}, data={ 'content': 'My comment' } ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_unarchive.py b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_unarchive.py index 504c2f9ce..f67485194 100644 --- a/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_unarchive.py +++ b/tests/test_service_catalog/test_urls/test_request/test_state_machine/test_unarchive.py @@ -13,16 +13,16 @@ def test_unarchive_view(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_unarchive', - perm_str='service_catalog.unarchive_request', + perm_str_list=['service_catalog.unarchive_request'], url_kwargs={'pk': self.test_request.id}, expected_status_code=302 ), TestingPostContextView( url='service_catalog:request_unarchive', - perm_str='service_catalog.unarchive_request', + perm_str_list=['service_catalog.unarchive_request'], url_kwargs={'pk': self.test_request.id}, expected_not_allowed_status_code=405, expected_status_code=405 ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_requesthook.py b/tests/test_service_catalog/test_urls/test_requesthook.py index c504d2424..925bbb711 100644 --- a/tests/test_service_catalog/test_urls/test_requesthook.py +++ b/tests/test_service_catalog/test_urls/test_requesthook.py @@ -16,15 +16,15 @@ def test_requesthook_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:requesthook_list', - perm_str='service_catalog.list_requesthook', + perm_str_list=['service_catalog.list_requesthook'], ), TestingGetContextView( url='service_catalog:requesthook_create', - perm_str='service_catalog.add_requesthook', + perm_str_list=['service_catalog.add_requesthook'], ), TestingPostContextView( url='service_catalog:requesthook_create', - perm_str='service_catalog.add_requesthook', + perm_str_list=['service_catalog.add_requesthook'], data={ "name": "New hook", "state": RequestState.SUBMITTED, @@ -34,12 +34,12 @@ def test_requesthook_views(self): ), TestingGetContextView( url='service_catalog:requesthook_edit', - perm_str='service_catalog.change_requesthook', + perm_str_list=['service_catalog.change_requesthook'], url_kwargs={'pk': self.request_hook.id} ), TestingPostContextView( url='service_catalog:requesthook_edit', - perm_str='service_catalog.change_requesthook', + perm_str_list=['service_catalog.change_requesthook'], url_kwargs={'pk': self.request_hook.id}, data={ "name": "Hook updated", @@ -50,13 +50,13 @@ def test_requesthook_views(self): ), TestingGetContextView( url='service_catalog:requesthook_delete', - perm_str='service_catalog.delete_requesthook', + perm_str_list=['service_catalog.delete_requesthook'], url_kwargs={'pk': self.request_hook.id} ), TestingPostContextView( url='service_catalog:requesthook_delete', - perm_str='service_catalog.delete_requesthook', + perm_str_list=['service_catalog.delete_requesthook'], url_kwargs={'pk': self.request_hook.id} ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_requestmessage.py b/tests/test_service_catalog/test_urls/test_requestmessage.py index 5554447bc..18d610092 100644 --- a/tests/test_service_catalog/test_urls/test_requestmessage.py +++ b/tests/test_service_catalog/test_urls/test_requestmessage.py @@ -16,12 +16,12 @@ def test_requestmessage_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:requestmessage_create', - perm_str='service_catalog.add_requestmessage', + perm_str_list=['service_catalog.add_requestmessage'], url_kwargs={'request_id': self.test_request.id} ), TestingPostContextView( url='service_catalog:requestmessage_create', - perm_str='service_catalog.add_requestmessage', + perm_str_list=['service_catalog.add_requestmessage'], url_kwargs={'request_id': self.test_request.id}, data={ 'content': 'new message' @@ -29,16 +29,16 @@ def test_requestmessage_views(self): ), TestingGetContextView( url='service_catalog:requestmessage_edit', - perm_str='service_catalog.change_requestmessage', + perm_str_list=['service_catalog.change_requestmessage'], url_kwargs={'request_id': self.test_request.id, 'pk': self.request_message.id} ), TestingPostContextView( url='service_catalog:requestmessage_edit', - perm_str='service_catalog.change_requestmessage', + perm_str_list=['service_catalog.change_requestmessage'], url_kwargs={'request_id': self.test_request.id, 'pk': self.request_message.id}, data={ 'content': 'message updated' } ) ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_service.py b/tests/test_service_catalog/test_urls/test_service.py index c7bb106de..1a163e7f3 100644 --- a/tests/test_service_catalog/test_urls/test_service.py +++ b/tests/test_service_catalog/test_urls/test_service.py @@ -8,15 +8,15 @@ def test_service_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:service_list', - perm_str='service_catalog.list_service', + perm_str_list=['service_catalog.list_service'], ), TestingGetContextView( url='service_catalog:service_create', - perm_str='service_catalog.add_service', + perm_str_list=['service_catalog.add_service'], ), TestingPostContextView( url='service_catalog:service_create', - perm_str='service_catalog.add_service', + perm_str_list=['service_catalog.add_service'], data={ 'name': 'New service', 'description': 'A new service', @@ -24,17 +24,17 @@ def test_service_views(self): ), TestingGetContextView( url='service_catalog:service_details', - perm_str='service_catalog.view_service', + perm_str_list=['service_catalog.view_service'], url_kwargs={'pk': self.service_test.id} ), TestingGetContextView( url='service_catalog:service_edit', - perm_str='service_catalog.change_service', + perm_str_list=['service_catalog.change_service'], url_kwargs={'pk': self.service_test.id} ), TestingPostContextView( url='service_catalog:service_edit', - perm_str='service_catalog.change_service', + perm_str_list=['service_catalog.change_service'], url_kwargs={'pk': self.service_test.id}, data={ 'name': 'Service updated', @@ -43,12 +43,12 @@ def test_service_views(self): ), TestingGetContextView( url='service_catalog:service_delete', - perm_str='service_catalog.delete_service', + perm_str_list=['service_catalog.delete_service'], url_kwargs={'pk': self.service_test.id} ), TestingPostContextView( url='service_catalog:service_delete', - perm_str='service_catalog.delete_service', + perm_str_list=['service_catalog.delete_service'], url_kwargs={'pk': self.service_test.id} ) ] @@ -62,12 +62,12 @@ def test_request_service_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_service', - perm_str='service_catalog.request_on_service', + perm_str_list=['service_catalog.request_on_service'], url_kwargs={'service_id': self.service_test.id, 'operation_id': self.create_operation_test.id} ), TestingPostContextView( url='service_catalog:request_service', - perm_str='service_catalog.request_on_service', + perm_str_list=['service_catalog.request_on_service'], url_kwargs={'service_id': self.service_test.id, 'operation_id': self.create_operation_test.id}, data={ "0-name": "instance_1", @@ -78,7 +78,7 @@ def test_request_service_views(self): ), TestingPostContextView( url='service_catalog:request_service', - perm_str='service_catalog.request_on_service', + perm_str_list=['service_catalog.request_on_service'], url_kwargs={'service_id': self.service_test.id, 'operation_id': self.create_operation_test.id}, data={ "1-text_variable": "text_value_1", @@ -88,12 +88,12 @@ def test_request_service_views(self): ), TestingGetContextView( url='service_catalog:request_service', - perm_str='service_catalog.admin_request_on_service', + perm_str_list=['service_catalog.admin_request_on_service'], url_kwargs={'service_id': self.service_test_2.id, 'operation_id': self.create_operation_test_2.id} ), TestingPostContextView( url='service_catalog:request_service', - perm_str='service_catalog.admin_request_on_service', + perm_str_list=['service_catalog.admin_request_on_service'], url_kwargs={'service_id': self.service_test_2.id, 'operation_id': self.create_operation_test_2.id}, data={ "0-name": "instance_1", @@ -104,7 +104,7 @@ def test_request_service_views(self): ), TestingPostContextView( url='service_catalog:request_service', - perm_str='service_catalog.admin_request_on_service', + perm_str_list=['service_catalog.admin_request_on_service'], url_kwargs={'service_id': self.service_test_2.id, 'operation_id': self.create_operation_test_2.id}, data={ "1-text_variable": "text_value_1", @@ -113,4 +113,4 @@ def test_request_service_views(self): }, ), ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_support.py b/tests/test_service_catalog/test_urls/test_support.py index c79acc14a..9b30e2c81 100644 --- a/tests/test_service_catalog/test_urls/test_support.py +++ b/tests/test_service_catalog/test_urls/test_support.py @@ -17,16 +17,16 @@ def test_support_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:support_list', - perm_str='service_catalog.list_support', + perm_str_list=['service_catalog.list_support'], ), TestingGetContextView( url='service_catalog:support_create', - perm_str='service_catalog.add_support', + perm_str_list=['service_catalog.add_support'], url_kwargs={'instance_id': self.support_test.instance.id} ), TestingPostContextView( url='service_catalog:support_create', - perm_str='service_catalog.add_support', + perm_str_list=['service_catalog.add_support'], data={ 'title': 'New support', 'content': 'message' @@ -35,12 +35,12 @@ def test_support_views(self): ), TestingGetContextView( url='service_catalog:support_details', - perm_str='service_catalog.view_support', + perm_str_list=['service_catalog.view_support'], url_kwargs={'instance_id': self.support_test.instance.id, 'pk': self.support_test.id}, ), TestingPostContextView( url='service_catalog:support_details', - perm_str='service_catalog.add_supportmessage', + perm_str_list=['service_catalog.add_supportmessage'], url_kwargs={'instance_id': self.support_test.instance.id, 'pk': self.support_test.id}, data={ 'content': 'message' @@ -48,13 +48,13 @@ def test_support_views(self): ), TestingGetContextView( url='service_catalog:supportmessage_edit', - perm_str='service_catalog.change_supportmessage', + perm_str_list=['service_catalog.change_supportmessage'], url_kwargs={'instance_id': self.support_test.instance.id, 'support_id': self.support_test.id, 'pk': self.test_message.id}, ), TestingPostContextView( url='service_catalog:supportmessage_edit', - perm_str='service_catalog.change_supportmessage', + perm_str_list=['service_catalog.change_supportmessage'], url_kwargs={'instance_id': self.support_test.instance.id, 'support_id': self.support_test.id, 'pk': self.test_message.id}, data={ @@ -63,39 +63,39 @@ def test_support_views(self): ), TestingGetContextView( url='service_catalog:support_close', - perm_str='service_catalog.close_support', + perm_str_list=['service_catalog.close_support'], url_kwargs={'instance_id': self.support_test.instance.id, 'pk': self.support_test.id}, expected_status_code=302 ), TestingPostContextView( url='service_catalog:support_close', - perm_str='service_catalog.close_support', + perm_str_list=['service_catalog.close_support'], url_kwargs={'instance_id': self.support_test.instance.id, 'pk': self.support_test.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingGetContextView( url='service_catalog:support_reopen', - perm_str='service_catalog.reopen_support', + perm_str_list=['service_catalog.reopen_support'], url_kwargs={'instance_id': self.support_test.instance.id, 'pk': self.support_test.id}, expected_status_code=302 ), TestingPostContextView( url='service_catalog:support_reopen', - perm_str='service_catalog.reopen_support', + perm_str_list=['service_catalog.reopen_support'], url_kwargs={'instance_id': self.support_test.instance.id, 'pk': self.support_test.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingGetContextView( url='service_catalog:support_delete', - perm_str='service_catalog.delete_support', + perm_str_list=['service_catalog.delete_support'], url_kwargs={'instance_id': self.support_test.instance.id, 'pk': self.support_test.id}, ), TestingPostContextView( url='service_catalog:support_delete', - perm_str='service_catalog.delete_support', + perm_str_list=['service_catalog.delete_support'], url_kwargs={'instance_id': self.support_test.instance.id, 'pk': self.support_test.id} ), ] - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_towerserver.py b/tests/test_service_catalog/test_urls/test_towerserver.py index 5bf8adb71..29a848cdc 100644 --- a/tests/test_service_catalog/test_urls/test_towerserver.py +++ b/tests/test_service_catalog/test_urls/test_towerserver.py @@ -9,15 +9,15 @@ def test_towerserver_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:towerserver_list', - perm_str='service_catalog.list_towerserver', + perm_str_list=['service_catalog.list_towerserver'], ), TestingGetContextView( url='service_catalog:towerserver_create', - perm_str='service_catalog.add_towerserver', + perm_str_list=['service_catalog.add_towerserver'], ), TestingPostContextView( url='service_catalog:towerserver_create', - perm_str='service_catalog.add_towerserver', + perm_str_list=['service_catalog.add_towerserver'], data={ "name": "New tower", "host": "tower.domain.local", @@ -27,17 +27,17 @@ def test_towerserver_views(self): ), TestingGetContextView( url='service_catalog:towerserver_details', - perm_str='service_catalog.view_towerserver', + perm_str_list=['service_catalog.view_towerserver'], url_kwargs={'pk': self.tower_server_test.id} ), TestingGetContextView( url='service_catalog:towerserver_edit', - perm_str='service_catalog.change_towerserver', + perm_str_list=['service_catalog.change_towerserver'], url_kwargs={'pk': self.tower_server_test.id} ), TestingPostContextView( url='service_catalog:towerserver_edit', - perm_str='service_catalog.change_towerserver', + perm_str_list=['service_catalog.change_towerserver'], url_kwargs={'pk': self.tower_server_test.id}, data={ "name": "Tower server updated", @@ -47,42 +47,42 @@ def test_towerserver_views(self): ), TestingGetContextView( url='service_catalog:towerserver_sync', - perm_str='service_catalog.sync_towerserver', + perm_str_list=['service_catalog.sync_towerserver'], url_kwargs={'tower_id': self.tower_server_test.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPostContextView( url='service_catalog:towerserver_sync', - perm_str='service_catalog.sync_towerserver', + perm_str_list=['service_catalog.sync_towerserver'], url_kwargs={'tower_id': self.tower_server_test.id}, expected_status_code=202, ), TestingGetContextView( url='service_catalog:jobtemplate_sync', - perm_str='service_catalog.sync_towerserver', + perm_str_list=['service_catalog.sync_towerserver'], url_kwargs={'tower_id': self.tower_server_test.id, 'pk': self.job_template_test.id}, expected_status_code=405, expected_not_allowed_status_code=405 ), TestingPostContextView( url='service_catalog:jobtemplate_sync', - perm_str='service_catalog.sync_towerserver', + perm_str_list=['service_catalog.sync_towerserver'], url_kwargs={'tower_id': self.tower_server_test.id, 'pk': self.job_template_test.id}, expected_status_code=202, ), TestingGetContextView( url='service_catalog:towerserver_delete', - perm_str='service_catalog.delete_towerserver', + perm_str_list=['service_catalog.delete_towerserver'], url_kwargs={'pk': self.tower_server_test.id} ), TestingPostContextView( url='service_catalog:towerserver_delete', - perm_str='service_catalog.delete_towerserver', + perm_str_list=['service_catalog.delete_towerserver'], url_kwargs={'pk': self.tower_server_test.id} ) ] with mock.patch("towerlib.towerlib.Tower.__init__") as mock_tower_lib: with mock.patch("service_catalog.models.tower_server.TowerServer.sync") as mock_tower_sync: mock_tower_lib.return_value = None - self.run_permissions_tests(testing_view_list) + self.run_permissions_tests(testing_view_list) \ No newline at end of file diff --git a/tests/test_service_catalog/test_views/test_admin/test_request/test_admin_request_view.py b/tests/test_service_catalog/test_views/test_admin/test_request/test_admin_request_view.py index 238360cbc..08b8e417a 100644 --- a/tests/test_service_catalog/test_views/test_admin/test_request/test_admin_request_view.py +++ b/tests/test_service_catalog/test_views/test_admin/test_request/test_admin_request_view.py @@ -193,9 +193,9 @@ def test_request_accept_and_process_pending_instance_when_no_perm(self): } self.client.force_login(user=self.standard_user) new_role = Role.objects.create(name="approver_no_processor") - perm_str = "service_catalog.accept_request" - new_role.permissions.add(Permission.objects.get(content_type__app_label=perm_str.split('.')[0], - codename=perm_str.split('.')[1])) + perm_str_list = "service_catalog.accept_request" + new_role.permissions.add(Permission.objects.get(content_type__app_label=perm_str_list.split('.')[0], + codename=perm_str_list.split('.')[1])) GlobalScope.load().add_user_in_role(self.standard_user, new_role) self._accept_request_with_expected_state(expected_request_state=RequestState.SUBMITTED, @@ -624,4 +624,4 @@ def _edit_request(self, status_code=200): self.assertEqual(status_code, response.status_code) if status_code == 200: response = self.client.post(url, data=data) - self.assertEqual(response.status_code, 302) + self.assertEqual(response.status_code, 302) \ No newline at end of file From 90e42e325a195a310d38210d88c68cc68b5ba410 Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Fri, 13 Dec 2024 12:12:03 +0100 Subject: [PATCH 07/11] fix tests after adding perm on operation --- Squest/utils/plugin_controller.py | 4 +-- Squest/utils/squest_rbac.py | 8 +++--- docs/manual/advanced/survey_validators.md | 6 ++--- service_catalog/forms/__init__.py | 3 +-- service_catalog/forms/service_forms.py | 2 +- service_catalog/views/catalog_views.py | 4 +-- service_catalog/views/instance.py | 4 +-- service_catalog/views/operation.py | 8 +++--- .../create_operation_request.html | 4 +-- .../survey_validators_test/survey_test.py | 4 +-- tests/test_service_catalog/base.py | 2 +- .../test_service_catalog/base_test_request.py | 2 +- .../test_forms/test_admin_service_forms.py | 16 ++++++++---- .../test_urls/test_instance/test_crud.py | 18 ++++++++----- .../test_urls/test_operation.py | 7 ++++-- .../test_urls/test_portfolio.py | 7 ++++-- .../test_urls/test_service.py | 25 +++++++++++++------ .../test_operations/test_create.py | 19 ++++++++------ .../test_catalog/test_operations/test_edit.py | 24 ++++++++++++------ .../test_portfolio/test_create.py | 7 ++++-- .../test_catalog/test_portfolio/test_edit.py | 9 ++++--- .../test_catalog/test_services/test_create.py | 7 ++++-- .../test_catalog/test_services/test_edit.py | 6 +++-- .../test_catalog/test_catalog.py | 18 ++++++++----- .../test_instance_request_operation.py | 11 +++++--- 25 files changed, 144 insertions(+), 81 deletions(-) diff --git a/Squest/utils/plugin_controller.py b/Squest/utils/plugin_controller.py index c7925f7a3..3aa1d7058 100644 --- a/Squest/utils/plugin_controller.py +++ b/Squest/utils/plugin_controller.py @@ -40,7 +40,7 @@ def is_validator(obj): """ Returns True if the object is a Script. """ - from service_catalog.forms import SurveyValidator + from service_catalog.forms.form_utils import SurveyValidator try: return issubclass(obj, SurveyValidator) and obj != SurveyValidator except TypeError: @@ -103,4 +103,4 @@ def _load_validator_module(module_name, definition_kind, filepath): except ModuleNotFoundError: logger.warning(f"[PluginController] Validator file not loaded: {module_name}." f" Check that the file exists in the plugin directory.") - return None + return None \ No newline at end of file diff --git a/Squest/utils/squest_rbac.py b/Squest/utils/squest_rbac.py index 4fa4e4abe..2b4b3dc85 100644 --- a/Squest/utils/squest_rbac.py +++ b/Squest/utils/squest_rbac.py @@ -28,8 +28,10 @@ def has_perm(self, user_obj, perm, obj=None): if not user_obj.is_authenticated: return False - - app_label, codename = perm.split(".") + try: + app_label, codename = perm.split(".") + except Exception as test: + print(test) if obj is None: key = f"{user_obj.id}_{perm}" @@ -92,4 +94,4 @@ def has_perm(self, user_obj, perm, obj=None): except AttributeError: logger.debug("is_owner method not found") cache.set(key, permission_granted, 60) - return permission_granted + return permission_granted \ No newline at end of file diff --git a/docs/manual/advanced/survey_validators.md b/docs/manual/advanced/survey_validators.md index 2117bdf02..48dc71584 100644 --- a/docs/manual/advanced/survey_validators.md +++ b/docs/manual/advanced/survey_validators.md @@ -10,7 +10,7 @@ Create Python class that inherit from SurveyValidator with a method `validate_su ```python # plugins/survey_validators/MySurveyValidator.py -from service_catalog.forms import SurveyValidator +from service_catalog.forms.form_utils import SurveyValidator class MyCustomValidatorFoo(SurveyValidator): def validate_survey(self): @@ -75,7 +75,7 @@ This validator will always fail if: - It's not the weekend yet ```python -from service_catalog.forms import SurveyValidator +from service_catalog.forms.form_utils import SurveyValidator import datetime class ValidatorForVM(SurveyValidator): @@ -86,4 +86,4 @@ class ValidatorForVM(SurveyValidator): weekday = datetime.datetime.today().weekday() if weekday < 5: self.fail("Sorry it's not the weekend yet") -``` +``` \ No newline at end of file diff --git a/service_catalog/forms/__init__.py b/service_catalog/forms/__init__.py index af0096aa5..75139fd17 100644 --- a/service_catalog/forms/__init__.py +++ b/service_catalog/forms/__init__.py @@ -10,5 +10,4 @@ from .service_request_forms import * from .support_message_forms import * from .support_request_forms import * -from .tower_server_forms import * -from .form_utils import * +from .tower_server_forms import * \ No newline at end of file diff --git a/service_catalog/forms/service_forms.py b/service_catalog/forms/service_forms.py index 05cca955e..2ec6df5c7 100644 --- a/service_catalog/forms/service_forms.py +++ b/service_catalog/forms/service_forms.py @@ -3,7 +3,7 @@ from Squest.utils.squest_model_form import SquestModelForm from profiles.models import Permission -from service_catalog.forms import FormUtils +from service_catalog.forms.form_utils import FormUtils from service_catalog.models.services import Service diff --git a/service_catalog/views/catalog_views.py b/service_catalog/views/catalog_views.py index c6d6fba1d..75e7c9cb2 100644 --- a/service_catalog/views/catalog_views.py +++ b/service_catalog/views/catalog_views.py @@ -12,7 +12,7 @@ def get_permission_required(self): service_id = self.kwargs['service_id'] operation_id = self.kwargs['operation_id'] self.operation = get_object_or_404(Operation, enabled=True, service__enabled=True, id=operation_id, type=OperationType.CREATE, service__id=service_id) - return self.operation.permission + return self.operation.permission.permission_str def get_context_data(self, form, **kwargs): @@ -45,4 +45,4 @@ def done(self, form_list, **kwargs): new_instance = form_list[0].save() # get data from the second form form_list[1].save(new_instance) - return redirect('service_catalog:request_list') + return redirect('service_catalog:request_list') \ No newline at end of file diff --git a/service_catalog/views/instance.py b/service_catalog/views/instance.py index fa4910397..d60bdce37 100644 --- a/service_catalog/views/instance.py +++ b/service_catalog/views/instance.py @@ -189,7 +189,7 @@ class InstanceDeleteView(SquestDeleteView): def instance_request_new_operation(request, instance_id, operation_id): instance = get_object_or_404(Instance, id=instance_id) operation = get_object_or_404(Operation, id=operation_id) - if not request.user.has_perm(operation.permission, instance): + if not request.user.has_perm(operation.permission.permission_str, instance): raise SquestPermissionDenied(permission=operation.permission) if instance.state not in [InstanceState.AVAILABLE]: raise PermissionDenied("Instance not available") @@ -419,4 +419,4 @@ def instance_bulk_delete(request): elif request.method == "POST": context['object_list'].delete() - return redirect("service_catalog:instance_list") + return redirect("service_catalog:instance_list") \ No newline at end of file diff --git a/service_catalog/views/operation.py b/service_catalog/views/operation.py index 539d77da7..58a077084 100644 --- a/service_catalog/views/operation.py +++ b/service_catalog/views/operation.py @@ -105,11 +105,11 @@ def get_queryset(self): for permission in all_permission_current_service.all(): # add allowed operation for all service if the user has the permission operation_qs = operation_qs | Operation.get_queryset_for_user_filtered(self.request.user, - permission.permission_str) + permission.permission_str) # restrict to only the selected service operation_qs = operation_qs.filter(service=current_service, - enabled=True, - type__in=[OperationType.CREATE]) + enabled=True, + type__in=[OperationType.CREATE]) return operation_qs def dispatch(self, request, *args, **kwargs): @@ -129,4 +129,4 @@ def get_context_data(self, **kwargs): ] context['html_button_path'] = "" context['add_url'] = "" - return context + return context \ No newline at end of file diff --git a/templates/service_catalog/custom_columns/create_operation_request.html b/templates/service_catalog/custom_columns/create_operation_request.html index a642d7807..fe5eac905 100644 --- a/templates/service_catalog/custom_columns/create_operation_request.html +++ b/templates/service_catalog/custom_columns/create_operation_request.html @@ -1,7 +1,7 @@ -{% has_perm request.user record.permission as can_request_operation %} +{% has_perm request.user record.permission.permission_str as can_request_operation %} {% if can_request_operation %} -{% endif %} +{% endif %} \ No newline at end of file diff --git a/tests/test_plugins/survey_validators_test/survey_test.py b/tests/test_plugins/survey_validators_test/survey_test.py index 1a5b0eb7f..a1e3415bb 100644 --- a/tests/test_plugins/survey_validators_test/survey_test.py +++ b/tests/test_plugins/survey_validators_test/survey_test.py @@ -1,7 +1,7 @@ from django.contrib.auth.models import User from profiles.models import Scope -from service_catalog.forms import SurveyValidator +from service_catalog.forms.form_utils import SurveyValidator from service_catalog.models import Operation, Instance @@ -42,4 +42,4 @@ def validate_survey(self): assert self.instance.name == "Instance 1 - Org 1" assert self.instance.id != None assert self.instance == Instance.objects.get(name="Instance 1 - Org 1") - self.fail("Everything is good, it's just a message to be sure that code was executed") + self.fail("Everything is good, it's just a message to be sure that code was executed") \ No newline at end of file diff --git a/tests/test_service_catalog/base.py b/tests/test_service_catalog/base.py index f13ad6ebe..2e2ff229f 100644 --- a/tests/test_service_catalog/base.py +++ b/tests/test_service_catalog/base.py @@ -431,4 +431,4 @@ class BaseTest(TestCase, BaseTestCommon): class BaseTestAPI(APITestCase, BaseTestCommon): - pass + pass \ No newline at end of file diff --git a/tests/test_service_catalog/base_test_request.py b/tests/test_service_catalog/base_test_request.py index b8eea395a..b7b03573e 100644 --- a/tests/test_service_catalog/base_test_request.py +++ b/tests/test_service_catalog/base_test_request.py @@ -44,4 +44,4 @@ class BaseTestRequest(TestCase, BaseTestRequestCommon): class BaseTestRequestAPI(APITestCase, BaseTestRequestCommon): - pass + pass \ No newline at end of file diff --git a/tests/test_service_catalog/test_forms/test_admin_service_forms.py b/tests/test_service_catalog/test_forms/test_admin_service_forms.py index 9bba318f5..8a63dab25 100644 --- a/tests/test_service_catalog/test_forms/test_admin_service_forms.py +++ b/tests/test_service_catalog/test_forms/test_admin_service_forms.py @@ -1,4 +1,5 @@ -from service_catalog.forms import ServiceForm +from service_catalog.forms import ServiceForm +from service_catalog.forms.form_utils import FormUtils from service_catalog.models import OperationType from tests.test_service_catalog.base import BaseTest @@ -11,22 +12,27 @@ def setUp(self): { "name": "new_service", "description": "a new service", + "permission": FormUtils.get_default_permission_for_operation(), }, { "name": "new_service_2", "description": "a new service 2", + "permission": FormUtils.get_default_permission_for_operation(), }, { "name": "new_service_3", - "description": "a new service 3" + "description": "a new service 3", + "permission": FormUtils.get_default_permission_for_operation(), }, { "name": "new_service_4", - "description": "a new service 4" + "description": "a new service 4", + "permission": -1, }, { "name": "new_service_5", - "description": "a new service 5" + "description": "a new service 5", + "permission": FormUtils.get_default_permission_for_operation(), }, ] self.failed_expected = ["new_service_4"] @@ -78,4 +84,4 @@ def get_test_list(data, service): 'value': service.description, 'expected': data['description'] }, - ] + ] \ No newline at end of file diff --git a/tests/test_service_catalog/test_urls/test_instance/test_crud.py b/tests/test_service_catalog/test_urls/test_instance/test_crud.py index 858976a71..389697a59 100644 --- a/tests/test_service_catalog/test_urls/test_instance/test_crud.py +++ b/tests/test_service_catalog/test_urls/test_instance/test_crud.py @@ -1,6 +1,9 @@ import json -from service_catalog.models import InstanceState +from django.contrib.contenttypes.models import ContentType + +from profiles.models import Permission +from service_catalog.models import InstanceState, Operation from tests.test_service_catalog.base_test_request import BaseTestRequest from tests.permission_endpoint import TestingGetContextView, TestingPostContextView, TestPermissionEndpoint @@ -14,7 +17,10 @@ def setUp(self): self.test_instance.save() self.test_instance_2.save() - self.update_operation_test_2.is_admin_operation = True + operation_content_type = ContentType.objects.get_for_model(Operation) + self.update_operation_test_2.permission, _ = Permission.objects.get_or_create( + content_type=operation_content_type, + codename="is_admin_operation") self.update_operation_test_2.save() def test_crud_views(self): @@ -30,12 +36,12 @@ def test_crud_views(self): ), TestingGetContextView( url='service_catalog:instance_request_new_operation', - perm_str_list=['service_catalog.request_on_instance'], + perm_str_list=['service_catalog.request_on_instance',self.update_operation_test.permission.permission_str], url_kwargs={'instance_id': self.test_instance.id, 'operation_id': self.update_operation_test.id} ), TestingPostContextView( url='service_catalog:instance_request_new_operation', - perm_str_list=['service_catalog.request_on_instance'], + perm_str_list=['service_catalog.request_on_instance',self.update_operation_test.permission.permission_str], url_kwargs={'instance_id': self.test_instance.id, 'operation_id': self.update_operation_test.id}, data={ 'text_variable': 'test' @@ -43,12 +49,12 @@ def test_crud_views(self): ), TestingGetContextView( url='service_catalog:instance_request_new_operation', - perm_str_list=['service_catalog.admin_request_on_instance'], + perm_str_list=['service_catalog.request_on_instance',self.update_operation_test_2.permission.permission_str], url_kwargs={'instance_id': self.test_instance_2.id, 'operation_id': self.update_operation_test_2.id} ), TestingPostContextView( url='service_catalog:instance_request_new_operation', - perm_str_list=['service_catalog.admin_request_on_instance'], + perm_str_list=['service_catalog.request_on_instance',self.update_operation_test_2.permission.permission_str], url_kwargs={'instance_id': self.test_instance_2.id, 'operation_id': self.update_operation_test_2.id}, data={ 'text_variable': 'test' diff --git a/tests/test_service_catalog/test_urls/test_operation.py b/tests/test_service_catalog/test_urls/test_operation.py index 276f8bfe6..f5d852732 100644 --- a/tests/test_service_catalog/test_urls/test_operation.py +++ b/tests/test_service_catalog/test_urls/test_operation.py @@ -1,5 +1,6 @@ from tests.test_service_catalog.base_test_request import BaseTestRequest from tests.permission_endpoint import TestingGetContextView, TestingPostContextView, TestPermissionEndpoint +from service_catalog.forms.form_utils import FormUtils class TestServiceCatalogOperationPermissionsViews(BaseTestRequest, TestPermissionEndpoint): @@ -27,7 +28,8 @@ def test_operation_views(self): 'description': 'a new operation', 'job_template': self.job_template_test.id, 'type': 'CREATE', - 'process_timeout_second': 60 + 'process_timeout_second': 60, + "permission": FormUtils.get_default_permission_for_operation(), } ), TestingGetContextView( @@ -50,7 +52,8 @@ def test_operation_views(self): 'description': 'Updated operation description', 'job_template': self.job_template_test.id, 'type': 'DELETE', - 'process_timeout_second': 120 + 'process_timeout_second': 120, + "permission": FormUtils.get_default_permission_for_operation() } ), TestingGetContextView( diff --git a/tests/test_service_catalog/test_urls/test_portfolio.py b/tests/test_service_catalog/test_urls/test_portfolio.py index 6da08dac6..0d11aa9b3 100644 --- a/tests/test_service_catalog/test_urls/test_portfolio.py +++ b/tests/test_service_catalog/test_urls/test_portfolio.py @@ -1,5 +1,6 @@ from tests.test_service_catalog.base_test_request import BaseTestRequest from tests.permission_endpoint import TestingGetContextView, TestingPostContextView, TestPermissionEndpoint +from service_catalog.forms.form_utils import FormUtils class TestServiceCatalogPortfolioPermissionsViews(BaseTestRequest, TestPermissionEndpoint): @@ -17,7 +18,8 @@ def test_portfolio_views(self): url='service_catalog:portfolio_create', perm_str_list=['service_catalog.add_portfolio'], data={ - 'name': 'New name' + 'name': 'New name', + "permission": FormUtils.get_default_permission_for_operation(), } ), TestingGetContextView( @@ -30,7 +32,8 @@ def test_portfolio_views(self): perm_str_list=['service_catalog.change_portfolio'], url_kwargs={'pk': self.portfolio_test_1.id}, data={ - 'name': 'name updated' + 'name': 'name updated', + "permission": FormUtils.get_default_permission_for_operation(), } ), TestingGetContextView( diff --git a/tests/test_service_catalog/test_urls/test_service.py b/tests/test_service_catalog/test_urls/test_service.py index 1a163e7f3..f7e9f9c05 100644 --- a/tests/test_service_catalog/test_urls/test_service.py +++ b/tests/test_service_catalog/test_urls/test_service.py @@ -1,9 +1,18 @@ +from django.contrib.contenttypes.models import ContentType + from profiles.models import Permission +from service_catalog.models import Operation from tests.test_service_catalog.base_test_request import BaseTestRequest from tests.permission_endpoint import TestingGetContextView, TestingPostContextView, TestPermissionEndpoint - +from service_catalog.forms.form_utils import FormUtils class TestServiceCatalogServicePermissionsViews(BaseTestRequest, TestPermissionEndpoint): + def setUp(self): + super().setUp() + operation_content_type = ContentType.objects.get_for_model(Operation) + self.update_operation_test_2.permission, _ = Permission.objects.get_or_create(content_type=operation_content_type, + codename="is_admin_operation") + self.update_operation_test_2.save() def test_service_views(self): testing_view_list = [ TestingGetContextView( @@ -20,6 +29,7 @@ def test_service_views(self): data={ 'name': 'New service', 'description': 'A new service', + "permission": FormUtils.get_default_permission_for_operation(), } ), TestingGetContextView( @@ -39,6 +49,7 @@ def test_service_views(self): data={ 'name': 'Service updated', 'description': 'Description of service test updated', + "permission": FormUtils.get_default_permission_for_operation(), } ), TestingGetContextView( @@ -62,12 +73,12 @@ def test_request_service_views(self): testing_view_list = [ TestingGetContextView( url='service_catalog:request_service', - perm_str_list=['service_catalog.request_on_service'], + perm_str_list=['service_catalog.request_on_service', self.create_operation_test.permission.permission_str], url_kwargs={'service_id': self.service_test.id, 'operation_id': self.create_operation_test.id} ), TestingPostContextView( url='service_catalog:request_service', - perm_str_list=['service_catalog.request_on_service'], + perm_str_list=['service_catalog.request_on_service', self.create_operation_test.permission.permission_str], url_kwargs={'service_id': self.service_test.id, 'operation_id': self.create_operation_test.id}, data={ "0-name": "instance_1", @@ -78,7 +89,7 @@ def test_request_service_views(self): ), TestingPostContextView( url='service_catalog:request_service', - perm_str_list=['service_catalog.request_on_service'], + perm_str_list=['service_catalog.request_on_service', self.create_operation_test.permission.permission_str], url_kwargs={'service_id': self.service_test.id, 'operation_id': self.create_operation_test.id}, data={ "1-text_variable": "text_value_1", @@ -88,12 +99,12 @@ def test_request_service_views(self): ), TestingGetContextView( url='service_catalog:request_service', - perm_str_list=['service_catalog.admin_request_on_service'], + perm_str_list=['service_catalog.request_on_service', self.create_operation_test_2.permission.permission_str], url_kwargs={'service_id': self.service_test_2.id, 'operation_id': self.create_operation_test_2.id} ), TestingPostContextView( url='service_catalog:request_service', - perm_str_list=['service_catalog.admin_request_on_service'], + perm_str_list=['service_catalog.request_on_service', self.create_operation_test_2.permission.permission_str], url_kwargs={'service_id': self.service_test_2.id, 'operation_id': self.create_operation_test_2.id}, data={ "0-name": "instance_1", @@ -104,7 +115,7 @@ def test_request_service_views(self): ), TestingPostContextView( url='service_catalog:request_service', - perm_str_list=['service_catalog.admin_request_on_service'], + perm_str_list=['service_catalog.request_on_service', self.create_operation_test_2.permission.permission_str], url_kwargs={'service_id': self.service_test_2.id, 'operation_id': self.create_operation_test_2.id}, data={ "1-text_variable": "text_value_1", diff --git a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_operations/test_create.py b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_operations/test_create.py index d250d70f5..8aa2701cf 100644 --- a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_operations/test_create.py +++ b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_operations/test_create.py @@ -1,5 +1,5 @@ from django.urls import reverse - +from service_catalog.forms.form_utils import FormUtils from service_catalog.models import Operation, OperationType from tests.test_service_catalog.base import BaseTest @@ -19,7 +19,8 @@ def test_create_a_create_service_operation(self): "description": "a new service", "job_template": self.job_template_test.id, "type": "CREATE", - "process_timeout_second": 60 + "process_timeout_second": 60, + "permission": FormUtils.get_default_permission_for_operation(), } response = self.client.get(self.url) self.assertEqual(200, response.status_code) @@ -36,7 +37,8 @@ def test_create_a_delete_service_operation(self): "description": "a new service", "job_template": self.job_template_test.id, "type": "DELETE", - "process_timeout_second": 60 + "process_timeout_second": 60, + "permission": FormUtils.get_default_permission_for_operation(), } response = self.client.get(self.url) self.assertEqual(200, response.status_code) @@ -53,7 +55,8 @@ def test_create_an_update_service_operation(self): "description": "a new service", "job_template": self.job_template_test.id, "type": "UPDATE", - "process_timeout_second": 60 + "process_timeout_second": 60, + "permission": FormUtils.get_default_permission_for_operation(), } response = self.client.get(self.url) self.assertEqual(200, response.status_code) @@ -73,7 +76,8 @@ def test_can_create_a_create_service_operation(self): "description": "a new create operation", "job_template": self.job_template_test.id, "type": "CREATE", - "process_timeout_second": 60 + "process_timeout_second": 60, + "permission": FormUtils.get_default_permission_for_operation(), } response = self.client.get(self.url) self.assertEqual(200, response.status_code) @@ -91,9 +95,10 @@ def test_cannot_add_service_operation_when_logout(self): "description": "a new service", "job_template": self.job_template_test.id, "type": "CREATE", - "process_timeout_second": 60 + "process_timeout_second": 60, + "permission": FormUtils.get_default_permission_for_operation(), } response = self.client.get(self.url) self.assertEqual(302, response.status_code) response = self.client.post(self.url, data=data) - self.assertEqual(302, response.status_code) + self.assertEqual(302, response.status_code) \ No newline at end of file diff --git a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_operations/test_edit.py b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_operations/test_edit.py index 0797f5a0e..746327c23 100644 --- a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_operations/test_edit.py +++ b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_operations/test_edit.py @@ -1,5 +1,6 @@ from django.urls import reverse +from service_catalog.forms.form_utils import FormUtils from service_catalog.models import OperationType from tests.test_service_catalog.base import BaseTest @@ -20,7 +21,8 @@ def test_edit_operation(self): "description": "updated description", "job_template": self.job_template_test.id, "type": OperationType.DELETE, - "process_timeout_second": 60 + "process_timeout_second": 60, + "permission": FormUtils.get_default_permission_for_operation() } response = self.client.get(self.url) self.assertEqual(200, response.status_code) @@ -42,7 +44,8 @@ def test_edit_a_create_operation(self): "description": "updated description", "job_template": self.job_template_test.id, "type": "CREATE", - "process_timeout_second": 600 + "process_timeout_second": 600, + "permission": FormUtils.get_default_permission_for_operation() } response = self.client.get(url) self.assertEqual(200, response.status_code) @@ -64,7 +67,8 @@ def test_transform_create_into_edit(self): "description": "updated description", "job_template": self.job_template_test.id, "type": OperationType.UPDATE, - "process_timeout_second": 600 + "process_timeout_second": 600, + "permission": FormUtils.get_default_permission_for_operation() } response = self.client.get(url) self.assertEqual(200, response.status_code) @@ -86,7 +90,8 @@ def test_cannot_edit_service_operation_when_logout(self): "description": "updated description", "job_template": self.job_template_test.id, "type": OperationType.UPDATE, - "process_timeout_second": 600 + "process_timeout_second": 600, + "permission": FormUtils.get_default_permission_for_operation() } response = self.client.get(url) self.assertEqual(302, response.status_code) @@ -105,7 +110,8 @@ def test_transform_delete_into_create(self): "description": "updated description", "job_template": self.job_template_test.id, "type": OperationType.CREATE, - "process_timeout_second": 600 + "process_timeout_second": 600, + "permission": FormUtils.get_default_permission_for_operation() } response = self.client.get(url) self.assertEqual(200, response.status_code) @@ -126,7 +132,8 @@ def test_transform_update_into_create(self): "description": "updated description", "job_template": self.job_template_test.id, "type": "CREATE", - "process_timeout_second": 600 + "process_timeout_second": 600, + "permission": FormUtils.get_default_permission_for_operation() } response = self.client.get(url) self.assertEqual(200, response.status_code) @@ -171,7 +178,8 @@ def test_update_survey_when_job_template_on_operation_changed(self): "description": "updated description", "job_template": self.job_template_test.id, "type": "CREATE", - "process_timeout_second": 600 + "process_timeout_second": 600, + "permission": FormUtils.get_default_permission_for_operation() } response = self.client.get(url) self.assertEqual(200, response.status_code) @@ -198,4 +206,4 @@ def _get_keys_from_survey(survey): fields = list() for field in survey['spec']: fields.append(field['variable']) - return fields + return fields \ No newline at end of file diff --git a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_portfolio/test_create.py b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_portfolio/test_create.py index 28b5570ef..88b4b5586 100644 --- a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_portfolio/test_create.py +++ b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_portfolio/test_create.py @@ -1,4 +1,6 @@ from django.urls import reverse + +from service_catalog.forms.form_utils import FormUtils from service_catalog.models import Portfolio from tests.test_service_catalog.base import BaseTest @@ -7,7 +9,8 @@ class PortfolioCreateTestCase(BaseTest): def setUp(self): super(PortfolioCreateTestCase, self).setUp() - self.data = {'name': 'new portfolio'} + self.data = {'name': 'new portfolio', + "permission": FormUtils.get_default_permission_for_operation(),} def _create_portfolio(self, data=None, parent_portfolio=None, get_status=200, post_status=302): data = data if data else self.data @@ -29,4 +32,4 @@ def test_customer_cannot_create_portfolio(self): def test_cannot_create_portfolio_when_logout(self): self.client.logout() - self._create_portfolio(get_status=302, post_status=302) + self._create_portfolio(get_status=302, post_status=302) \ No newline at end of file diff --git a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_portfolio/test_edit.py b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_portfolio/test_edit.py index 18c7c32ef..0537f186e 100644 --- a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_portfolio/test_edit.py +++ b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_portfolio/test_edit.py @@ -1,5 +1,6 @@ from django.urls import reverse +from service_catalog.forms.form_utils import FormUtils from tests.test_service_catalog.base import BaseTest @@ -8,7 +9,8 @@ class PortfolioEditTestCase(BaseTest): def setUp(self): super(PortfolioEditTestCase, self).setUp() self.data = { - 'name': 'updated' + 'name': 'updated', + "permission": FormUtils.get_default_permission_for_operation(), } def _edit_portfolio(self, data=None, get_status=200, post_status=302): @@ -20,8 +22,7 @@ def _edit_portfolio(self, data=None, get_status=200, post_status=302): self.assertEqual(post_status, response.status_code) self.portfolio_test_1.refresh_from_db() if get_status == 200 and post_status == 302: - for key, value in data.items(): - self.assertEqual(self.portfolio_test_1.__dict__[key], value) + self.assertEqual("updated", self.portfolio_test_1.name) def test_admin_can_edit_portfolio(self): self._edit_portfolio() @@ -32,4 +33,4 @@ def test_customer_cannot_edit_portfolio(self): def test_cannot_edit_portfolio_when_logout(self): self.client.logout() - self._edit_portfolio(get_status=302, post_status=302) + self._edit_portfolio(get_status=302, post_status=302) \ No newline at end of file diff --git a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_services/test_create.py b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_services/test_create.py index 5390f361c..8e1626378 100644 --- a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_services/test_create.py +++ b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_services/test_create.py @@ -5,6 +5,7 @@ from django.core.files.uploadedfile import InMemoryUploadedFile from django.urls import reverse +from service_catalog.forms.form_utils import FormUtils from service_catalog.models import Service from tests.test_service_catalog.base import BaseTest @@ -21,6 +22,7 @@ def test_create_service(self): "description": "a new service", "job_template": self.job_template_test.id, "job_template_timeout": 60, + "permission": FormUtils.get_default_permission_for_operation() } response = self.client.get(self.url) self.assertEqual(200, response.status_code) @@ -43,7 +45,8 @@ def test_create_service_with_image(self): "description": "a new service", "job_template": self.job_template_test.id, "job_template_timeout": 60, - "image": image + "image": image, + "permission": FormUtils.get_default_permission_for_operation() } number_service_before = Service.objects.all().count() response = self.client.post(self.url, data=data, format="multipart") @@ -57,4 +60,4 @@ def test_create_service_with_image(self): except ValueError: self.fail("Image not set") # cleanup image after the test - new_service_with_image.image.delete() + new_service_with_image.image.delete() \ No newline at end of file diff --git a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_services/test_edit.py b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_services/test_edit.py index 8c1775668..16c4fc4b0 100644 --- a/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_services/test_edit.py +++ b/tests/test_service_catalog/test_views/test_admin/test_tools/test_catalog/test_services/test_edit.py @@ -1,5 +1,6 @@ from django.urls import reverse +from service_catalog.forms.form_utils import FormUtils from service_catalog.models import Service from tests.test_service_catalog.base import BaseTest @@ -15,7 +16,8 @@ def setUp(self): self.data = { "name": "service-test-updated", "description": "description-of-service-test-updated", - "enabled": False + "enabled": False, + "permission": FormUtils.get_default_permission_for_operation() } def test_admin_can_edit_service(self): @@ -50,4 +52,4 @@ def test_hide_service_after_disabled(self): self.assertEqual(response.context["service_list"].count(), service_count - 1) response = self.client.get(reverse("service_catalog:create_operation_list", kwargs={'service_id': self.service_test.id})) - self.assertEqual(len(response.context["table"].data.data), 0) + self.assertEqual(len(response.context["table"].data.data), 0) \ No newline at end of file diff --git a/tests/test_service_catalog/test_views/test_customer/test_catalog/test_catalog.py b/tests/test_service_catalog/test_views/test_customer/test_catalog/test_catalog.py index 957b30fe2..77698a1b7 100644 --- a/tests/test_service_catalog/test_views/test_customer/test_catalog/test_catalog.py +++ b/tests/test_service_catalog/test_views/test_customer/test_catalog/test_catalog.py @@ -1,5 +1,7 @@ +from django.contrib.contenttypes.models import ContentType from django.urls import reverse +from profiles.models import Permission from service_catalog.models import Request, Service, RequestMessage, Portfolio, Operation, OperationType from tests.test_service_catalog.base_test_request import BaseTestRequest @@ -10,6 +12,10 @@ def setUp(self): super(TestCustomerCatalogViews, self).setUp() self.client.login(username=self.standard_user, password=self.common_password) + operation_content_type = ContentType.objects.get_for_model(Operation) + self.is_admin_perm, _ = Permission.objects.get_or_create(content_type=operation_content_type, + codename="is_admin_operation") + def test_customer_list_service_in_root(self): url = reverse('service_catalog:service_catalog_list') response = self.client.get(url) @@ -122,16 +128,16 @@ def test_create_request_with_a_comment(self): self.assertEqual(created_request.comments.first().sender, self.standard_user) def test_customer_cannot_create_request_on_admin_only_operation(self): + admin_create_operation = Operation.objects.create(name="create admin", service=self.service_test, job_template=self.job_template_test, - is_admin_operation=True, - process_timeout_second=20) + process_timeout_second=20, + permission=self.is_admin_perm) # add a second create operation to avoid being redirected directly to the unique operation form Operation.objects.create(name="create non admin", service=self.service_test, job_template=self.job_template_test, - is_admin_operation=False, type=OperationType.CREATE, process_timeout_second=20) self.client.force_login(user=self.standard_user) @@ -162,16 +168,16 @@ def test_customer_cannot_create_request_on_admin_only_operation(self): self.assertEqual(403, response.status_code) def test_user_cannot_list_admin_create_operation(self): + Operation.objects.create(name="second create admin", service=self.service_test, job_template=self.job_template_test, - is_admin_operation=True, + permission=self.is_admin_perm, type=OperationType.CREATE, process_timeout_second=20) Operation.objects.create(name="third create non admin", service=self.service_test, job_template=self.job_template_test, - is_admin_operation=False, type=OperationType.CREATE, process_timeout_second=20) self.client.force_login(user=self.superuser) @@ -188,4 +194,4 @@ def test_user_cannot_list_admin_create_operation(self): response = self.client.get(url) self.assertEqual(response.status_code, 200) # standard user get all create operation except the admin protected one - self.assertEqual(response.context_data["operation_list"].count(), 2) + self.assertEqual(response.context_data["operation_list"].count(), 2) \ No newline at end of file diff --git a/tests/test_service_catalog/test_views/test_customer/test_instance/test_instance_request_operation.py b/tests/test_service_catalog/test_views/test_customer/test_instance/test_instance_request_operation.py index d6f757ebc..fc366636e 100644 --- a/tests/test_service_catalog/test_views/test_customer/test_instance/test_instance_request_operation.py +++ b/tests/test_service_catalog/test_views/test_customer/test_instance/test_instance_request_operation.py @@ -1,6 +1,8 @@ +from django.contrib.contenttypes.models import ContentType from django.urls import reverse -from service_catalog.models import Request, RequestMessage, Doc +from profiles.models import Permission +from service_catalog.models import Request, RequestMessage, Doc, Operation from service_catalog.models.instance import InstanceState from tests.test_service_catalog.base_test_request import BaseTestRequest @@ -55,7 +57,10 @@ def test_cannot_request_non_valid_operation(self): def test_customer_cannot_request_admin_operation(self): # set an operation to be admin only - self.update_operation_test.is_admin_operation = True + operation_content_type = ContentType.objects.get_for_model(Operation) + self.update_operation_test.permission, _ = Permission.objects.get_or_create( + content_type=operation_content_type, + codename="is_admin_operation") self.update_operation_test.save() args = { 'instance_id': self.test_instance.id, @@ -153,4 +158,4 @@ def test_cannot_request_non_available_instance_because_of_when(self): response = self.client.get(url) self.assertEqual(200, response.status_code) response = self.client.post(url, data=data) - self.assertEqual(302, response.status_code) + self.assertEqual(302, response.status_code) \ No newline at end of file From 0bd813555e7035959189f3d140e8db17b3b52069 Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Fri, 13 Dec 2024 15:35:01 +0100 Subject: [PATCH 08/11] add new test for bulk perm update on service and portfolio --- service_catalog/models/portfolio.py | 15 +++++++++-- tests/test_service_catalog/base.py | 6 +++++ .../test_models/test_portfolio.py | 26 +++++++++++++++++++ .../test_models/test_service.py | 17 ++++++++++++ 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 tests/test_service_catalog/test_models/test_portfolio.py create mode 100644 tests/test_service_catalog/test_models/test_service.py diff --git a/service_catalog/models/portfolio.py b/service_catalog/models/portfolio.py index cc4a40fad..2118d4774 100644 --- a/service_catalog/models/portfolio.py +++ b/service_catalog/models/portfolio.py @@ -1,8 +1,12 @@ +import logging + from django.db.models import ForeignKey, SET_NULL, CharField, ImageField from django.urls import reverse_lazy from Squest.utils.squest_model import SquestModel +from profiles.models import Permission +logger = logging.getLogger(__name__) class Portfolio(SquestModel): name = CharField(max_length=100) @@ -36,5 +40,12 @@ def delete(self, using=None, keep_parents=False): super(Portfolio, self).delete(using, keep_parents) def bulk_set_permission_on_operation(self, target_permission): - for service in self.service_list.all(): - service.bulk_set_permission_on_operation(target_permission) \ No newline at end of file + from service_catalog.models import Operation + logger.debug(f"Bulk edit permission on portfolio {self.name} to permission {target_permission}") + # check if all permission are already set to the target perm + all_permission_current_portfolio = Permission.objects.filter(operation__service__parent_portfolio=self).distinct() + # if the target perm is already the one used we do nothing + if all_permission_current_portfolio.count() == 1: + if all_permission_current_portfolio.first() == target_permission: + return + Operation.objects.filter(service__parent_portfolio=self).update(permission=target_permission) \ No newline at end of file diff --git a/tests/test_service_catalog/base.py b/tests/test_service_catalog/base.py index 2e2ff229f..9fe1353a4 100644 --- a/tests/test_service_catalog/base.py +++ b/tests/test_service_catalog/base.py @@ -1,4 +1,6 @@ import tempfile + +from django.contrib.contenttypes.models import ContentType from django.test.testcases import TransactionTestCase from django.contrib.auth.models import User from django.test import TestCase @@ -369,6 +371,10 @@ def setUp(self): process_timeout_second=30 ) + operation_content_type = ContentType.objects.get_for_model(Operation) + self.admin_operation, _ = Permission.objects.get_or_create( + content_type=operation_content_type, codename="is_admin_operation") + # --------------------------------------------------- # Small job template # --------------------------------------------------- diff --git a/tests/test_service_catalog/test_models/test_portfolio.py b/tests/test_service_catalog/test_models/test_portfolio.py new file mode 100644 index 000000000..a76563c7a --- /dev/null +++ b/tests/test_service_catalog/test_models/test_portfolio.py @@ -0,0 +1,26 @@ +from service_catalog.forms import FormUtils +from test_service_catalog.base_test_request import BaseTestRequest + + +class TestPortfolio(BaseTestRequest): + + def setUp(self): + super(TestPortfolio, self).setUp() + + def test_bulk_set_permission_on_operation(self): + self.service_test.parent_portfolio = self.portfolio_test_1 + self.service_test.save() + self.service_test_2.parent_portfolio = self.portfolio_test_1 + self.service_test_2.save() + + for current_perm in self.service_test.operations.values_list("permission", flat=True): + self.assertEqual(current_perm, FormUtils.get_default_permission_for_operation()) + for current_perm in self.service_test_2.operations.values_list("permission", flat=True): + self.assertEqual(current_perm, FormUtils.get_default_permission_for_operation()) + + # apply new perm + self.portfolio_test_1.bulk_set_permission_on_operation(self.admin_operation) + for current_perm in self.service_test.operations.values_list("permission", flat=True): + self.assertEqual(current_perm, self.admin_operation.id) + for current_perm in self.service_test_2.operations.values_list("permission", flat=True): + self.assertEqual(current_perm, self.admin_operation.id) \ No newline at end of file diff --git a/tests/test_service_catalog/test_models/test_service.py b/tests/test_service_catalog/test_models/test_service.py new file mode 100644 index 000000000..91b48850a --- /dev/null +++ b/tests/test_service_catalog/test_models/test_service.py @@ -0,0 +1,17 @@ +from service_catalog.forms import FormUtils +from test_service_catalog.base_test_request import BaseTestRequest + + +class TestService(BaseTestRequest): + + def setUp(self): + super(TestService, self).setUp() + + def test_bulk_set_permission_on_operation(self): + for current_perm in self.service_test.operations.values_list("permission", flat=True): + self.assertEqual(current_perm, FormUtils.get_default_permission_for_operation()) + + # apply new perm + self.service_test.bulk_set_permission_on_operation(self.admin_operation) + for current_perm in self.service_test.operations.values_list("permission", flat=True): + self.assertEqual(current_perm, self.admin_operation.id) \ No newline at end of file From bb106639581439f9e65b222f23a02287efc1a042 Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Fri, 13 Dec 2024 15:50:28 +0100 Subject: [PATCH 09/11] fix instance details page when instance has no service --- service_catalog/models/instance.py | 2 ++ service_catalog/views/instance.py | 4 ---- templates/service_catalog/instance_detail.html | 17 +++++++++-------- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/service_catalog/models/instance.py b/service_catalog/models/instance.py index f58a15450..85f8df1dc 100644 --- a/service_catalog/models/instance.py +++ b/service_catalog/models/instance.py @@ -115,6 +115,8 @@ def __str__(self): @property def docs(self): filtered_doc = list() + if self.service is None: + return filtered_doc from service_catalog.api.serializers import InstanceSerializer for doc in self.service.docs.all(): context = { diff --git a/service_catalog/views/instance.py b/service_catalog/views/instance.py index d60bdce37..e3f368af7 100644 --- a/service_catalog/views/instance.py +++ b/service_catalog/views/instance.py @@ -106,10 +106,6 @@ def get_context_data(self, **kwargs): type__in=[OperationType.UPDATE, OperationType.DELETE]) - # TODO: service form - # TODO: portfolio form - # TODO: tests - # filter operation with when condition for operation in operations.all(): if not operation.when_instance_authorized(self.object): diff --git a/templates/service_catalog/instance_detail.html b/templates/service_catalog/instance_detail.html index 0c904f498..8e4a0a53c 100644 --- a/templates/service_catalog/instance_detail.html +++ b/templates/service_catalog/instance_detail.html @@ -40,17 +40,18 @@

    {{ object.name }}

    {{ object.id }}
  • + {% if object.service %}
  • Service {% has_perm request.user "service_catalog.change_service" object.service as can_edit_service %} - - {% if can_edit_service %} - {{ object.service.name }} - {% else %} - {{ object.service.name }} - {% endif %} + {% if can_edit_service %} + {{ object.service.name }} + {% else %} + {{ object.service.name }} + {% endif %}
  • + {% endif %}
  • State {{ object.get_state_display }} @@ -184,4 +185,4 @@

    Admin spec

    {% endblock %} {% block custom_script %} -{% endblock %} +{% endblock %} \ No newline at end of file From b730d28484fbf71e343cc6b4481a181f3421615a Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Fri, 13 Dec 2024 16:23:18 +0100 Subject: [PATCH 10/11] commit review --- Squest/utils/squest_rbac.py | 6 ++---- ...alter_operation_options_operation_permission.py | 4 ++-- service_catalog/models/operations.py | 3 +-- service_catalog/views/instance.py | 2 -- tests/test_service_catalog/base.py | 2 +- .../test_request/test_operation_request_create.py | 2 +- .../test_api/test_urls/test_instance/test_crud.py | 9 ++------- .../test_models/test_portfolio.py | 4 ++-- .../test_models/test_service.py | 4 ++-- .../test_urls/test_instance/test_crud.py | 12 +++--------- .../test_service_catalog/test_urls/test_service.py | 14 +++++--------- .../test_customer/test_catalog/test_catalog.py | 9 ++------- .../test_instance_request_operation.py | 9 ++------- 13 files changed, 25 insertions(+), 55 deletions(-) diff --git a/Squest/utils/squest_rbac.py b/Squest/utils/squest_rbac.py index 2b4b3dc85..836a592ac 100644 --- a/Squest/utils/squest_rbac.py +++ b/Squest/utils/squest_rbac.py @@ -28,10 +28,8 @@ def has_perm(self, user_obj, perm, obj=None): if not user_obj.is_authenticated: return False - try: - app_label, codename = perm.split(".") - except Exception as test: - print(test) + + app_label, codename = perm.split(".") if obj is None: key = f"{user_obj.id}_{perm}" diff --git a/service_catalog/migrations/0044_alter_operation_options_operation_permission.py b/service_catalog/migrations/0044_alter_operation_options_operation_permission.py index bad325d1c..6df8350c2 100644 --- a/service_catalog/migrations/0044_alter_operation_options_operation_permission.py +++ b/service_catalog/migrations/0044_alter_operation_options_operation_permission.py @@ -16,9 +16,9 @@ def set_perm_to_operations(apps, schema_editor): ContentType = apps.get_model('contenttypes', 'ContentType') operation_content_type = ContentType.objects.get_for_model(Operation) - is_admin_operation, _ = Permission.objects.get_or_create(codename="is_admin_operation", content_type=operation_content_type) + view_admin_operation, _ = Permission.objects.get_or_create(codename="view_admin_operation", content_type=operation_content_type) view_operation, _ = Permission.objects.get_or_create(codename="view_operation", content_type=operation_content_type) - Operation.objects.filter(is_admin_operation=True).update(permission=is_admin_operation) + Operation.objects.filter(is_admin_operation=True).update(permission=view_admin_operation) Operation.objects.filter(is_admin_operation=False).update(permission=view_operation) diff --git a/service_catalog/models/operations.py b/service_catalog/models/operations.py index 1f2ce9c62..070e73d95 100644 --- a/service_catalog/models/operations.py +++ b/service_catalog/models/operations.py @@ -1,6 +1,6 @@ from django.core.exceptions import ValidationError from django.db.models import CharField, ForeignKey, BooleanField, IntegerField, CASCADE, SET_NULL, JSONField, \ - SET_DEFAULT, Q, PROTECT + PROTECT from django.db.models.signals import post_save, pre_save, post_delete from django.dispatch import receiver from django.urls import reverse @@ -10,7 +10,6 @@ from Squest.utils.plugin_controller import PluginController from Squest.utils.squest_model import SquestModel from profiles.models import Permission - from service_catalog.models.job_templates import JobTemplate from service_catalog.models.operation_type import OperationType from service_catalog.models.services import Service diff --git a/service_catalog/views/instance.py b/service_catalog/views/instance.py index e3f368af7..30d96deb8 100644 --- a/service_catalog/views/instance.py +++ b/service_catalog/views/instance.py @@ -1,5 +1,4 @@ import logging -from gc import enable from django.contrib import messages from django.contrib.auth.decorators import login_required @@ -26,7 +25,6 @@ from service_catalog.models.operations import Operation from service_catalog.models.support import Support from service_catalog.tables.instance_tables import InstanceTable -from service_catalog.tables.operation_tables import OperationTableFromInstanceDetails from service_catalog.tables.request_tables import RequestTable from service_catalog.tables.support_tables import SupportTable diff --git a/tests/test_service_catalog/base.py b/tests/test_service_catalog/base.py index 9fe1353a4..aa15e704a 100644 --- a/tests/test_service_catalog/base.py +++ b/tests/test_service_catalog/base.py @@ -373,7 +373,7 @@ def setUp(self): operation_content_type = ContentType.objects.get_for_model(Operation) self.admin_operation, _ = Permission.objects.get_or_create( - content_type=operation_content_type, codename="is_admin_operation") + content_type=operation_content_type, codename="view_admin_operation") # --------------------------------------------------- # Small job template diff --git a/tests/test_service_catalog/test_api/test_request/test_operation_request_create.py b/tests/test_service_catalog/test_api/test_request/test_operation_request_create.py index 6f0a2b37e..ae285a6ea 100644 --- a/tests/test_service_catalog/test_api/test_request/test_operation_request_create.py +++ b/tests/test_service_catalog/test_api/test_request/test_operation_request_create.py @@ -42,7 +42,7 @@ def test_cannot_create_with_disabled_operation(self): def test_customer_cannot_create_an_admin_operation(self): self.client.force_login(self.standard_user) - self.update_operation_test.is_admin_operation = True + self.update_operation_test.permission = self.admin_operation self.update_operation_test.save() request_count = Request.objects.count() response = self.client.post(self.url, data=self.data, format='json') diff --git a/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py b/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py index 07500cb9b..0424cd5c6 100644 --- a/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py +++ b/tests/test_service_catalog/test_api/test_urls/test_instance/test_crud.py @@ -1,7 +1,4 @@ -from django.contrib.contenttypes.models import ContentType - -from profiles.models import Permission -from service_catalog.models import CustomLink, InstanceState, Operation +from service_catalog.models import InstanceState from tests.permission_endpoint import TestPermissionEndpoint, TestingGetContextView, TestingPostContextView, \ TestingPatchContextView, TestingPutContextView, TestingDeleteContextView from tests.test_service_catalog.base_test_request import BaseTestRequestAPI @@ -15,9 +12,7 @@ def setUp(self): self.test_instance_2.service = self.update_operation_test_2.service self.test_instance.save() self.test_instance_2.save() - operation_content_type = ContentType.objects.get_for_model(Operation) - self.update_operation_test_2.permission, _ = Permission.objects.get_or_create(content_type=operation_content_type, - codename="is_admin_operation") + self.update_operation_test_2.permission = self.admin_operation self.update_operation_test_2.save() diff --git a/tests/test_service_catalog/test_models/test_portfolio.py b/tests/test_service_catalog/test_models/test_portfolio.py index a76563c7a..77c639998 100644 --- a/tests/test_service_catalog/test_models/test_portfolio.py +++ b/tests/test_service_catalog/test_models/test_portfolio.py @@ -1,5 +1,5 @@ -from service_catalog.forms import FormUtils -from test_service_catalog.base_test_request import BaseTestRequest +from service_catalog.forms.form_utils import FormUtils +from tests.test_service_catalog.base_test_request import BaseTestRequest class TestPortfolio(BaseTestRequest): diff --git a/tests/test_service_catalog/test_models/test_service.py b/tests/test_service_catalog/test_models/test_service.py index 91b48850a..17e39ed3f 100644 --- a/tests/test_service_catalog/test_models/test_service.py +++ b/tests/test_service_catalog/test_models/test_service.py @@ -1,5 +1,5 @@ -from service_catalog.forms import FormUtils -from test_service_catalog.base_test_request import BaseTestRequest +from service_catalog.forms.form_utils import FormUtils +from tests.test_service_catalog.base_test_request import BaseTestRequest class TestService(BaseTestRequest): diff --git a/tests/test_service_catalog/test_urls/test_instance/test_crud.py b/tests/test_service_catalog/test_urls/test_instance/test_crud.py index 389697a59..f413d2907 100644 --- a/tests/test_service_catalog/test_urls/test_instance/test_crud.py +++ b/tests/test_service_catalog/test_urls/test_instance/test_crud.py @@ -1,11 +1,8 @@ import json -from django.contrib.contenttypes.models import ContentType - -from profiles.models import Permission -from service_catalog.models import InstanceState, Operation -from tests.test_service_catalog.base_test_request import BaseTestRequest +from service_catalog.models import InstanceState from tests.permission_endpoint import TestingGetContextView, TestingPostContextView, TestPermissionEndpoint +from tests.test_service_catalog.base_test_request import BaseTestRequest class TestServiceCatalogInstancePermissionsCRUDViews(BaseTestRequest, TestPermissionEndpoint): @@ -17,10 +14,7 @@ def setUp(self): self.test_instance.save() self.test_instance_2.save() - operation_content_type = ContentType.objects.get_for_model(Operation) - self.update_operation_test_2.permission, _ = Permission.objects.get_or_create( - content_type=operation_content_type, - codename="is_admin_operation") + self.update_operation_test_2.permission = self.admin_operation self.update_operation_test_2.save() def test_crud_views(self): diff --git a/tests/test_service_catalog/test_urls/test_service.py b/tests/test_service_catalog/test_urls/test_service.py index f7e9f9c05..1e8e802cb 100644 --- a/tests/test_service_catalog/test_urls/test_service.py +++ b/tests/test_service_catalog/test_urls/test_service.py @@ -1,17 +1,13 @@ -from django.contrib.contenttypes.models import ContentType - from profiles.models import Permission -from service_catalog.models import Operation -from tests.test_service_catalog.base_test_request import BaseTestRequest -from tests.permission_endpoint import TestingGetContextView, TestingPostContextView, TestPermissionEndpoint from service_catalog.forms.form_utils import FormUtils +from tests.permission_endpoint import TestingGetContextView, TestingPostContextView, TestPermissionEndpoint +from tests.test_service_catalog.base_test_request import BaseTestRequest + class TestServiceCatalogServicePermissionsViews(BaseTestRequest, TestPermissionEndpoint): def setUp(self): super().setUp() - operation_content_type = ContentType.objects.get_for_model(Operation) - self.update_operation_test_2.permission, _ = Permission.objects.get_or_create(content_type=operation_content_type, - codename="is_admin_operation") + self.update_operation_test_2.permission = self.admin_operation self.update_operation_test_2.save() def test_service_views(self): testing_view_list = [ @@ -68,7 +64,7 @@ def test_service_views(self): def test_request_service_views(self): self.empty_role.permissions.add( Permission.objects.get(content_type__app_label='profiles', codename='consume_quota_scope')) - self.create_operation_test_2.is_admin_operation = True + self.create_operation_test_2.permission = self.admin_operation self.create_operation_test_2.save() testing_view_list = [ TestingGetContextView( diff --git a/tests/test_service_catalog/test_views/test_customer/test_catalog/test_catalog.py b/tests/test_service_catalog/test_views/test_customer/test_catalog/test_catalog.py index 77698a1b7..7e8b7a748 100644 --- a/tests/test_service_catalog/test_views/test_customer/test_catalog/test_catalog.py +++ b/tests/test_service_catalog/test_views/test_customer/test_catalog/test_catalog.py @@ -1,7 +1,5 @@ -from django.contrib.contenttypes.models import ContentType from django.urls import reverse -from profiles.models import Permission from service_catalog.models import Request, Service, RequestMessage, Portfolio, Operation, OperationType from tests.test_service_catalog.base_test_request import BaseTestRequest @@ -12,9 +10,6 @@ def setUp(self): super(TestCustomerCatalogViews, self).setUp() self.client.login(username=self.standard_user, password=self.common_password) - operation_content_type = ContentType.objects.get_for_model(Operation) - self.is_admin_perm, _ = Permission.objects.get_or_create(content_type=operation_content_type, - codename="is_admin_operation") def test_customer_list_service_in_root(self): url = reverse('service_catalog:service_catalog_list') @@ -133,7 +128,7 @@ def test_customer_cannot_create_request_on_admin_only_operation(self): service=self.service_test, job_template=self.job_template_test, process_timeout_second=20, - permission=self.is_admin_perm) + permission=self.admin_operation) # add a second create operation to avoid being redirected directly to the unique operation form Operation.objects.create(name="create non admin", service=self.service_test, @@ -172,7 +167,7 @@ def test_user_cannot_list_admin_create_operation(self): Operation.objects.create(name="second create admin", service=self.service_test, job_template=self.job_template_test, - permission=self.is_admin_perm, + permission=self.admin_operation, type=OperationType.CREATE, process_timeout_second=20) Operation.objects.create(name="third create non admin", diff --git a/tests/test_service_catalog/test_views/test_customer/test_instance/test_instance_request_operation.py b/tests/test_service_catalog/test_views/test_customer/test_instance/test_instance_request_operation.py index fc366636e..1014e5c30 100644 --- a/tests/test_service_catalog/test_views/test_customer/test_instance/test_instance_request_operation.py +++ b/tests/test_service_catalog/test_views/test_customer/test_instance/test_instance_request_operation.py @@ -1,8 +1,6 @@ -from django.contrib.contenttypes.models import ContentType from django.urls import reverse -from profiles.models import Permission -from service_catalog.models import Request, RequestMessage, Doc, Operation +from service_catalog.models import Request, RequestMessage, Doc from service_catalog.models.instance import InstanceState from tests.test_service_catalog.base_test_request import BaseTestRequest @@ -57,10 +55,7 @@ def test_cannot_request_non_valid_operation(self): def test_customer_cannot_request_admin_operation(self): # set an operation to be admin only - operation_content_type = ContentType.objects.get_for_model(Operation) - self.update_operation_test.permission, _ = Permission.objects.get_or_create( - content_type=operation_content_type, - codename="is_admin_operation") + self.update_operation_test.permission = self.admin_operation self.update_operation_test.save() args = { 'instance_id': self.test_instance.id, From 3ea53345e4cde27be7ff144a822dec580cc420d9 Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Mon, 16 Dec 2024 14:38:01 +0100 Subject: [PATCH 11/11] Release 2.7.0 --- CHANGELOG.md | 19 +++++++++++++++++++ Squest/version.py | 2 +- docs/manual/service_catalog/operation.md | 1 + pyproject.toml | 2 +- service_catalog/forms/operation_forms.py | 3 ++- 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dcca77d52..7c8603c09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +# 2.7.0 2024-12-16 + +## Breaking changes ⚠ + +- drop support for docker compose v1 +- SurveyValidator form utils import switched from `from service_catalog.forms import SurveyValidator` to `from service_catalog.forms.form_utils import SurveyValidator` + +## Fix + +- Credential id set in operation was not sent to AWX + +## Enhancement + +- Add support of multiple workers to gunicorn to speedup Squest + +## Feature + +- Add permission on operation, service and portfolio + # 2.6.1 2024-11-15 ## Fix diff --git a/Squest/version.py b/Squest/version.py index 16aa1733b..ad9c4e38b 100644 --- a/Squest/version.py +++ b/Squest/version.py @@ -1,2 +1,2 @@ -__version__ = "2.7.0b" +__version__ = "2.7.0" VERSION = __version__ diff --git a/docs/manual/service_catalog/operation.md b/docs/manual/service_catalog/operation.md index 1f9a830ae..ace1fc54d 100644 --- a/docs/manual/service_catalog/operation.md +++ b/docs/manual/service_catalog/operation.md @@ -28,6 +28,7 @@ Operations of type "update" or "delete" can be then added to manage the lifecycl | Default diff mode | Default `False`. This is equivalent to Ansible's --diff mode in the CLI | | Default credential IDs | Comma separated list of credentials ID | | When | Ansible 'when' condition to make operation available to some instance spec condition | +| Permission | Set a permission required to view the operation. By default set to "view_operation" | ## Job template config diff --git a/pyproject.toml b/pyproject.toml index 836797f33..cc0c5c24e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "squest" -version = "2.7.0b" +version = "2.7.0" description = "Service catalog on top of Red Hat Ansible Automation Platform(RHAAP)/AWX (formerly known as Ansible Tower)" authors = ["Nicolas Marcq ", "Elias Boulharts "] license = "MIT" diff --git a/service_catalog/forms/operation_forms.py b/service_catalog/forms/operation_forms.py index 3543b17d5..456b4dbd6 100644 --- a/service_catalog/forms/operation_forms.py +++ b/service_catalog/forms/operation_forms.py @@ -15,7 +15,8 @@ class OperationForm(SquestModelForm): permission = ModelChoiceField(queryset=Permission.objects.filter(content_type__model="operation", content_type__app_label="service_catalog"), - initial=FormUtils.get_default_permission_for_operation) + initial=FormUtils.get_default_permission_for_operation, + help_text=Operation.permission.field.help_text) class Meta: model = Operation