diff --git a/backend/app_tests/api/test_api_compliance_assessments.py b/backend/app_tests/api/test_api_compliance_assessments.py index 780e71346..5bfba6189 100644 --- a/backend/app_tests/api/test_api_compliance_assessments.py +++ b/backend/app_tests/api/test_api_compliance_assessments.py @@ -1,7 +1,7 @@ import pytest from rest_framework.test import APIClient from core.models import ComplianceAssessment, Framework -from core.models import Project +from core.models import Perimeter from iam.models import Folder from test_utils import EndpointTestsQueries @@ -29,7 +29,7 @@ def test_get_compliance_assessments(self, authenticated_client): { "name": COMPLIANCE_ASSESSMENT_NAME, "description": COMPLIANCE_ASSESSMENT_DESCRIPTION, - "project": Project.objects.create( + "perimeter": Perimeter.objects.create( name="test", folder=Folder.objects.create(name="test") ), "framework": Framework.objects.all()[0], @@ -46,7 +46,7 @@ def test_create_compliance_assessments(self): { "name": COMPLIANCE_ASSESSMENT_NAME, "description": COMPLIANCE_ASSESSMENT_DESCRIPTION, - "project": Project.objects.create( + "perimeter": Perimeter.objects.create( name="test", folder=Folder.objects.create(name="test") ).id, }, @@ -63,7 +63,7 @@ def test_update_compliance_assessments(self, authenticated_client): { "name": COMPLIANCE_ASSESSMENT_NAME, "description": COMPLIANCE_ASSESSMENT_DESCRIPTION, - "project": Project.objects.create( + "perimeter": Perimeter.objects.create( name="test", folder=Folder.objects.create(name="test") ), "framework": Framework.objects.all()[0], @@ -71,7 +71,7 @@ def test_update_compliance_assessments(self, authenticated_client): { "name": "new " + COMPLIANCE_ASSESSMENT_NAME, "description": "new " + COMPLIANCE_ASSESSMENT_DESCRIPTION, - "project": Project.objects.create( + "perimeter": Perimeter.objects.create( name="test2", folder=Folder.objects.create(name="test2") ).id, }, @@ -87,7 +87,7 @@ def test_delete_compliance_assessments(self, authenticated_client): ComplianceAssessment, { "name": COMPLIANCE_ASSESSMENT_NAME, - "project": Project.objects.create( + "perimeter": Perimeter.objects.create( name="test", folder=Folder.objects.create(name="test") ), "framework": Framework.objects.all()[0], @@ -103,7 +103,7 @@ def test_get_compliance_assessments(self, test): """test to get compliance assessments from the API with authentication""" EndpointTestsQueries.Auth.import_object(test.admin_client, "Framework") - project = Project.objects.create(name="test", folder=test.folder) + perimeter = Perimeter.objects.create(name="test", folder=test.folder) EndpointTestsQueries.Auth.get_object( test.client, @@ -113,16 +113,16 @@ def test_get_compliance_assessments(self, test): "name": COMPLIANCE_ASSESSMENT_NAME, "description": COMPLIANCE_ASSESSMENT_DESCRIPTION, "version": COMPLIANCE_ASSESSMENT_VERSION, - "project": project, + "perimeter": perimeter, "framework": Framework.objects.all()[0], }, { - "project": { - "id": str(project.id), - "str": project.folder.name + "/" + project.name, + "perimeter": { + "id": str(perimeter.id), + "str": perimeter.folder.name + "/" + perimeter.name, "folder": { - "id": str(project.folder.id), - "str": project.folder.name, + "id": str(perimeter.folder.id), + "str": perimeter.folder.name, }, }, "framework": { @@ -143,7 +143,7 @@ def test_create_compliance_assessments(self, test): """test to create compliance assessments with the API with authentication""" EndpointTestsQueries.Auth.import_object(test.admin_client, "Framework") - project = Project.objects.create(name="test", folder=test.folder) + perimeter = Perimeter.objects.create(name="test", folder=test.folder) EndpointTestsQueries.Auth.create_object( test.client, @@ -153,16 +153,16 @@ def test_create_compliance_assessments(self, test): "name": COMPLIANCE_ASSESSMENT_NAME, "description": COMPLIANCE_ASSESSMENT_DESCRIPTION, "version": COMPLIANCE_ASSESSMENT_VERSION, - "project": str(project.id), + "perimeter": str(perimeter.id), "framework": str(Framework.objects.all()[0].id), }, { - "project": { - "id": str(project.id), - "str": project.folder.name + "/" + project.name, + "perimeter": { + "id": str(perimeter.id), + "str": perimeter.folder.name + "/" + perimeter.name, "folder": { - "id": str(project.folder.id), - "str": project.folder.name, + "id": str(perimeter.folder.id), + "str": perimeter.folder.name, }, }, "framework": { @@ -185,8 +185,8 @@ def test_update_compliance_assessments(self, test): EndpointTestsQueries.Auth.import_object(test.admin_client, "Documents") EndpointTestsQueries.Auth.import_object(test.admin_client, "Framework") EndpointTestsQueries.Auth.import_object(test.admin_client, "Framework2") - project = Project.objects.create(name="test", folder=test.folder) - project2 = Project.objects.create( + perimeter = Perimeter.objects.create(name="test", folder=test.folder) + perimeter2 = Perimeter.objects.create( name="test2", folder=Folder.objects.create(name="test2") ) @@ -198,23 +198,23 @@ def test_update_compliance_assessments(self, test): "name": COMPLIANCE_ASSESSMENT_NAME, "description": COMPLIANCE_ASSESSMENT_DESCRIPTION, "version": COMPLIANCE_ASSESSMENT_VERSION, - "project": project, + "perimeter": perimeter, "framework": Framework.objects.all()[0], }, { "name": "new " + COMPLIANCE_ASSESSMENT_NAME, "description": "new " + COMPLIANCE_ASSESSMENT_DESCRIPTION, "version": COMPLIANCE_ASSESSMENT_VERSION + ".1", - "project": str(project2.id), + "perimeter": str(perimeter2.id), "framework": str(Framework.objects.all()[1].id), }, { - "project": { - "id": str(project.id), - "str": project.folder.name + "/" + project.name, + "perimeter": { + "id": str(perimeter.id), + "str": perimeter.folder.name + "/" + perimeter.name, "folder": { - "id": str(project.folder.id), - "str": project.folder.name, + "id": str(perimeter.folder.id), + "str": perimeter.folder.name, }, }, "framework": { @@ -235,7 +235,7 @@ def test_delete_compliance_assessments(self, test): """test to delete compliance assessments with the API with authentication""" EndpointTestsQueries.Auth.import_object(test.admin_client, "Framework") - project = Project.objects.create(name="test", folder=test.folder) + perimeter = Perimeter.objects.create(name="test", folder=test.folder) EndpointTestsQueries.Auth.delete_object( test.client, @@ -243,7 +243,7 @@ def test_delete_compliance_assessments(self, test): ComplianceAssessment, { "name": COMPLIANCE_ASSESSMENT_NAME, - "project": project, + "perimeter": perimeter, "framework": Framework.objects.all()[0], }, user_group=test.user_group, diff --git a/backend/app_tests/api/test_api_perimeters.py b/backend/app_tests/api/test_api_perimeters.py new file mode 100644 index 000000000..84e4b6f2b --- /dev/null +++ b/backend/app_tests/api/test_api_perimeters.py @@ -0,0 +1,173 @@ +import pytest +from rest_framework.test import APIClient +from core.models import Perimeter +from iam.models import Folder + +from test_utils import EndpointTestsQueries + +# Generic perimeter data for tests +PERIMETER_NAME = "Test Perimeter" +PERIMETER_DESCRIPTION = "Test Description" +PERIMETER_STATUS = ("in_prod", "Production") +PERIMETER_REFERENCE = "test:perimter" + + +@pytest.mark.django_db +class TestPerimetersUnauthenticated: + """Perform tests on Perimeters API endpoint without authentication""" + + client = APIClient() + + def test_get_perimeters(self): + """test to get perimeters from the API without authentication""" + + EndpointTestsQueries.get_object( + self.client, + "Perimeters", + Perimeter, + { + "name": PERIMETER_NAME, + "description": PERIMETER_DESCRIPTION, + "folder": Folder.objects.create(name="test"), + }, + ) + + def test_create_perimeters(self): + """test to create perimeters with the API without authentication""" + + EndpointTestsQueries.create_object( + self.client, + "Perimeters", + Perimeter, + { + "name": PERIMETER_NAME, + "description": PERIMETER_DESCRIPTION, + "folder": Folder.objects.create(name="test").id, + }, + ) + + def test_update_perimeters(self): + """test to update perimeters with the API without authentication""" + + EndpointTestsQueries.update_object( + self.client, + "Perimeters", + Perimeter, + { + "name": PERIMETER_NAME, + "description": PERIMETER_DESCRIPTION, + "folder": Folder.objects.create(name="test"), + }, + { + "name": "new " + PERIMETER_NAME, + "description": "new " + PERIMETER_DESCRIPTION, + }, + ) + + def test_delete_perimeters(self): + """test to delete perimeters with the API without authentication""" + + EndpointTestsQueries.delete_object( + self.client, + "Perimeters", + Perimeter, + {"name": PERIMETER_NAME, "folder": Folder.objects.create(name="test")}, + ) + + +@pytest.mark.django_db +class TestPerimetersAuthenticated: + """Perform tests on Perimeters API endpoint with authentication""" + + def test_get_perimeters(self, test): + """test to get perimeters from the API with authentication""" + + EndpointTestsQueries.Auth.get_object( + test.client, + "Perimeters", + Perimeter, + { + "name": PERIMETER_NAME, + "description": PERIMETER_DESCRIPTION, + "folder": test.folder, + "ref_id": PERIMETER_REFERENCE, + "lc_status": PERIMETER_STATUS[0], + }, + { + "folder": {"id": str(test.folder.id), "str": test.folder.name}, + "lc_status": PERIMETER_STATUS[1], + }, + user_group=test.user_group, + scope=str(test.folder), + ) + + def test_create_perimeters(self, test): + """test to create perimeters with the API with authentication""" + + EndpointTestsQueries.Auth.create_object( + test.client, + "Perimeters", + Perimeter, + { + "name": PERIMETER_NAME, + "description": PERIMETER_DESCRIPTION, + "folder": str(test.folder.id), + "ref_id": PERIMETER_REFERENCE, + "lc_status": PERIMETER_STATUS[0], + }, + { + "folder": {"id": str(test.folder.id), "str": test.folder.name}, + "lc_status": PERIMETER_STATUS[1], + }, + user_group=test.user_group, + scope=str(test.folder), + ) + + def test_update_perimeters(self, test): + """test to update perimeters with the API with authentication""" + + status = ("in_dev", "Development") + folder = Folder.objects.create(name="test2") + + EndpointTestsQueries.Auth.update_object( + test.client, + "Perimeters", + Perimeter, + { + "name": PERIMETER_NAME, + "description": PERIMETER_DESCRIPTION, + "folder": test.folder, + "ref_id": PERIMETER_REFERENCE, + "lc_status": PERIMETER_STATUS[0], + }, + { + "name": "new " + PERIMETER_NAME, + "description": "new " + PERIMETER_DESCRIPTION, + "folder": str(folder.id), + "ref_id": "new " + PERIMETER_REFERENCE, + "lc_status": status[0], + }, + { + "folder": {"id": str(test.folder.id), "str": test.folder.name}, + "lc_status": PERIMETER_STATUS[1], + }, + user_group=test.user_group, + ) + + def test_delete_perimeters(self, test): + """test to delete perimeters with the API with authentication""" + + EndpointTestsQueries.Auth.delete_object( + test.client, + "Perimeters", + Perimeter, + {"name": PERIMETER_NAME, "folder": test.folder}, + user_group=test.user_group, + ) + + def test_get_status_choices(self, test): + """test to get perimeters status choices from the API with authentication""" + + EndpointTestsQueries.Auth.get_object_options( + test.client, "Perimeters", "lc_status", Perimeter.PRJ_LC_STATUS + ) diff --git a/backend/app_tests/api/test_api_projects.py b/backend/app_tests/api/test_api_projects.py deleted file mode 100644 index 417d64dbe..000000000 --- a/backend/app_tests/api/test_api_projects.py +++ /dev/null @@ -1,173 +0,0 @@ -import pytest -from rest_framework.test import APIClient -from core.models import Project -from iam.models import Folder - -from test_utils import EndpointTestsQueries - -# Generic project data for tests -PROJECT_NAME = "Test Project" -PROJECT_DESCRIPTION = "Test Description" -PROJECT_STATUS = ("in_prod", "Production") -PROJECT_REFERENCE = "test:project" - - -@pytest.mark.django_db -class TestProjectsUnauthenticated: - """Perform tests on Projects API endpoint without authentication""" - - client = APIClient() - - def test_get_projects(self): - """test to get projects from the API without authentication""" - - EndpointTestsQueries.get_object( - self.client, - "Projects", - Project, - { - "name": PROJECT_NAME, - "description": PROJECT_DESCRIPTION, - "folder": Folder.objects.create(name="test"), - }, - ) - - def test_create_projects(self): - """test to create projects with the API without authentication""" - - EndpointTestsQueries.create_object( - self.client, - "Projects", - Project, - { - "name": PROJECT_NAME, - "description": PROJECT_DESCRIPTION, - "folder": Folder.objects.create(name="test").id, - }, - ) - - def test_update_projects(self): - """test to update projects with the API without authentication""" - - EndpointTestsQueries.update_object( - self.client, - "Projects", - Project, - { - "name": PROJECT_NAME, - "description": PROJECT_DESCRIPTION, - "folder": Folder.objects.create(name="test"), - }, - { - "name": "new " + PROJECT_NAME, - "description": "new " + PROJECT_DESCRIPTION, - }, - ) - - def test_delete_projects(self): - """test to delete projects with the API without authentication""" - - EndpointTestsQueries.delete_object( - self.client, - "Projects", - Project, - {"name": PROJECT_NAME, "folder": Folder.objects.create(name="test")}, - ) - - -@pytest.mark.django_db -class TestProjectsAuthenticated: - """Perform tests on Projects API endpoint with authentication""" - - def test_get_projects(self, test): - """test to get projects from the API with authentication""" - - EndpointTestsQueries.Auth.get_object( - test.client, - "Projects", - Project, - { - "name": PROJECT_NAME, - "description": PROJECT_DESCRIPTION, - "folder": test.folder, - "ref_id": PROJECT_REFERENCE, - "lc_status": PROJECT_STATUS[0], - }, - { - "folder": {"id": str(test.folder.id), "str": test.folder.name}, - "lc_status": PROJECT_STATUS[1], - }, - user_group=test.user_group, - scope=str(test.folder), - ) - - def test_create_projects(self, test): - """test to create projects with the API with authentication""" - - EndpointTestsQueries.Auth.create_object( - test.client, - "Projects", - Project, - { - "name": PROJECT_NAME, - "description": PROJECT_DESCRIPTION, - "folder": str(test.folder.id), - "ref_id": PROJECT_REFERENCE, - "lc_status": PROJECT_STATUS[0], - }, - { - "folder": {"id": str(test.folder.id), "str": test.folder.name}, - "lc_status": PROJECT_STATUS[1], - }, - user_group=test.user_group, - scope=str(test.folder), - ) - - def test_update_projects(self, test): - """test to update projects with the API with authentication""" - - status = ("in_dev", "Development") - folder = Folder.objects.create(name="test2") - - EndpointTestsQueries.Auth.update_object( - test.client, - "Projects", - Project, - { - "name": PROJECT_NAME, - "description": PROJECT_DESCRIPTION, - "folder": test.folder, - "ref_id": PROJECT_REFERENCE, - "lc_status": PROJECT_STATUS[0], - }, - { - "name": "new " + PROJECT_NAME, - "description": "new " + PROJECT_DESCRIPTION, - "folder": str(folder.id), - "ref_id": "new " + PROJECT_REFERENCE, - "lc_status": status[0], - }, - { - "folder": {"id": str(test.folder.id), "str": test.folder.name}, - "lc_status": PROJECT_STATUS[1], - }, - user_group=test.user_group, - ) - - def test_delete_projects(self, test): - """test to delete projects with the API with authentication""" - - EndpointTestsQueries.Auth.delete_object( - test.client, - "Projects", - Project, - {"name": PROJECT_NAME, "folder": test.folder}, - user_group=test.user_group, - ) - - def test_get_status_choices(self, test): - """test to get projects status choices from the API with authentication""" - - EndpointTestsQueries.Auth.get_object_options( - test.client, "Projects", "lc_status", Project.PRJ_LC_STATUS - ) diff --git a/backend/app_tests/api/test_api_requirement_assessments.py b/backend/app_tests/api/test_api_requirement_assessments.py index d837982cd..d8924025d 100644 --- a/backend/app_tests/api/test_api_requirement_assessments.py +++ b/backend/app_tests/api/test_api_requirement_assessments.py @@ -7,7 +7,7 @@ RequirementAssessment, Framework, ) -from core.models import Project, AppliedControl +from core.models import Perimeter, AppliedControl from iam.models import Folder from test_utils import EndpointTestsQueries @@ -39,7 +39,7 @@ def test_get_requirement_assessments(self, authenticated_client): "folder": folder, "compliance_assessment": ComplianceAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=folder), + perimeter=Perimeter.objects.create(name="test", folder=folder), framework=Framework.objects.all()[0], ), "requirement": RequirementNode.objects.create( @@ -77,7 +77,7 @@ def test_update_requirement_assessments(self, authenticated_client): "folder": folder, "compliance_assessment": ComplianceAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=folder), + perimeter=Perimeter.objects.create(name="test", folder=folder), framework=Framework.objects.all()[0], ), "requirement": RequirementNode.objects.create( @@ -102,7 +102,7 @@ def test_get_requirement_assessments(self, test): EndpointTestsQueries.Auth.import_object(test.admin_client, "Framework") compliance_assessment = ComplianceAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=test.folder), + perimeter=Perimeter.objects.create(name="test", folder=test.folder), framework=Framework.objects.all()[0], ) @@ -177,7 +177,7 @@ def test_create_requirement_assessments(self, test): EndpointTestsQueries.Auth.import_object(test.admin_client, "Framework") compliance_assessment = ComplianceAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=test.folder), + perimeter=Perimeter.objects.create(name="test", folder=test.folder), framework=Framework.objects.all()[0], ) applied_control = AppliedControl.objects.create(name="test", folder=test.folder) @@ -213,12 +213,12 @@ def test_update_requirement_assessments(self, test): folder = Folder.objects.create(name="test2") compliance_assessment = ComplianceAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=test.folder), + perimeter=Perimeter.objects.create(name="test", folder=test.folder), framework=Framework.objects.all()[0], ) compliance_assessment2 = ComplianceAssessment.objects.create( name="test2", - project=Project.objects.create(name="test2", folder=folder), + perimeter=Perimeter.objects.create(name="test2", folder=folder), framework=Framework.objects.all()[0], ) applied_control = AppliedControl.objects.create(name="test", folder=folder) diff --git a/backend/app_tests/api/test_api_risk_acceptances.py b/backend/app_tests/api/test_api_risk_acceptances.py index c0157057f..b09a81440 100644 --- a/backend/app_tests/api/test_api_risk_acceptances.py +++ b/backend/app_tests/api/test_api_risk_acceptances.py @@ -2,7 +2,7 @@ from rest_framework.test import APIClient from core.models import User from core.models import ( - Project, + Perimeter, RiskAcceptance, RiskScenario, RiskMatrix, @@ -139,7 +139,7 @@ def test_create_risk_acceptances(self, test): description="test description", risk_assessment=RiskAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=test.folder), + perimeter=Perimeter.objects.create(name="test", folder=test.folder), risk_matrix=RiskMatrix.objects.create(name="test", folder=test.folder), ), ) @@ -191,7 +191,7 @@ def test_update_risk_acceptances(self, test): description="test description", risk_assessment=RiskAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=folder), + perimeter=Perimeter.objects.create(name="test", folder=folder), risk_matrix=RiskMatrix.objects.create(name="test", folder=folder), ), ) diff --git a/backend/app_tests/api/test_api_risk_assessments.py b/backend/app_tests/api/test_api_risk_assessments.py index 4afcb6fd9..4fce37db4 100644 --- a/backend/app_tests/api/test_api_risk_assessments.py +++ b/backend/app_tests/api/test_api_risk_assessments.py @@ -1,11 +1,11 @@ import pytest from rest_framework.test import APIClient -from core.models import Project, RiskAssessment, RiskMatrix +from core.models import Perimeter, RiskAssessment, RiskMatrix from iam.models import Folder from test_utils import EndpointTestsQueries -# Generic project data for tests +# Generic perimeter data for tests RISK_ASSESSMENT_NAME = "Test risk_assessment" RISK_ASSESSMENT_DESCRIPTION = "Test Description" RISK_ASSESSMENT_VERSION = "1.0" @@ -27,7 +27,7 @@ def test_get_risk_acceptances(self): { "name": RISK_ASSESSMENT_NAME, "description": RISK_ASSESSMENT_DESCRIPTION, - "project": Project.objects.create( + "perimeter": Perimeter.objects.create( name="test", folder=Folder.objects.create(name="test") ), "risk_matrix": RiskMatrix.objects.create( @@ -46,7 +46,7 @@ def test_create_risk_assessments(self): { "name": RISK_ASSESSMENT_NAME, "description": RISK_ASSESSMENT_DESCRIPTION, - "project": Project.objects.create( + "perimeter": Perimeter.objects.create( name="test", folder=Folder.objects.create(name="test") ).id, }, @@ -62,7 +62,7 @@ def test_update_risk_assessments(self): { "name": RISK_ASSESSMENT_NAME, "description": RISK_ASSESSMENT_DESCRIPTION, - "project": Project.objects.create( + "perimeter": Perimeter.objects.create( name="test", folder=Folder.objects.create(name="test") ), "risk_matrix": RiskMatrix.objects.create( @@ -72,7 +72,7 @@ def test_update_risk_assessments(self): { "name": "new " + RISK_ASSESSMENT_NAME, "description": "new " + RISK_ASSESSMENT_DESCRIPTION, - "project": Project.objects.create( + "perimeter": Perimeter.objects.create( name="test2", folder=Folder.objects.create(name="test3") ).id, }, @@ -87,7 +87,7 @@ def test_delete_risk_assessments(self): RiskAssessment, { "name": RISK_ASSESSMENT_NAME, - "project": Project.objects.create( + "perimeter": Perimeter.objects.create( name="test", folder=Folder.objects.create(name="test") ), "risk_matrix": RiskMatrix.objects.create( @@ -105,7 +105,7 @@ def test_get_risk_assessments(self, test): """test to get risk assessments from the API with authentication""" EndpointTestsQueries.Auth.import_object(test.admin_client, "Risk matrix") - project = Project.objects.create(name="test", folder=test.folder) + perimeter = Perimeter.objects.create(name="test", folder=test.folder) risk_matrix = RiskMatrix.objects.all()[0] EndpointTestsQueries.Auth.get_object( @@ -116,16 +116,16 @@ def test_get_risk_assessments(self, test): "name": RISK_ASSESSMENT_NAME, "description": RISK_ASSESSMENT_DESCRIPTION, "version": RISK_ASSESSMENT_VERSION, - "project": project, + "perimeter": perimeter, "risk_matrix": risk_matrix, }, { - "project": { - "id": str(project.id), - "str": project.folder.name + "/" + project.name, + "perimeter": { + "id": str(perimeter.id), + "str": perimeter.folder.name + "/" + perimeter.name, "folder": { - "id": str(project.folder.id), - "str": project.folder.name, + "id": str(perimeter.folder.id), + "str": perimeter.folder.name, }, }, "risk_matrix": {"id": str(risk_matrix.id), "str": str(risk_matrix)}, @@ -138,7 +138,7 @@ def test_create_risk_assessments(self, test): """test to create risk assessments with the API with authentication""" EndpointTestsQueries.Auth.import_object(test.admin_client, "Risk matrix") - project = Project.objects.create(name="test", folder=test.folder) + perimeter = Perimeter.objects.create(name="test", folder=test.folder) risk_matrix = RiskMatrix.objects.all()[0] EndpointTestsQueries.Auth.create_object( @@ -149,16 +149,16 @@ def test_create_risk_assessments(self, test): "name": RISK_ASSESSMENT_NAME, "description": RISK_ASSESSMENT_DESCRIPTION, "version": RISK_ASSESSMENT_VERSION, - "project": str(project.id), + "perimeter": str(perimeter.id), "risk_matrix": str(risk_matrix.id), }, { - "project": { - "id": str(project.id), - "str": project.folder.name + "/" + project.name, + "perimeter": { + "id": str(perimeter.id), + "str": perimeter.folder.name + "/" + perimeter.name, "folder": { - "id": str(project.folder.id), - "str": project.folder.name, + "id": str(perimeter.folder.id), + "str": perimeter.folder.name, }, }, "risk_matrix": {"id": str(risk_matrix.id), "str": str(risk_matrix)}, @@ -172,8 +172,8 @@ def test_update_risk_assessments(self, test): EndpointTestsQueries.Auth.import_object(test.admin_client, "Risk matrix") EndpointTestsQueries.Auth.import_object(test.admin_client, "Risk matrix2") - project = Project.objects.create(name="test", folder=test.folder) - project2 = Project.objects.create( + perimeter = Perimeter.objects.create(name="test", folder=test.folder) + perimeter2 = Perimeter.objects.create( name="test2", folder=Folder.objects.create(name="test2") ) risk_matrix = RiskMatrix.objects.all()[0] @@ -187,23 +187,23 @@ def test_update_risk_assessments(self, test): "name": RISK_ASSESSMENT_NAME, "description": RISK_ASSESSMENT_DESCRIPTION, "version": RISK_ASSESSMENT_VERSION, - "project": project, + "perimeter": perimeter, "risk_matrix": risk_matrix, }, { "name": "new " + RISK_ASSESSMENT_NAME, "description": "new " + RISK_ASSESSMENT_DESCRIPTION, "version": RISK_ASSESSMENT_VERSION + ".1", - "project": str(project2.id), + "perimeter": str(perimeter2.id), "risk_matrix": str(risk_matrix2.id), }, { - "project": { - "id": str(project.id), - "str": project.folder.name + "/" + project.name, + "perimeter": { + "id": str(perimeter.id), + "str": perimeter.folder.name + "/" + perimeter.name, "folder": { - "id": str(project.folder.id), - "str": project.folder.name, + "id": str(perimeter.folder.id), + "str": perimeter.folder.name, }, }, "risk_matrix": {"id": str(risk_matrix.id), "str": str(risk_matrix)}, @@ -216,7 +216,7 @@ def test_delete_risk_assessments(self, test): """test to delete risk assessments with the API with authentication""" EndpointTestsQueries.Auth.import_object(test.admin_client, "Risk matrix") - project = Project.objects.create(name="test", folder=test.folder) + perimeter = Perimeter.objects.create(name="test", folder=test.folder) risk_matrix = RiskMatrix.objects.all()[0] EndpointTestsQueries.Auth.delete_object( @@ -225,7 +225,7 @@ def test_delete_risk_assessments(self, test): RiskAssessment, { "name": RISK_ASSESSMENT_NAME, - "project": project, + "perimeter": perimeter, "risk_matrix": risk_matrix, }, user_group=test.user_group, @@ -236,4 +236,4 @@ def test_delete_risk_assessments(self, test): # def test_get_status_choice(self, test): # """test to get risk assessments status choices from the API with authentication""" - # EndpointTestsQueries.get_object_options_auth(test.client, "Risk Assessment", "lc_status", Project.PRJ_LC_STATUS) + # EndpointTestsQueries.get_object_options_auth(test.client, "Risk Assessment", "lc_status", Perimeter.PRJ_LC_STATUS) diff --git a/backend/app_tests/api/test_api_risk_scenarios.py b/backend/app_tests/api/test_api_risk_scenarios.py index 161653280..083e43926 100644 --- a/backend/app_tests/api/test_api_risk_scenarios.py +++ b/backend/app_tests/api/test_api_risk_scenarios.py @@ -2,7 +2,7 @@ from rest_framework.test import APIClient from core.models import ( Asset, - Project, + Perimeter, RiskAssessment, RiskMatrix, RiskScenario, @@ -13,7 +13,7 @@ from test_utils import EndpointTestsQueries -# Generic project data for tests +# Generic perimeter data for tests RISK_SCENARIO_NAME = "Test scenario" RISK_SCENARIO_DESCRIPTION = "Test Description" RISK_SCENARIO_existing_controls = "Test Existing Controls" @@ -136,7 +136,7 @@ def test_get_risk_scenarios(self): "description": RISK_SCENARIO_DESCRIPTION, "risk_assessment": RiskAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=folder), + perimeter=Perimeter.objects.create(name="test", folder=folder), risk_matrix=RiskMatrix.objects.create(name="test", folder=folder), ), }, @@ -169,7 +169,7 @@ def test_update_risk_scenarios(self): "description": RISK_SCENARIO_DESCRIPTION, "risk_assessment": RiskAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=folder), + perimeter=Perimeter.objects.create(name="test", folder=folder), risk_matrix=RiskMatrix.objects.create(name="test", folder=folder), ), "threats": [Threat.objects.create(name="test", folder=folder)], @@ -194,7 +194,7 @@ def test_delete_risk_scenarios(self): "description": RISK_SCENARIO_DESCRIPTION, "risk_assessment": RiskAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=folder), + perimeter=Perimeter.objects.create(name="test", folder=folder), risk_matrix=RiskMatrix.objects.create(name="test", folder=folder), ), "threats": [Threat.objects.create(name="test", folder=folder)], @@ -212,7 +212,9 @@ def test_get_risk_scenarios(self, test): EndpointTestsQueries.Auth.import_object(test.admin_client, "Risk matrix") risk_assessment = RiskAssessment.objects.create( name="test", - project=Project.objects.create(name="testProject", folder=test.folder), + perimeter=Perimeter.objects.create( + name="testPerimeter", folder=test.folder + ), risk_matrix=RiskMatrix.objects.all()[0], ) threat = Threat.objects.create(name="test", folder=test.folder) @@ -266,7 +268,7 @@ def test_create_risk_scenarios(self, test): EndpointTestsQueries.Auth.import_object(test.admin_client, "Risk matrix") risk_assessment = RiskAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=test.folder), + perimeter=Perimeter.objects.create(name="test", folder=test.folder), risk_matrix=RiskMatrix.objects.all()[0], ) threat = Threat.objects.create(name="test", folder=test.folder) @@ -332,12 +334,12 @@ def test_update_risk_scenarios(self, test): folder = Folder.objects.create(name="test2") risk_assessment = RiskAssessment.objects.create( name="test", - project=Project.objects.create(name="test", folder=test.folder), + perimeter=Perimeter.objects.create(name="test", folder=test.folder), risk_matrix=RiskMatrix.objects.all()[0], ) risk_assessment2 = RiskAssessment.objects.create( name="test2", - project=Project.objects.create(name="test2", folder=folder), + perimeter=Perimeter.objects.create(name="test2", folder=folder), risk_matrix=RiskMatrix.objects.all()[1], ) threat = Threat.objects.create(name="test", folder=test.folder) @@ -413,7 +415,7 @@ def test_delete_risk_scenarios(self, test): folder = test.folder risk_assessment = RiskAssessment.objects.create( name="test", - project=Project.objects.create(name="testProject", folder=folder), + perimeter=Perimeter.objects.create(name="testPerimeter", folder=folder), risk_matrix=RiskMatrix.objects.all()[0], ) threat = Threat.objects.create(name="test", folder=folder) diff --git a/backend/app_tests/test_vars.py b/backend/app_tests/test_vars.py index 55e985a6e..8feaa1e2e 100644 --- a/backend/app_tests/test_vars.py +++ b/backend/app_tests/test_vars.py @@ -15,7 +15,7 @@ FRAMEWORKS_ENDPOINT = "frameworks-list" STORED_LIBRARIES_ENDPOINT = "stored-libraries-list" RISK_MATRICES_ENDPOINT = "risk-matrices-list" -PROJECTS_ENDPOINT = "projects-list" +PERIMETERS_ENDPOINT = "perimeters-list" REQUIREMENT_ASSESSMENTS_ENDPOINT = "requirement-assessments-list" REQUIREMENT_NODES_ENDPOINT = "requirement-nodes-list" RISK_ACCEPTANCES_ENDPOINT = "risk-acceptances-list" diff --git a/backend/core/base_models.py b/backend/core/base_models.py index 5e1240797..79c7ed59f 100644 --- a/backend/core/base_models.py +++ b/backend/core/base_models.py @@ -77,8 +77,8 @@ def get_scope(self): return self.__class__.objects.filter(risk_scenario=self.risk_scenario) if hasattr(self, "risk_assessment") and self.risk_assessment is not None: return self.__class__.objects.filter(risk_assessment=self.risk_assessment) - if hasattr(self, "project") and self.project is not None: - return self.__class__.objects.filter(project=self.project) + if hasattr(self, "perimeter") and self.perimeter is not None: + return self.__class__.objects.filter(perimeter=self.perimeter) if hasattr(self, "folder") and self.folder is not None: return self.__class__.objects.filter(folder=self.folder) if hasattr(self, "parent_folder") and self.parent_folder is not None: diff --git a/backend/core/filters.py b/backend/core/filters.py index 99f7d25c7..6494c5660 100644 --- a/backend/core/filters.py +++ b/backend/core/filters.py @@ -15,7 +15,7 @@ from core.models import * from core.forms import SearchableSelect, SearchableCheckboxSelectMultiple from iam.models import User, UserGroup, RoleAssignment, Folder -from core.models import Project, Threat, ReferenceControl, AppliedControl +from core.models import Perimeter, Threat, ReferenceControl, AppliedControl from django.utils.translation import gettext_lazy as _ @@ -148,7 +148,7 @@ class Meta: fields = ["name", "folder", "reference_control"] -class ProjectsDomainFilter(GenericFilterSet): +class PerimetersDomainFilter(GenericFilterSet): name = GenericCharFilter( widget=TextInput( attrs={ @@ -175,12 +175,12 @@ class Meta: fields = ["name", "description"] -class ProjectFilter(GenericFilterSet): +class PerimeterFilter(GenericFilterSet): name = GenericCharFilter( widget=TextInput( attrs={ "class": "h-10 rounded-r-lg border-none focus:ring-0", - "placeholder": _("Search project..."), + "placeholder": _("Search perimeter..."), } ) ) @@ -199,7 +199,7 @@ class ProjectFilter(GenericFilterSet): ) class Meta: - model = Project + model = Perimeter fields = "__all__" exclude = ["created_at", "locale_data"] @@ -359,7 +359,7 @@ class ComplianceAssessmentFilter(GenericFilterSet): } ) ) - project = GenericModelMultipleChoiceFilter(queryset=Project.objects.all()) + perimeter = GenericModelMultipleChoiceFilter(queryset=Perimeter.objects.all()) framework = GenericModelMultipleChoiceFilter(queryset=Framework.objects.all()) orderby = GenericOrderingFilter( fields=( diff --git a/backend/core/helpers.py b/backend/core/helpers.py index 536f46970..d422ac6ea 100644 --- a/backend/core/helpers.py +++ b/backend/core/helpers.py @@ -117,9 +117,9 @@ def measures_to_review(user: User): return measures -def compile_project_for_composer(user: User, projects_list: list): +def compile_perimeter_for_composer(user: User, perimeters_list: list): """ - Compiling information from choosen projects for composer + Compiling information from choosen perimeters for composer """ compliance_assessments_status = {"values": [], "labels": []} applied_control_status = {"values": [], "labels": []} @@ -136,7 +136,7 @@ def compile_project_for_composer(user: User, projects_list: list): for st in RequirementAssessment.Status: count = ( RequirementAssessment.objects.filter(status=st) - .filter(compliance_assessment__project__in=projects_list) + .filter(compliance_assessment__perimeter__in=perimeters_list) .count() ) v = {"value": count, "itemStyle": {"color": color_map[st]}} @@ -153,19 +153,21 @@ def compile_project_for_composer(user: User, projects_list: list): for st in AppliedControl.Status.choices: count = ( AppliedControl.objects.filter(status=st[0]) - .filter(requirement_assessments__assessment__project__in=projects_list) + .filter(requirement_assessments__assessment__perimeter__in=perimeters_list) .count() ) v = {"value": count, "itemStyle": {"color": color_map[st[0]]}} applied_control_status["values"].append(v) applied_control_status["labels"].append(st[1]) - project_objects = [] - for project in projects_list: - project_objects.append({"project": get_object_or_404(Project, pk=project)}) + perimeter_objects = [] + for perimeter in perimeters_list: + perimeter_objects.append( + {"perimeter": get_object_or_404(Perimeter, pk=perimeter)} + ) return { - "project_objects": project_objects, + "perimeter_objects": perimeter_objects, "compliance_assessments_status": compliance_assessments_status, "applied_control_status": applied_control_status, "change_usergroup": RoleAssignment.is_access_allowed( @@ -735,7 +737,7 @@ def p_risks_2(user: User): return data -def risks_per_project_groups(user: User): +def risks_per_perimeter_groups(user: User): output = list() ( object_ids_view, @@ -747,7 +749,7 @@ def risks_per_project_groups(user: User): for folder in Folder.objects.all().order_by("name"): ri_level = ( RiskScenario.objects.filter(id__in=object_ids_view) - .filter(risk_assessment__project__folder=folder) + .filter(risk_assessment__perimeter__folder=folder) .values("current_level") .annotate(total=Count("current_level")) ) @@ -767,9 +769,9 @@ def get_counters(user: User): Folder.get_root_folder(), user, Folder )[0] ), - "projects": len( + "perimeters": len( RoleAssignment.get_accessible_object_ids( - Folder.get_root_folder(), user, Project + Folder.get_root_folder(), user, Perimeter )[0] ), "applied_controls": controls_count, @@ -802,10 +804,10 @@ def build_audits_tree_metrics(user): for domain in viewable_domains.exclude(name="Global"): block_domain = {"name": domain.name, "children": []} domain_prj_children = [] - for project in Project.objects.filter(folder=domain): - block_prj = {"name": project.name, "domain": domain.name, "children": []} + for perimeter in Perimeter.objects.filter(folder=domain): + block_prj = {"name": perimeter.name, "domain": domain.name, "children": []} children = [] - for audit in ComplianceAssessment.objects.filter(project=project): + for audit in ComplianceAssessment.objects.filter(perimeter=perimeter): cnt_res = {} for result in RequirementAssessment.Result.choices: requirement_assessments = audit.get_requirement_assessments( @@ -1007,7 +1009,9 @@ def risk_status(user: User, risk_assessment_list): {"value": cnt, "itemStyle": {"color": STATUS_COLOR_MAP[status[0]]}} ) - names.append(str(risk_assessment.project) + " " + str(risk_assessment.version)) + names.append( + str(risk_assessment.perimeter) + " " + str(risk_assessment.version) + ) y_max_rsk = max(max_tmp, default=0) + 1 @@ -1176,18 +1180,20 @@ def get_folder_content(folder: Folder): content = [] for f in Folder.objects.filter(parent_folder=folder).distinct(): content.append({"name": f.name, "children": get_folder_content(f)}) - for p in Project.objects.filter(folder=folder).distinct(): + for p in Perimeter.objects.filter(folder=folder).distinct(): content.append( { "name": p.name, "children": [ { "name": "audits", - "value": ComplianceAssessment.objects.filter(project=p).count(), + "value": ComplianceAssessment.objects.filter( + perimeter=p + ).count(), }, { "name": "risk assessments", - "value": RiskAssessment.objects.filter(project=p).count(), + "value": RiskAssessment.objects.filter(perimeter=p).count(), }, ], } diff --git a/backend/core/locale/fr/LC_MESSAGES/django.po b/backend/core/locale/fr/LC_MESSAGES/django.po index 400705fe7..bd507574b 100644 --- a/backend/core/locale/fr/LC_MESSAGES/django.po +++ b/backend/core/locale/fr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Perimeter-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-12-11 18:23+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" @@ -117,8 +117,8 @@ msgid "Description (descending)" msgstr "Description (décroissant)" #: core/filters.py:183 -msgid "Search project..." -msgstr "Rechercher un projet..." +msgid "Search perimeter..." +msgstr "Rechercher un périmètre..." #: core/filters.py:212 msgid "Search threat..." @@ -573,12 +573,12 @@ msgstr "Statut" #: core/models.py:1322 core/models.py:1947 core/models.py:2498 #: core/templates/core/action_plan_pdf.html:16 #: core/templates/snippets/mp_data.html:7 -msgid "Project" -msgstr "Projet" +msgid "Perimeter" +msgstr "Périmètre" #: core/models.py:1323 -msgid "Projects" -msgstr "Projets" +msgid "Perimeters" +msgstr "Périmètres" #: core/models.py:1358 msgid "Primary" diff --git a/backend/core/management/commands/status.py b/backend/core/management/commands/status.py index f8d345a8b..1b9886a70 100644 --- a/backend/core/management/commands/status.py +++ b/backend/core/management/commands/status.py @@ -12,7 +12,7 @@ def handle(self, *args, **kwargs): nb_first_login = User.objects.filter(first_login=True).count() nb_libraries = LoadedLibrary.objects.all().count() nb_domains = Folder.objects.filter(content_type="DO").count() - nb_projects = Project.objects.all().count() + nb_perimeters = Perimeter.objects.all().count() nb_assets = Asset.objects.all().count() nb_threats = Threat.objects.all().count() nb_functions = ReferenceControl.objects.all().count() @@ -38,7 +38,7 @@ def handle(self, *args, **kwargs): self.stdout.write( f"created_at={created_at.strftime('%Y-%m-%dT%H:%M')} last_login={last_login.strftime('%Y-%m-%dT%H:%M') if last_login else last_login} " + f"users={nb_users} first_logins={nb_first_login} libraries={nb_libraries} " - + f"domains={nb_domains} projects={nb_projects} assets={nb_assets} " + + f"domains={nb_domains} perimeters={nb_perimeters} assets={nb_assets} " + f"threats={nb_threats} functions={nb_functions} measures={nb_measures} " + f"evidences={nb_evidences} compliance={nb_compliance_assessments} risk={nb_risk_assessments} " + f"scenarios={nb_risk_scenarios} acceptances={nb_risk_acceptances} " diff --git a/backend/core/migrations/0051_rename_project_perimeter_alter_perimeter_options_and_more.py b/backend/core/migrations/0051_rename_project_perimeter_alter_perimeter_options_and_more.py new file mode 100644 index 000000000..19ad1c76d --- /dev/null +++ b/backend/core/migrations/0051_rename_project_perimeter_alter_perimeter_options_and_more.py @@ -0,0 +1,53 @@ +# Generated by Django 5.1.5 on 2025-02-04 09:22 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0050_appliedcontrol_progress_field"), + ("iam", "0010_user_preferences"), + ("tprm", "0003_entityassessment_representatives"), + ] + + operations = [ + migrations.RenameModel( + old_name="Project", + new_name="Perimeter", + ), + migrations.AlterModelOptions( + name="perimeter", + options={"verbose_name": "Perimeter", "verbose_name_plural": "Perimeters"}, + ), + migrations.RenameField( + model_name="complianceassessment", + old_name="project", + new_name="perimeter", + ), + migrations.RenameField( + model_name="riskassessment", + old_name="project", + new_name="perimeter", + ), + migrations.AlterField( + model_name="complianceassessment", + name="perimeter", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="core.perimeter", + verbose_name="Perimeter", + ), + ), + migrations.AlterField( + model_name="riskassessment", + name="perimeter", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="core.perimeter", + verbose_name="Perimeter", + ), + ), + ] diff --git a/backend/core/models.py b/backend/core/models.py index 1b6f53188..838c4a50b 100644 --- a/backend/core/models.py +++ b/backend/core/models.py @@ -563,7 +563,7 @@ def update_library(self) -> Union[str, None]: ra = RequirementAssessment.objects.create( compliance_assessment=compliance_assessment, requirement=new_requirement_node, - folder=compliance_assessment.project.folder, + folder=compliance_assessment.perimeter.folder, answer=transform_question_to_answer( new_requirement_node.question ) @@ -894,8 +894,8 @@ def risk_assessments(self) -> list: return RiskAssessment.objects.filter(risk_matrix=self) @property - def projects(self) -> list: - return Project.objects.filter(riskassessment__risk_matrix=self).distinct() + def perimeters(self) -> list: + return Perimeter.objects.filter(riskassessment__risk_matrix=self).distinct() def parse_json(self) -> dict: return json.loads(self.json_definition) @@ -1348,7 +1348,7 @@ def create_default_qualifications(cls): ########################### Domain objects ######################### -class Project(NameDescriptionMixin, FolderMixin): +class Perimeter(NameDescriptionMixin, FolderMixin): PRJ_LC_STATUS = [ ("undefined", _("Undefined")), ("in_design", _("Design")), @@ -1370,8 +1370,8 @@ class Project(NameDescriptionMixin, FolderMixin): fields_to_check = ["name"] class Meta: - verbose_name = _("Project") - verbose_name_plural = _("Projects") + verbose_name = _("Perimeter") + verbose_name_plural = _("Perimeters") def overall_compliance(self): compliance_assessments_list = [ @@ -1887,8 +1887,8 @@ def risk_assessments(self): return {scenario.risk_assessment for scenario in self.risk_scenarios} @property - def projects(self): - return {risk_assessment.project for risk_assessment in self.risk_assessments} + def perimeters(self): + return {risk_assessment.perimeter for risk_assessment in self.risk_assessments} def __str__(self): return self.name @@ -2050,8 +2050,11 @@ class Status(models.TextChoices): DONE = "done", _("Done") DEPRECATED = "deprecated", _("Deprecated") - project = models.ForeignKey( - Project, on_delete=models.CASCADE, verbose_name=_("Project") + perimeter = models.ForeignKey( + Perimeter, + on_delete=models.CASCADE, + verbose_name=_("Perimeter"), + null=True, ) version = models.CharField( max_length=100, @@ -2090,7 +2093,7 @@ class Meta: def save(self, *args, **kwargs) -> None: if not self.folder or self.folder == Folder.get_root_folder(): - self.folder = self.project.folder + self.folder = self.perimeter.folder return super().save(*args, **kwargs) @@ -2151,7 +2154,7 @@ def save(self, *args, **kwargs) -> None: @property def path_display(self) -> str: - return f"{self.project.folder}/{self.project}/{self.name} - {self.version}" + return f"{self.perimeter.folder}/{self.perimeter}/{self.name} - {self.version}" def get_scenario_count(self) -> int: count = RiskScenario.objects.filter(risk_assessment=self.id).count() @@ -2607,10 +2610,10 @@ def get_default_ref_id(cls, risk_assessment: RiskAssessment): candidates = [f"R.{i}" for i in range(1, nb_scenarios + 1)] return next(x for x in candidates if x not in scenarios_ref_ids) - def parent_project(self): - return self.risk_assessment.project + def parent_perimeter(self): + return self.risk_assessment.perimeter - parent_project.short_description = _("Project") + parent_perimeter.short_description = _("Perimeter") def get_matrix(self): return self.risk_assessment.risk_matrix.parse_json_translated() @@ -2711,7 +2714,7 @@ def get_strength_of_knowledge(self): return self.DEFAULT_SOK_OPTIONS[self.strength_of_knowledge] def __str__(self): - return str(self.parent_project()) + _(": ") + str(self.name) + return str(self.parent_perimeter()) + _(": ") + str(self.name) def save(self, *args, **kwargs): if self.current_proba >= 0 and self.current_impact >= 0: diff --git a/backend/core/serializers.py b/backend/core/serializers.py index e67c92c2a..057410059 100644 --- a/backend/core/serializers.py +++ b/backend/core/serializers.py @@ -108,7 +108,7 @@ class Meta: class AssessmentReadSerializer(BaseModelSerializer): - project = FieldsRelatedField() + perimeter = FieldsRelatedField() authors = FieldsRelatedField(many=True) reviewers = FieldsRelatedField(many=True) @@ -205,26 +205,26 @@ class Meta: fields = "__all__" -class ProjectWriteSerializer(BaseModelSerializer): +class PerimeterWriteSerializer(BaseModelSerializer): class Meta: - model = Project + model = Perimeter exclude = ["created_at"] -class ProjectReadSerializer(BaseModelSerializer): +class PerimeterReadSerializer(BaseModelSerializer): folder = FieldsRelatedField() lc_status = serializers.CharField(source="get_lc_status_display") class Meta: - model = Project + model = Perimeter fields = "__all__" -class ProjectImportExportSerializer(BaseModelSerializer): +class PerimeterImportExportSerializer(BaseModelSerializer): folder = HashSlugRelatedField(slug_field="pk", read_only=True) class Meta: - model = Project + model = Perimeter fields = [ "ref_id", "name", @@ -245,12 +245,12 @@ class Meta: class RiskAssessmentDuplicateSerializer(BaseModelSerializer): class Meta: model = RiskAssessment - fields = ["name", "version", "project", "description"] + fields = ["name", "version", "perimeter", "description"] class RiskAssessmentReadSerializer(AssessmentReadSerializer): str = serializers.CharField(source="__str__") - project = FieldsRelatedField(["id", "folder"]) + perimeter = FieldsRelatedField(["id", "folder"]) folder = FieldsRelatedField() risk_scenarios = FieldsRelatedField(many=True, fields=["id", "name", "ref_id"]) risk_scenarios_count = serializers.IntegerField(source="risk_scenarios.count") @@ -266,7 +266,7 @@ class RiskAssessmentImportExportSerializer(BaseModelSerializer): risk_matrix = serializers.SlugRelatedField(slug_field="urn", read_only=True) folder = HashSlugRelatedField(slug_field="pk", read_only=True) - project = HashSlugRelatedField(slug_field="pk", read_only=True) + perimeter = HashSlugRelatedField(slug_field="pk", read_only=True) ebios_rm_study = HashSlugRelatedField(slug_field="pk", read_only=True) class Meta: @@ -277,7 +277,7 @@ class Meta: "version", "description", "folder", - "project", + "perimeter", "eta", "due_date", "status", @@ -459,8 +459,8 @@ class Meta: class RiskScenarioReadSerializer(RiskScenarioWriteSerializer): risk_assessment = FieldsRelatedField(["id", "name"]) risk_matrix = FieldsRelatedField(source="risk_assessment.risk_matrix") - project = FieldsRelatedField( - source="risk_assessment.project", fields=["id", "name", "folder"] + perimeter = FieldsRelatedField( + source="risk_assessment.perimeter", fields=["id", "name", "folder"] ) version = serializers.StringRelatedField(source="risk_assessment.version") threats = FieldsRelatedField(many=True) @@ -861,7 +861,7 @@ class Meta: class ComplianceAssessmentReadSerializer(AssessmentReadSerializer): - project = FieldsRelatedField(["id", "folder"]) + perimeter = FieldsRelatedField(["id", "folder"]) folder = FieldsRelatedField() framework = FieldsRelatedField( [ @@ -913,7 +913,7 @@ class ComplianceAssessmentImportExportSerializer(BaseModelSerializer): framework = serializers.SlugRelatedField(slug_field="urn", read_only=True) folder = HashSlugRelatedField(slug_field="pk", read_only=True) - project = HashSlugRelatedField(slug_field="pk", read_only=True) + perimeter = HashSlugRelatedField(slug_field="pk", read_only=True) class Meta: model = ComplianceAssessment @@ -923,7 +923,7 @@ class Meta: "version", "description", "folder", - "project", + "perimeter", "eta", "due_date", "status", diff --git a/backend/core/startup.py b/backend/core/startup.py index c9f898fe1..fd4914691 100644 --- a/backend/core/startup.py +++ b/backend/core/startup.py @@ -21,7 +21,7 @@ "view_framework", "view_loadedlibrary", "view_policy", - "view_project", + "view_perimeter", "view_referencecontrol", "view_representative", "view_requirementassessment", @@ -50,7 +50,7 @@ ] APPROVER_PERMISSIONS_LIST = [ - "view_project", + "view_perimeter", "view_riskassessment", "view_appliedcontrol", "view_policy", @@ -93,7 +93,7 @@ "add_complianceassessment", "add_evidence", "add_policy", - "add_project", + "add_perimeter", "add_riskacceptance", "add_riskassessment", "add_riskscenario", @@ -107,7 +107,7 @@ "change_entityassessment", "change_evidence", "change_policy", - "change_project", + "change_perimeter", "change_referencecontrol", "change_vulnerability", "change_representative", @@ -124,7 +124,7 @@ "delete_entityassessment", "delete_evidence", "delete_policy", - "delete_project", + "delete_perimeter", "delete_referencecontrol", "delete_vulnerability", "delete_representative", @@ -143,7 +143,7 @@ "view_framework", "view_loadedlibrary", "view_policy", - "view_project", + "view_perimeter", "view_referencecontrol", "view_vulnerability", "view_representative", @@ -203,7 +203,7 @@ "add_evidence", "add_folder", "add_policy", - "add_project", + "add_perimeter", "add_riskacceptance", "add_riskassessment", "add_riskmatrix", @@ -218,7 +218,7 @@ "change_evidence", "change_folder", "change_policy", - "change_project", + "change_perimeter", "change_referencecontrol", "change_representative", "change_requirementassessment", @@ -236,7 +236,7 @@ "delete_evidence", "delete_folder", "delete_policy", - "delete_project", + "delete_perimeter", "delete_referencecontrol", "delete_representative", "delete_riskacceptance", @@ -259,7 +259,7 @@ "view_framework", "view_loadedlibrary", "view_policy", - "view_project", + "view_perimeter", "view_referencecontrol", "view_representative", "view_requirementassessment", @@ -340,10 +340,10 @@ "change_folder", "view_folder", "delete_folder", - "add_project", - "change_project", - "delete_project", - "view_project", + "add_perimeter", + "change_perimeter", + "delete_perimeter", + "view_perimeter", "add_riskassessment", "view_riskassessment", "change_riskassessment", diff --git a/backend/core/templates/core/action_plan_pdf.html b/backend/core/templates/core/action_plan_pdf.html index e46c31fdb..1c16e3f68 100644 --- a/backend/core/templates/core/action_plan_pdf.html +++ b/backend/core/templates/core/action_plan_pdf.html @@ -11,9 +11,9 @@

{% trans "Action plan" %}

-

{% trans "Domain" %}: {{ compliance_assessment.project.folder }}

+

{% trans "Domain" %}: {{ compliance_assessment.perimeter.folder }}

/

-

{% trans "Project" %}: {{ compliance_assessment.project.name }}

+

{% trans "Perimeter" %}: {{ compliance_assessment.perimeter.name }}

/

{% trans "Audit" %}: {{ compliance_assessment.name }} - {{ compliance_assessment.version }}

/

diff --git a/backend/core/templates/snippets/mp_data.html b/backend/core/templates/snippets/mp_data.html index f79441ff0..24ca0c973 100644 --- a/backend/core/templates/snippets/mp_data.html +++ b/backend/core/templates/snippets/mp_data.html @@ -4,9 +4,9 @@ {# Header Section #}
-

{% trans "Domain" %}: {{ risk_assessment.project.folder }}

+

{% trans "Domain" %}: {{ risk_assessment.perimeter.folder }}

/ -

{% trans "Project" %}: {{ risk_assessment.project }}

+

{% trans "Perimeter" %}: {{ risk_assessment.perimeter }}

/

{% trans "Risk assessment" %}: {{ risk_assessment.name }} - {{ risk_assessment.version }}

diff --git a/backend/core/templates/snippets/ra_data.html b/backend/core/templates/snippets/ra_data.html index eb4d250dc..3d2699811 100644 --- a/backend/core/templates/snippets/ra_data.html +++ b/backend/core/templates/snippets/ra_data.html @@ -7,7 +7,7 @@ {# Left Column - Assessment Details #}

{% trans "Risk assessment" %}

-

{{ risk_assessment.project }}/{{ risk_assessment }}

+

{{ risk_assessment.perimeter }}/{{ risk_assessment }}

{# Risk Matrix #} diff --git a/backend/core/tests/fixtures.py b/backend/core/tests/fixtures.py index 03391e594..bdf098a1f 100644 --- a/backend/core/tests/fixtures.py +++ b/backend/core/tests/fixtures.py @@ -1,7 +1,7 @@ import pytest from core.models import ( - Project, + Perimeter, StoredLibrary, FilteringLabel, AppliedControl, @@ -10,15 +10,15 @@ @pytest.fixture -def domain_project_fixture(): +def domain_perimeter_fixture(): root_folder = Folder.objects.get(content_type=Folder.ContentType.ROOT) folder = Folder.objects.create( parent_folder=root_folder, name="test folder", description="test folder description", ) - project = Project.objects.create(name="test project", folder=folder) - return project + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) + return perimeter @pytest.fixture diff --git a/backend/core/tests/test_helpers.py b/backend/core/tests/test_helpers.py index 315491ab5..720315cb4 100644 --- a/backend/core/tests/test_helpers.py +++ b/backend/core/tests/test_helpers.py @@ -38,17 +38,17 @@ def test_get_rating_options_perm_to_view_matrix(): builtin=False, parent_folder=Folder.objects.get(content_type=Folder.ContentType.ROOT), ) - project = Project.objects.create(name="test", folder=folder) + perimeter = Perimeter.objects.create(name="test", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test", - project=project, + perimeter=perimeter, risk_matrix=RiskMatrix.objects.latest("created_at"), ) RiskScenario.objects.create(name="test", risk_assessment=risk_assessment) role = Role.objects.create(name="test") reader_permissions = Permission.objects.filter( codename__in=[ - "view_project", + "view_perimeter", "view_riskassessment", "view_appliedcontrol", "view_riskscenario", @@ -103,17 +103,17 @@ def test_get_rating_options_abbr_perm_to_view_matrix(): builtin=False, parent_folder=Folder.objects.get(content_type=Folder.ContentType.ROOT), ) - project = Project.objects.create(name="test", folder=folder) + perimeter = Perimeter.objects.create(name="test", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test", - project=project, + perimeter=perimeter, risk_matrix=RiskMatrix.objects.latest("created_at"), ) RiskScenario.objects.create(name="test", risk_assessment=risk_assessment) role = Role.objects.create(name="test") reader_permissions = Permission.objects.filter( codename__in=[ - "view_project", + "view_perimeter", "view_riskassessment", "view_appliedcontrol", "view_riskscenario", diff --git a/backend/core/tests/test_models.py b/backend/core/tests/test_models.py index 91dc191e5..c806a7468 100644 --- a/backend/core/tests/test_models.py +++ b/backend/core/tests/test_models.py @@ -5,7 +5,7 @@ from ciso_assistant.settings import BASE_DIR from core.models import ( Policy, - Project, + Perimeter, RequirementMapping, RequirementMappingSet, RiskAssessment, @@ -98,17 +98,17 @@ def test_risk_assessment_parameters(self): json_definition="{}", folder=folder, ) - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) assert risk_assessment.name == "test risk_assessment" assert risk_assessment.description == "test risk_assessment description" - assert risk_assessment.project == Project.objects.get(name="test project") + assert risk_assessment.perimeter == Perimeter.objects.get(name="test perimeter") assert risk_assessment.risk_matrix == RiskMatrix.objects.get( name="test risk matrix" ) @@ -125,11 +125,11 @@ def test_risk_assessment_get_scenario_count_null_when_no_scenario_inside_risk_as json_definition="{}", folder=folder, ) - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) @@ -143,11 +143,11 @@ def test_risk_assessment_get_scenario_count_one_when_one_scenario_inside_risk_as name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) Threat.objects.create( @@ -169,11 +169,11 @@ def test_risk_assessment_get_scenario_count_is_decremented_when_child_scenario_i name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) Threat.objects.create( @@ -199,11 +199,11 @@ def test_risk_assessment_get_scenario_count_is_incremented_when_child_scenario_i name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) Threat.objects.create( @@ -230,17 +230,17 @@ def test_risk_assessment_id_is_of_type_uuid(self): json_definition="{}", folder=folder, ) - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) assert isinstance(risk_assessment.id, UUID) - def test_risk_assessment_is_unique_in_project(self): + def test_risk_assessment_is_unique_in_perimeter(self): folder = Folder.objects.create( name="test folder", description="test folder description" ) @@ -250,18 +250,18 @@ def test_risk_assessment_is_unique_in_project(self): json_definition="{}", folder=folder, ) - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) RiskAssessment.objects.create( name="test risk assessment", description="test risk assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) with pytest.raises(ValidationError): RiskAssessment.objects.create( name="test risk assessment", description="test risk assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) @@ -275,23 +275,23 @@ def test_risk_assessment_can_have_same_name_but_different_version(self): json_definition="{}", folder=folder, ) - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, version="1", ) RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, version="2", ) - def test_risk_assessment_can_have_same_name_and_version_in_a_different_project( + def test_risk_assessment_can_have_same_name_and_version_in_a_different_perimeter( self, ): folder = Folder.objects.create( @@ -303,25 +303,25 @@ def test_risk_assessment_can_have_same_name_and_version_in_a_different_project( json_definition="{}", folder=folder, ) - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, version="1", ) - project2 = Project.objects.create(name="test project 2", folder=folder) + perimeter2 = Perimeter.objects.create(name="test perimeter 2", folder=folder) RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project2, + perimeter=perimeter2, risk_matrix=risk_matrix, version="1", ) - def test_risk_assessment_scope_is_risk_assessments_in_project(self): + def test_risk_assessment_scope_is_risk_assessments_in_perimeter(self): folder = Folder.objects.create( name="test folder", description="test folder description" ) @@ -331,37 +331,37 @@ def test_risk_assessment_scope_is_risk_assessments_in_project(self): json_definition="{}", folder=folder, ) - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) risk_assessment2 = RiskAssessment.objects.create( name="test risk_assessment 2", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) risk_assessment3 = RiskAssessment.objects.create( name="test risk_assessment 3", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) - project2 = Project.objects.create(name="test project 2", folder=folder) + perimeter2 = Perimeter.objects.create(name="test perimeter 2", folder=folder) RiskAssessment.objects.create( name="test risk_assessment 4", description="test risk_assessment description", - project=project2, + perimeter=perimeter2, risk_matrix=risk_matrix, ) RiskAssessment.objects.create( name="test risk_assessment 5", description="test risk_assessment description", - project=project2, + perimeter=perimeter2, risk_matrix=risk_matrix, ) @@ -382,11 +382,11 @@ def test_risk_scenario_parameters(self): name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) threat = Threat.objects.create( @@ -407,16 +407,16 @@ def test_risk_scenario_parameters(self): assert Threat.objects.get(name="test threat") in scenario.threats.all() @pytest.mark.usefixtures("risk_matrix_fixture") - def test_risk_scenario_parent_project(self): + def test_risk_scenario_parent_perimeter(self): folder = Folder.objects.create( name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) Threat.objects.create( @@ -428,7 +428,9 @@ def test_risk_scenario_parent_project(self): risk_assessment=risk_assessment, ) - assert scenario.parent_project() == Project.objects.get(name="test project") + assert scenario.parent_perimeter() == Perimeter.objects.get( + name="test perimeter" + ) @pytest.mark.usefixtures("risk_matrix_fixture") def test_risk_scenario_is_deleted_when_risk_assessment_is_deleted(self): @@ -436,11 +438,11 @@ def test_risk_scenario_is_deleted_when_risk_assessment_is_deleted(self): name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) Threat.objects.create( @@ -466,11 +468,11 @@ def test_risk_scenario_is__not_deleted_when_threat_is_deleted(self): name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) threat = Threat.objects.create( @@ -497,11 +499,11 @@ def test_risk_scenario_id_is_of_type_uuid(self): name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) Threat.objects.create( @@ -521,11 +523,11 @@ def test_risk_scenario_scope_is_scenarios_in_risk_assessment(self): name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) Threat.objects.create( @@ -550,7 +552,7 @@ def test_risk_scenario_scope_is_scenarios_in_risk_assessment(self): risk_assessment2 = RiskAssessment.objects.create( name="test risk_assessment 2", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) RiskScenario.objects.create( @@ -572,11 +574,11 @@ def test_risk_scenario_rid_is_deterministic(self): name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) Threat.objects.create( @@ -706,11 +708,11 @@ def test_acceptance_creation(self): name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) Threat.objects.create( @@ -745,11 +747,11 @@ def test_acceptance_creation_same_name_different_folder(self): name="test folder 2", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) Threat.objects.create( @@ -789,11 +791,11 @@ def test_acceptance_creation_same_name_same_folder(self): name="test folder", description="test folder description" ) risk_matrix = RiskMatrix.objects.all()[0] - project = Project.objects.create(name="test project", folder=folder) + perimeter = Perimeter.objects.create(name="test perimeter", folder=folder) risk_assessment = RiskAssessment.objects.create( name="test risk_assessment", description="test risk_assessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) Threat.objects.create( @@ -948,7 +950,7 @@ def test_library_reference_count_zero_if_unused(self): ) assert library.reference_count == 0 - @pytest.mark.usefixtures("domain_project_fixture") + @pytest.mark.usefixtures("domain_perimeter_fixture") def test_library_reference_count_incremented_when_framework_is_referenced_by_compliance_assessment_and_decremented_when_compliance_assessment_is_deleted( self, ): @@ -972,7 +974,7 @@ def test_library_reference_count_incremented_when_framework_is_referenced_by_com compliance_assessment = ComplianceAssessment.objects.create( name="ComplianceAssessment", description="ComplianceAssessment description", - project=Project.objects.last(), + perimeter=Perimeter.objects.last(), framework=framework, ) @@ -982,7 +984,7 @@ def test_library_reference_count_incremented_when_framework_is_referenced_by_com assert library.reference_count == 0 - @pytest.mark.usefixtures("domain_project_fixture") + @pytest.mark.usefixtures("domain_perimeter_fixture") def test_library_reference_count_incremented_when_reference_control_is_referenced_by_complance_assessment_and_decremented_when_compliance_assessment_is_deleted( self, ): @@ -1011,7 +1013,7 @@ def test_library_reference_count_incremented_when_reference_control_is_reference compliance_assessment = ComplianceAssessment.objects.create( name="ComplianceAssessment", description="ComplianceAssessment description", - project=Project.objects.last(), + perimeter=Perimeter.objects.last(), framework=framework, ) @@ -1045,7 +1047,7 @@ def test_library_reference_count_incremented_when_risk_matrix_is_referenced_by_r self, ): domain = Folder.objects.create(name="Domain", description="Domain description") - project = Project.objects.create(name="Project", folder=domain) + perimeter = Perimeter.objects.create(name="Perimeter", folder=domain) library = LoadedLibrary.objects.get() risk_matrix = RiskMatrix.objects.get() @@ -1055,7 +1057,7 @@ def test_library_reference_count_incremented_when_risk_matrix_is_referenced_by_r risk_assessment = RiskAssessment.objects.create( name="RiskAssessment", description="RiskAssessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) @@ -1070,7 +1072,7 @@ def test_library_reference_count_incremented_when_threat_is_referenced_by_risk_s self, ): domain = Folder.objects.create(name="Domain", description="Domain description") - project = Project.objects.create(name="Project", folder=domain) + perimeter = Perimeter.objects.create(name="Perimeter", folder=domain) risk_matrix = RiskMatrix.objects.get() @@ -1092,7 +1094,7 @@ def test_library_reference_count_incremented_when_threat_is_referenced_by_risk_s risk_assessment = RiskAssessment.objects.create( name="RiskAssessment", description="RiskAssessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) @@ -1116,7 +1118,7 @@ def test_library_reference_count_incremented_when_reference_control_is_reference self, ): domain = Folder.objects.create(name="Domain", description="Domain description") - project = Project.objects.create(name="Project", folder=domain) + perimeter = Perimeter.objects.create(name="Perimeter", folder=domain) risk_matrix = RiskMatrix.objects.get() @@ -1144,7 +1146,7 @@ def test_library_reference_count_incremented_when_reference_control_is_reference risk_assessment = RiskAssessment.objects.create( name="RiskAssessment", description="RiskAssessment description", - project=project, + perimeter=perimeter, risk_matrix=risk_matrix, ) @@ -1163,7 +1165,7 @@ def test_library_reference_count_incremented_when_reference_control_is_reference assert library.reference_count == 0 - @pytest.mark.usefixtures("domain_project_fixture") + @pytest.mark.usefixtures("domain_perimeter_fixture") def test_library_reference_count_must_be_zero_for_library_deletion( self, ): @@ -1184,7 +1186,7 @@ def test_library_reference_count_must_be_zero_for_library_deletion( compliance_assessment = ComplianceAssessment.objects.create( name="ComplianceAssessment", description="ComplianceAssessment description", - project=Project.objects.last(), + perimeter=Perimeter.objects.last(), framework=framework, ) @@ -1204,7 +1206,7 @@ def test_library_reference_count_must_be_zero_for_library_deletion( assert LoadedLibrary.objects.count() == 0 - @pytest.mark.usefixtures("domain_project_fixture") + @pytest.mark.usefixtures("domain_perimeter_fixture") def test_library_cannot_be_deleted_if_it_is_a_dependency_of_other_libraries(self): dependency_library = LoadedLibrary.objects.create( name="Dependency Library", diff --git a/backend/core/tests/test_requirement_assessment.py b/backend/core/tests/test_requirement_assessment.py index ceeb844ad..d166db4a1 100644 --- a/backend/core/tests/test_requirement_assessment.py +++ b/backend/core/tests/test_requirement_assessment.py @@ -4,7 +4,7 @@ StoredLibrary, Framework, ComplianceAssessment, - Project, + Perimeter, RequirementAssessment, ) from iam.models import Folder @@ -25,7 +25,9 @@ def enisa_5g_scm_framework_fixture(): @pytest.mark.django_db class TestRequirementAssessment: - @pytest.mark.usefixtures("domain_project_fixture", "enisa_5g_scm_framework_fixture") + @pytest.mark.usefixtures( + "domain_perimeter_fixture", "enisa_5g_scm_framework_fixture" + ) def test_create_applied_controls_from_suggestions(self): enisa_5g_scm = Framework.objects.first() compliance_assessment = ComplianceAssessment.objects.create( @@ -34,7 +36,7 @@ def test_create_applied_controls_from_suggestions(self): folder=Folder.objects.filter( content_type=Folder.ContentType.DOMAIN ).first(), - project=Project.objects.first(), + perimeter=Perimeter.objects.first(), ) requirement_assessments: list[RequirementAssessment] = ( diff --git a/backend/core/tests/test_vulnerability.py b/backend/core/tests/test_vulnerability.py index 78ede2681..5360f87cc 100644 --- a/backend/core/tests/test_vulnerability.py +++ b/backend/core/tests/test_vulnerability.py @@ -16,7 +16,7 @@ @pytest.fixture -def valid_vulnerability_data(domain_project_fixture, applied_controls): +def valid_vulnerability_data(domain_perimeter_fixture, applied_controls): domain = Folder.objects.filter(content_type=Folder.ContentType.DOMAIN).first() applied_controls = AppliedControl.objects.all() return { @@ -34,7 +34,7 @@ def valid_vulnerability_data(domain_project_fixture, applied_controls): @pytest.mark.django_db class TestVulnerability: - @pytest.mark.usefixtures("domain_project_fixture", "applied_controls") + @pytest.mark.usefixtures("domain_perimeter_fixture", "applied_controls") def test_basic_vulnerability_creation(self): vulnerability = Vulnerability.objects.create( name="SQL Injection in Login Form", @@ -51,7 +51,7 @@ def test_basic_vulnerability_creation(self): assert vulnerability.created_at is not None assert vulnerability.updated_at is not None - @pytest.mark.usefixtures("domain_project_fixture") + @pytest.mark.usefixtures("domain_perimeter_fixture") def test_vulnerability_creation_same_name_in_scope(self): domain = Folder.objects.filter(content_type=Folder.ContentType.DOMAIN).first() vulnerability = Vulnerability.objects.create( @@ -81,7 +81,7 @@ def test_missing_required_fields(self): ]: assert field in serializer.errors - def test_serialization(self, domain_project_fixture, applied_controls): + def test_serialization(self, domain_perimeter_fixture, applied_controls): """Test serializing an existing vulnerability instance""" folder = Folder.objects.filter(content_type=Folder.ContentType.DOMAIN).first() vulnerability = Vulnerability.objects.create( diff --git a/backend/core/urls.py b/backend/core/urls.py index 0b79a6c3c..adabda5ef 100644 --- a/backend/core/urls.py +++ b/backend/core/urls.py @@ -23,7 +23,7 @@ ) router.register(r"solutions", SolutionViewSet, basename="solutions") router.register(r"representatives", RepresentativeViewSet, basename="representatives") -router.register(r"projects", ProjectViewSet, basename="projects") +router.register(r"perimeters", PerimeterViewSet, basename="perimeters") router.register(r"risk-matrices", RiskMatrixViewSet, basename="risk-matrices") router.register(r"vulnerabilities", VulnerabilityViewSet, basename="vulnerabilities") router.register(r"risk-assessments", RiskAssessmentViewSet, basename="risk-assessments") diff --git a/backend/core/views.py b/backend/core/views.py index f753a1fdb..faaefeed8 100644 --- a/backend/core/views.py +++ b/backend/core/views.py @@ -243,47 +243,47 @@ def object(self, request, pk): # Risk Assessment -class ProjectViewSet(BaseModelViewSet): +class PerimeterViewSet(BaseModelViewSet): """ - API endpoint that allows projects to be viewed or edited. + API endpoint that allows perimeters to be viewed or edited. """ - model = Project + model = Perimeter filterset_fields = ["folder", "lc_status"] search_fields = ["name", "ref_id", "description"] @action(detail=False, name="Get status choices") def lc_status(self, request): - return Response(dict(Project.PRJ_LC_STATUS)) + return Response(dict(Perimeter.PRJ_LC_STATUS)) @action(detail=False, methods=["get"]) def names(self, request): uuid_list = request.query_params.getlist("id[]", []) - queryset = Project.objects.filter(id__in=uuid_list) + queryset = Perimeter.objects.filter(id__in=uuid_list) - return Response({str(project.id): project.name for project in queryset}) + return Response({str(perimeter.id): perimeter.name for perimeter in queryset}) @action(detail=False, methods=["get"]) def quality_check(self, request): """ - Returns the quality check of the projects + Returns the quality check of the perimeters """ (viewable_objects, _, _) = RoleAssignment.get_accessible_object_ids( - folder=Folder.get_root_folder(), user=request.user, object_type=Project + folder=Folder.get_root_folder(), user=request.user, object_type=Perimeter ) - projects = Project.objects.filter(id__in=viewable_objects) + perimeters = Perimeter.objects.filter(id__in=viewable_objects) res = { str(p.id): { - "project": ProjectReadSerializer(p).data, + "perimeter": PerimeterReadSerializer(p).data, "compliance_assessments": {"objects": {}}, "risk_assessments": {"objects": {}}, } - for p in projects + for p in perimeters } for compliance_assessment in ComplianceAssessment.objects.filter( - project__in=projects + perimeter__in=perimeters ): - res[str(compliance_assessment.project.id)]["compliance_assessments"][ + res[str(compliance_assessment.perimeter.id)]["compliance_assessments"][ "objects" ][str(compliance_assessment.id)] = { "object": ComplianceAssessmentReadSerializer( @@ -291,8 +291,8 @@ def quality_check(self, request): ).data, "quality_check": compliance_assessment.quality_check(), } - for risk_assessment in RiskAssessment.objects.filter(project__in=projects): - res[str(risk_assessment.project.id)]["risk_assessments"]["objects"][ + for risk_assessment in RiskAssessment.objects.filter(perimeter__in=perimeters): + res[str(risk_assessment.perimeter.id)]["risk_assessments"]["objects"][ str(risk_assessment.id) ] = { "object": RiskAssessmentReadSerializer(risk_assessment).data, @@ -303,20 +303,20 @@ def quality_check(self, request): @action(detail=True, methods=["get"], url_path="quality_check") def quality_check_detail(self, request, pk): """ - Returns the quality check of the project + Returns the quality check of the perimeter """ (viewable_objects, _, _) = RoleAssignment.get_accessible_object_ids( - folder=Folder.get_root_folder(), user=request.user, object_type=Project + folder=Folder.get_root_folder(), user=request.user, object_type=Perimeter ) if UUID(pk) in viewable_objects: - project = self.get_object() + perimeter = self.get_object() res = { - "project": ProjectReadSerializer(project).data, + "perimeter": PerimeterReadSerializer(perimeter).data, "compliance_assessments": {"objects": {}}, "risk_assessments": {"objects": {}}, } for compliance_assessment in ComplianceAssessment.objects.filter( - project=project + perimeter=perimeter ): res["compliance_assessments"]["objects"][ str(compliance_assessment.id) @@ -326,7 +326,7 @@ def quality_check_detail(self, request, pk): ).data, "quality_check": compliance_assessment.quality_check(), } - for risk_assessment in RiskAssessment.objects.filter(project=project): + for risk_assessment in RiskAssessment.objects.filter(perimeter=perimeter): res["risk_assessments"]["objects"][str(risk_assessment.id)] = { "object": RiskAssessmentReadSerializer(risk_assessment).data, "quality_check": risk_assessment.quality_check(), @@ -342,9 +342,9 @@ def ids(self, request): (viewable_items, _, _) = RoleAssignment.get_accessible_object_ids( folder=Folder.get_root_folder(), user=request.user, - object_type=Project, + object_type=Perimeter, ) - for item in Project.objects.filter(id__in=viewable_items): + for item in Perimeter.objects.filter(id__in=viewable_items): if my_map.get(item.folder.name) is None: my_map[item.folder.name] = {} my_map[item.folder.name].update({item.name: item.id}) @@ -670,8 +670,8 @@ class RiskAssessmentViewSet(BaseModelViewSet): model = RiskAssessment filterset_fields = [ - "project", - "project__folder", + "perimeter", + "perimeter__folder", "authors", "risk_matrix", "status", @@ -977,7 +977,7 @@ def duplicate(self, request, pk): duplicate_risk_assessment = RiskAssessment.objects.create( name=data["name"], description=data["description"], - project=Project.objects.get(id=data["project"]), + perimeter=Perimeter.objects.get(id=data["perimeter"]), version=data["version"], risk_matrix=risk_assessment.risk_matrix, eta=risk_assessment.eta, @@ -1556,8 +1556,8 @@ class RiskScenarioViewSet(BaseModelViewSet): model = RiskScenario filterset_fields = [ "risk_assessment", - "risk_assessment__project", - "risk_assessment__project__folder", + "risk_assessment__perimeter", + "risk_assessment__perimeter__folder", "treatment", "threats", "assets", @@ -1785,7 +1785,7 @@ def perform_update(self, serializer): if not RoleAssignment.is_access_allowed( risk_acceptance.get("approver"), Permission.objects.get(codename="approve_riskacceptance"), - scenario.risk_assessment.project.folder, + scenario.risk_assessment.perimeter.folder, ): raise ValidationError( "The approver is not allowed to approve this risk acceptance" @@ -1985,7 +1985,7 @@ def retrieve(self, request, *args, **kwargs): @action(detail=False, methods=["get"]) def org_tree(self, request): """ - Returns the tree of domains and projects + Returns the tree of domains and perimeters """ tree = {"name": "Global", "children": []} @@ -2617,8 +2617,8 @@ def get_mapped_ids( ) case "riskassessment": - _fields["project"] = Project.objects.get( - id=link_dump_database_ids.get(_fields["project"]) + _fields["perimeter"] = Perimeter.objects.get( + id=link_dump_database_ids.get(_fields["perimeter"]) ) _fields["risk_matrix"] = RiskMatrix.objects.get( urn=_fields.get("risk_matrix") @@ -2632,8 +2632,8 @@ def get_mapped_ids( ) case "complianceassessment": - _fields["project"] = Project.objects.get( - id=link_dump_database_ids.get(_fields["project"]) + _fields["perimeter"] = Perimeter.objects.get( + id=link_dump_database_ids.get(_fields["perimeter"]) ) _fields["framework"] = Framework.objects.get(urn=_fields["framework"]) @@ -3223,7 +3223,7 @@ class ComplianceAssessmentViewSet(BaseModelViewSet): """ model = ComplianceAssessment - filterset_fields = ["framework", "project", "status", "ebios_rm_studies"] + filterset_fields = ["framework", "perimeter", "status", "ebios_rm_studies"] search_fields = ["name", "description", "ref_id"] ordering_fields = ["name", "description"] diff --git a/backend/ebios_rm/serializers.py b/backend/ebios_rm/serializers.py index c9d6ba516..77441167f 100644 --- a/backend/ebios_rm/serializers.py +++ b/backend/ebios_rm/serializers.py @@ -27,7 +27,7 @@ class Meta: class EbiosRMStudyReadSerializer(BaseModelSerializer): str = serializers.CharField(source="__str__") - project = FieldsRelatedField(["id", "folder"]) + perimeter = FieldsRelatedField(["id", "folder"]) folder = FieldsRelatedField() reference_entity = FieldsRelatedField() risk_matrix = FieldsRelatedField() diff --git a/backend/iam/models.py b/backend/iam/models.py index 4af980f3b..f089c04c6 100644 --- a/backend/iam/models.py +++ b/backend/iam/models.py @@ -158,13 +158,13 @@ def get_folder(obj: Any): paths = [ ["folder"], ["parent_folder"], - ["project", "folder"], + ["perimeter", "folder"], ["entity", "folder"], ["provider_entity", "folder"], ["solution", "provider_entity", "folder"], - ["risk_assessment", "project", "folder"], - ["risk_scenario", "risk_assessment", "project", "folder"], - ["compliance_assessment", "project", "folder"], + ["risk_assessment", "perimeter", "folder"], + ["risk_scenario", "risk_assessment", "perimeter", "folder"], + ["compliance_assessment", "perimeter", "folder"], ] # Attempt to traverse each path until a valid folder is found or all paths are exhausted. diff --git a/backend/iam/tests/test_user.py b/backend/iam/tests/test_user.py index b07594bef..036e23e6d 100644 --- a/backend/iam/tests/test_user.py +++ b/backend/iam/tests/test_user.py @@ -9,7 +9,7 @@ class TestUser: pytestmark = pytest.mark.django_db - @pytest.mark.usefixtures("domain_project_fixture") + @pytest.mark.usefixtures("domain_perimeter_fixture") def test_reader_user_is_not_editor(self): user = User.objects.create_user(email="root@example.com", password="password") assert user is not None @@ -18,7 +18,7 @@ def test_reader_user_is_not_editor(self): reader_role = Role.objects.create(name="test reader") reader_permissions = Permission.objects.filter( codename__in=[ - "view_project", + "view_perimeter", "view_riskassessment", "view_appliedcontrol", "view_riskscenario", @@ -47,7 +47,7 @@ def test_reader_user_is_not_editor(self): assert len(editors) == 0 assert user not in editors - @pytest.mark.usefixtures("domain_project_fixture") + @pytest.mark.usefixtures("domain_perimeter_fixture") def test_editor_user_is_editor(self): user = User.objects.create_user(email="root@example.com", password="password") assert user is not None @@ -56,7 +56,7 @@ def test_editor_user_is_editor(self): editor_role = Role.objects.create(name="test editor") editor_permissions = Permission.objects.filter( codename__in=[ - "view_project", + "view_perimeter", "view_riskassessment", "view_appliedcontrol", "view_riskscenario", @@ -66,9 +66,9 @@ def test_editor_user_is_editor(self): "view_referencecontrol", "view_folder", "view_usergroup", - "add_project", - "change_project", - "delete_project", + "add_perimeter", + "change_perimeter", + "delete_perimeter", "add_riskassessment", "change_riskassessment", "delete_riskassessment", diff --git a/backend/serdes/tests/test_dump.py b/backend/serdes/tests/test_dump.py index 934416623..f558ba0b1 100644 --- a/backend/serdes/tests/test_dump.py +++ b/backend/serdes/tests/test_dump.py @@ -20,7 +20,7 @@ def valid_export_data(): }, }, { - "model": "project", + "model": "perimeter", "id": "2", "fields": { "name": "ISMS", diff --git a/backend/serdes/utils.py b/backend/serdes/utils.py index 867d906b7..87d2a0dde 100644 --- a/backend/serdes/utils.py +++ b/backend/serdes/utils.py @@ -16,7 +16,7 @@ AppliedControl, Evidence, Framework, - Project, + Perimeter, RiskAssessment, RiskMatrix, RiskScenario, @@ -45,7 +45,7 @@ AssetImportExportSerializer, AppliedControlImportExportSerializer, EvidenceImportExportSerializer, - ProjectImportExportSerializer, + PerimeterImportExportSerializer, RiskAssessmentImportExportSerializer, RiskScenarioImportExportSerializer, ComplianceAssessmentImportExportSerializer, @@ -72,66 +72,6 @@ from django.db import models from library.serializers import LoadedLibraryImportExportSerializer -from core.models import ( - Asset, - AppliedControl, - Evidence, - Framework, - Project, - RiskAssessment, - RiskMatrix, - RiskScenario, - ComplianceAssessment, - RequirementAssessment, - Vulnerability, - Threat, - ReferenceControl, - LoadedLibrary, -) - -from ebios_rm.models import ( - EbiosRMStudy, - FearedEvent, - RoTo, - OperationalScenario, - Stakeholder, - StrategicScenario, - AttackPath, -) - -from tprm.models import Entity - -from core.serializers import ( - FolderImportExportSerializer, - AssetImportExportSerializer, - AppliedControlImportExportSerializer, - EvidenceImportExportSerializer, - ProjectImportExportSerializer, - RiskAssessmentImportExportSerializer, - RiskScenarioImportExportSerializer, - ComplianceAssessmentImportExportSerializer, - RequirementAssessmentImportExportSerializer, - VulnerabilityImportExportSerializer, - ThreatImportExportSerializer, - ReferenceControlImportExportSerializer, - FrameworkImportExportSerializer, - RiskMatrixImportExportSerializer, -) - -from ebios_rm.serializers import ( - EbiosRMStudyImportExportSerializer, - FearedEventImportExportSerializer, - RoToImportExportSerializer, - OperationalScenarioImportExportSerializer, - StakeholderImportExportSerializer, - StrategicScenarioImportExportSerializer, - AttackPathImportExportSerializer, -) - -from tprm.serializers import EntityImportExportSerializer - -from library.serializers import LoadedLibraryImportExportSerializer - import structlog logger = structlog.get_logger(__name__) @@ -209,7 +149,7 @@ def import_export_serializer_class(model: Model) -> serializers.Serializer: Asset: AssetImportExportSerializer, AppliedControl: AppliedControlImportExportSerializer, Evidence: EvidenceImportExportSerializer, - Project: ProjectImportExportSerializer, + Perimeter: PerimeterImportExportSerializer, RiskAssessment: RiskAssessmentImportExportSerializer, RiskScenario: RiskScenarioImportExportSerializer, ComplianceAssessment: ComplianceAssessmentImportExportSerializer, @@ -429,10 +369,10 @@ def get_domain_export_objects(domain: Folder): .filter(content_type=Folder.ContentType.DOMAIN) .distinct() ) - projects = Project.objects.filter(folder__in=folders).distinct() + perimeters = Perimeter.objects.filter(folder__in=folders).distinct() risk_assessments = RiskAssessment.objects.filter( - Q(project__in=projects) | Q(folder__in=folders) + Q(perimeter__in=perimeters) | Q(folder__in=folders) ).distinct() risk_scenarios = RiskScenario.objects.filter( risk_assessment__in=risk_assessments @@ -463,7 +403,7 @@ def get_domain_export_objects(domain: Folder): ).distinct() compliance_assessments = ComplianceAssessment.objects.filter( - Q(project__in=projects) + Q(perimeter__in=perimeters) | Q(folder__in=folders) | Q(ebios_rm_studies__in=ebios_rm_studies) ).distinct() @@ -545,7 +485,7 @@ def get_domain_export_objects(domain: Folder): "appliedcontrol": applied_controls, "entity": entities, "evidence": evidences, - "project": projects, + "perimeter": perimeters, "complianceassessment": compliance_assessments, "requirementassessment": requirement_assessments, "ebiosrmstudy": ebios_rm_studies, diff --git a/backend/tprm/migrations/0004_remove_entityassessment_project_and_more.py b/backend/tprm/migrations/0004_remove_entityassessment_project_and_more.py new file mode 100644 index 000000000..2656b4bfa --- /dev/null +++ b/backend/tprm/migrations/0004_remove_entityassessment_project_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 5.1.5 on 2025-02-04 09:22 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0051_rename_project_perimeter_alter_perimeter_options_and_more"), + ("tprm", "0003_entityassessment_representatives"), + ] + + operations = [ + migrations.RenameField( + model_name="entityassessment", + old_name="project", + new_name="perimeter", + ), + migrations.AlterField( + model_name="entityassessment", + name="perimeter", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="core.perimeter", + verbose_name="Perimeter", + ), + ), + ] diff --git a/backend/tprm/serializers.py b/backend/tprm/serializers.py index 08b0b98fd..31e079c44 100644 --- a/backend/tprm/serializers.py +++ b/backend/tprm/serializers.py @@ -53,7 +53,7 @@ class Meta: class EntityAssessmentReadSerializer(BaseModelSerializer): compliance_assessment = FieldsRelatedField() evidence = FieldsRelatedField() - project = FieldsRelatedField() + perimeter = FieldsRelatedField() entity = FieldsRelatedField() folder = FieldsRelatedField() solutions = FieldsRelatedField(many=True) @@ -95,7 +95,7 @@ def _create_or_update_audit(self, instance, audit_data): audit = ComplianceAssessment.objects.create( name=instance.name, framework=audit_data["framework"], - project=instance.project, + perimeter=instance.perimeter, selected_implementation_groups=audit_data[ "selected_implementation_groups" ], @@ -103,7 +103,7 @@ def _create_or_update_audit(self, instance, audit_data): enclave = Folder.objects.create( content_type=Folder.ContentType.ENCLAVE, - name=f"{instance.project.name}/{instance.name}", + name=f"{instance.perimeter.name}/{instance.name}", parent_folder=instance.folder, ) audit.folder = enclave diff --git a/backend/tprm/views.py b/backend/tprm/views.py index 0afedcd1d..1ad88e7ad 100644 --- a/backend/tprm/views.py +++ b/backend/tprm/views.py @@ -28,7 +28,7 @@ class EntityAssessmentViewSet(BaseModelViewSet): """ model = EntityAssessment - filterset_fields = ["status", "project", "project__folder", "authors", "entity"] + filterset_fields = ["status", "perimeter", "perimeter__folder", "authors", "entity"] def destroy(self, request, *args, **kwargs): instance = self.get_object() diff --git a/cli/clica.py b/cli/clica.py index 1b72564bf..f0020a182 100755 --- a/cli/clica.py +++ b/cli/clica.py @@ -159,9 +159,9 @@ def get_folders(): @click.command() -def get_projects(): - """getting projects as a json""" - print(json.dumps(ids_map("projects"), ensure_ascii=False)) +def get_perimeters(): + """getting perimeters as a json""" + print(json.dumps(ids_map("perimeters"), ensure_ascii=False)) @click.command() @@ -205,7 +205,7 @@ def batch_create(model, items, folder_id): @click.command() @click.option("--file", required=True, help="") @click.option("--folder", required=True, help="") -@click.option("--project", required=True, help="") +@click.option("--perimeter", required=True, help="") @click.option("--matrix", required=True, help="") @click.option("--name", required=True, help="") @click.option( @@ -215,21 +215,21 @@ def batch_create(model, items, folder_id): default=True, help="Create all associated objects (threats, assets)", ) -def import_risk_assessment(file, folder, project, name, matrix, create_all): +def import_risk_assessment(file, folder, perimeter, name, matrix, create_all): """crawl a risk assessment (see template) and create the assoicated objects""" df = pd.read_csv(file, delimiter=";") headers = { "Authorization": f"Token {TOKEN}", } folder_id = ids_map("folders").get(folder) - project_id = ids_map("projects", folder=folder).get(project) + perimeter_id = ids_map("perimeters", folder=folder).get(perimeter) matrix_id = ids_map("risk-matrices", folder="Global").get(matrix) # post to create risk assessment data = { "name": name, "folder": folder_id, - "project": project_id, + "perimeter": perimeter_id, "risk_matrix": matrix_id, } res = requests.post( @@ -476,7 +476,7 @@ def upload_attachment(file, name): cli.add_command(get_folders) -cli.add_command(get_projects) +cli.add_command(get_perimeters) cli.add_command(auth) cli.add_command(import_assets) cli.add_command(import_controls) diff --git a/enterprise/frontend/src/lib/components/SideBar/navData.ts b/enterprise/frontend/src/lib/components/SideBar/navData.ts index 798803cfe..8e9f01774 100644 --- a/enterprise/frontend/src/lib/components/SideBar/navData.ts +++ b/enterprise/frontend/src/lib/components/SideBar/navData.ts @@ -8,7 +8,7 @@ export const navData = { fa_icon: 'fa-solid fa-gauge', href: '/analytics', permissions: [ - 'view_project', + 'view_perimeter', 'view_riskscenario', 'view_referencecontrol', 'view_assessment', @@ -20,7 +20,7 @@ export const navData = { fa_icon: 'fa-solid fa-list-check', href: '/my-assignments', permissions: [ - 'view_project', + 'view_perimeter', 'view_riskscenario', 'view_referencecontrol', 'view_assessment', @@ -37,7 +37,7 @@ export const navData = { fa_icon: 'fa-solid fa-hexagon-nodes', href: '/insights/impact-analysis', permissions: [ - 'view_project', + 'view_perimeter', 'view_riskscenario', 'view_referencecontrol', 'view_assessment', @@ -49,7 +49,7 @@ export const navData = { fa_icon: 'fa-solid fa-ranking-star', href: '/insights/priority-review', permissions: [ - 'view_project', + 'view_perimeter', 'view_riskscenario', 'view_referencecontrol', 'view_assessment', @@ -61,7 +61,7 @@ export const navData = { fa_icon: 'fa-solid fa-table-columns', href: '/insights/timeline-view', permissions: [ - 'view_project', + 'view_perimeter', 'view_riskscenario', 'view_referencecontrol', 'view_assessment', @@ -80,9 +80,9 @@ export const navData = { exclude: ['BI-RL-TPR'] }, { - name: 'projects', + name: 'perimeters', fa_icon: 'fa-solid fa-cubes', - href: '/projects' + href: '/perimeters' }, { name: 'users', diff --git a/frontend/messages/ar.json b/frontend/messages/ar.json index 8d6aebd01..95cfd7c1c 100644 --- a/frontend/messages/ar.json +++ b/frontend/messages/ar.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "ابدأ التدقيق", "addEvidence": "أضف دليلًا", "addDomain": "أضف نطاقًا", - "addProject": "أضف مشروعًا", + "addPerimeter": "أضف محيطًا", "addUser": "أضف مستخدمًا", "addPolicy": "أضف سياسة", "associatedThreats": "التهديدات المرتبطة", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "التدقيقات المرتبطة", "associatedEvidences": "الأدلة المرتبطة", "associatedDomains": "النطاقات المرتبطة", - "associatedProjects": "المشاريع المرتبطة", + "associatedPerimeters": "المحيطات المرتبطة", "associatedUsers": "المستخدمين المرتبطين", "associatedEntityAssessments": "تقييمات الكيانات المرتبطة", "associatedRepresentatives": "الممثلون المرتبطون", @@ -79,7 +79,7 @@ "frameworks": "الأطر", "frameworksColon": "الأطر:", "domains": "النطاقات", - "projects": "المشاريع", + "perimeters": "المحيطات", "users": "المستخدمين", "user": "المستخدم", "userGroups": "مجموعات المستخدمين", @@ -117,7 +117,7 @@ "residualLevel": "المستوى المتبقي", "riskMatrix": "مصفوفة المخاطر", "riskMatrixColon": "مصفوفة المخاطر:", - "project": "المشروع", + "perimeter": "المحيط", "folder": "المجلد", "riskAssessment": "تقييم المخاطر", "threat": "التهديد", @@ -185,9 +185,8 @@ "summary": "الملخص", "composer": "الملحن", "statistics": "الإحصائيات", - "myProjects": "مشاريعي", + "myPerimeters": "محيطاتي", "scenarios": "السيناريوهات", - "assignedProjects": "مُعين إلى {number} مشروع", "currentRiskLevelPerScenario": "مستوى المخاطر الحالي لكل سيناريو مخاطر", "residualRiskLevelPerScenario": "مستوى المخاطر المتبقي لكل سيناريو مخاطر", "appliedControlsStatus": "حالة التحكمات المطبقة", @@ -222,7 +221,7 @@ "noPendingAppliedControl": "لا توجد تحكمات مطبقة معلقة", "rankingScoreDefintion": "درجة التصنيف هي مقياس تكيفي يجمع بين معلومات الجهد والمستوى الحالي للمخاطر، ويعبرها مع البيانات الأخرى لمساعدتك في تحديد الأولويات", "actions": "الإجراءات", - "projectsSummaryEmpty": "ملخص المشاريع فارغ", + "perimetersSummaryEmpty": "ملخص المحيطات فارغ", "riskOpen": "المخاطر: مفتوحة", "riskMitigate": "المخاطر: التخفيف", "riskAccept": "المخاطر: القبول", diff --git a/frontend/messages/cs.json b/frontend/messages/cs.json index d3f695606..763e4480e 100644 --- a/frontend/messages/cs.json +++ b/frontend/messages/cs.json @@ -23,7 +23,7 @@ "addComplianceAssessment": "Přidat audit", "addEvidence": "Přidat důkaz", "addDomain": "Přidat doménu", - "addProject": "Přidat projekt", + "addPerimeter": "Přidat obvod", "addUser": "Přidat uživatele", "addPolicy": "Přidat politiku", "associatedThreats": "Přidružené hrozby", @@ -36,7 +36,7 @@ "associatedComplianceAssessments": "Přidružené audity", "associatedEvidences": "Přidružené důkazy", "associatedDomains": "Přidružené domény", - "associatedProjects": "Přidružené projekty", + "associatedPerimeters": "Přidružené obvody", "associatedUsers": "Přidružení uživatelé", "associatedEntityAssessments": "Přidružená hodnocení entit", "associatedRepresentatives": "Přidružení zástupci", @@ -76,7 +76,7 @@ "frameworks": "Rámce", "frameworksColon": "Rámce:", "domains": "Domény", - "projects": "Projekty", + "perimeters": "Obvody", "users": "Uživatelé", "user": "Uživatel", "userGroups": "Uživatelské skupiny", @@ -114,7 +114,7 @@ "residualLevel": "Zbytková úroveň", "riskMatrix": "Riziková matice", "riskMatrixColon": "Riziková matice:", - "project": "Projekt", + "perimeter": "Obvod", "folder": "Doména", "riskAssessment": "Hodnocení rizika", "threat": "Hrozba", @@ -182,9 +182,8 @@ "summary": "Souhrn", "composer": "Správa závislostí", "statistics": "Statistiky", - "myProjects": "Moje projekty", + "myPerimeters": "Moje obvody", "scenarios": "Scénáře", - "assignedProjects": "Přiděleno {number} projektů", "currentRiskLevelPerScenario": "Současná úroveň rizika na scénář", "residualRiskLevelPerScenario": "Zbytková úroveň rizika na scénář", "appliedControlsStatus": "Stav aplikovaných kontrol", @@ -219,7 +218,7 @@ "noPendingAppliedControl": "Žádná čekající aplikovaná kontrola", "rankingScoreDefintion": "Hodnotící skóre je adaptivní metrika, která kombinuje informace o úsilí a současné úrovni rizika a kříží je s dalšími daty, aby vám pomohla s prioritizací", "actions": "Akce", - "projectsSummaryEmpty": "Souhrn projektů je prázdný", + "perimetersSummaryEmpty": "Obvodový souhrn prázdný", "riskOpen": "Riziko: otevřené", "riskMitigate": "Riziko: zmírnit", "riskAccept": "Riziko: přijmout", diff --git a/frontend/messages/de.json b/frontend/messages/de.json index 4c143db1e..584a05bee 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "Audit starten", "addEvidence": "Beweis hinzufügen", "addDomain": "Domäne hinzufügen", - "addProject": "Projekt hinzufügen", + "addPerimeter": "Bereich hinzufügen", "addUser": "Benutzer hinzufügen", "addPolicy": "Richtlinie hinzufügen", "associatedThreats": "Zugehörige Bedrohungen", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "Zugehörige Audits", "associatedEvidences": "Zugehörige Beweise", "associatedDomains": "Zugehörige Domänen", - "associatedProjects": "Zugehörige Projekte", + "associatedPerimeters": "Zugehörige Bereiche", "associatedUsers": "Zugehörige Benutzer", "associatedEntityAssessments": "Bewertungen verbundener Unternehmen", "associatedRepresentatives": "Assoziierte Vertreter", @@ -78,7 +78,7 @@ "frameworks": "Frameworks", "frameworksColon": "Rahmenbedingungen:", "domains": "Domänen", - "projects": "Projekte", + "perimeters": "Bereiche", "users": "Benutzer", "user": "Benutzer", "userGroups": "Benutzergruppen", @@ -116,7 +116,7 @@ "residualLevel": "Restrisiko-Niveau", "riskMatrix": "Risikomatrix", "riskMatrixColon": "Risikomatrix:", - "project": "Projekt", + "perimeter": "Bereich", "folder": "Ordner", "riskAssessment": "Risikobewertung", "threat": "Bedrohung", @@ -184,9 +184,8 @@ "summary": "Zusammenfassung", "composer": "Komponist", "statistics": "Statistiken", - "myProjects": "Meine Projekte", + "myPerimeters": "Meine Bereiche", "scenarios": "Szenarien", - "assignedProjects": "Zugewiesen zu {number} Projekt{en}", "currentRiskLevelPerScenario": "Aktuelles Risikoniveau pro Risikoszenario", "residualRiskLevelPerScenario": "Restrisiko-Niveau pro Risikoszenario", "appliedControlsStatus": "Status der angewendeten Kontrollen", @@ -221,7 +220,7 @@ "noPendingAppliedControl": "Keine ausstehenden angewendeten Kontrollen", "rankingScoreDefintion": "Die Rangordnungspunktzahl ist eine adaptive Metrik, die die Informationen von Aufwand und aktuellem Risikoniveau kombiniert und diese mit anderen Daten kreuzt, um Ihnen bei der Priorisierung zu helfen", "actions": "Aktionen", - "projectsSummaryEmpty": "Projektzusammenfassung ist leer", + "perimetersSummaryEmpty": "Bereichzusammenfassung ist leer", "riskOpen": "Risiko: offen", "riskMitigate": "Risiko: mindern", "riskAccept": "Risiko: akzeptieren", diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 3ef3e21f1..9c7fac48e 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "New Audit", "addEvidence": "Add evidence", "addDomain": "Add domain", - "addProject": "Add project", + "addPerimeter": "Add perimeter", "addUser": "Add user", "addPolicy": "Add policy", "associatedThreats": "Associated threats", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "Associated Audits", "associatedEvidences": "Associated evidences", "associatedDomains": "Associated domains", - "associatedProjects": "Associated projects", + "associatedPerimeters": "Associated perimeters", "associatedUsers": "Associated users", "associatedEntityAssessments": "Associated entity assessments", "associatedRepresentatives": "Associated representatives", @@ -80,7 +80,7 @@ "frameworks": "Frameworks", "frameworksColon": "Frameworks:", "domains": "Domains", - "projects": "Projects", + "perimeters": "Perimeters", "users": "Users", "user": "User", "userGroups": "User groups", @@ -118,7 +118,7 @@ "residualLevel": "Residual level", "riskMatrix": "Risk matrix", "riskMatrixColon": "Risk matrix:", - "project": "Project", + "perimeter": "Perimeter", "folder": "Domain", "riskAssessment": "Risk assessment", "threat": "Threat", @@ -187,9 +187,8 @@ "summary": "Summary", "composer": "Composer", "statistics": "Statistics", - "myProjects": "My projects", + "myPerimeters": "My perimeters", "scenarios": "Scenarios", - "assignedProjects": "Assigned to {number} project{s}", "currentRiskLevelPerScenario": "Current risk level per risk scenario", "residualRiskLevelPerScenario": "Residual risk level per risk scenario", "appliedControlsStatus": "Applied controls status", @@ -212,8 +211,8 @@ "reviewers": "Reviewers", "processButton": "Process", "selectTargets": "Select your targets", - "composerDescription": "This will help you aggregate multiple components (projects) to get the compiled view on your risk. This is particularly useful for two use cases", - "composerDescription1": "business intelligence approach to focus on a specific subset across different project domains (eg. across divisions)", + "composerDescription": "This will help you aggregate multiple components (perimeters) to get the compiled view on your risk. This is particularly useful for two use cases", + "composerDescription1": "business intelligence approach to focus on a specific subset across different perimeter domains (eg. across divisions)", "composerDescription2": "you are interested in the risk assessment of a specific system, for which you need the risk assessment of the underlying components", "overallCompliance": "Overall compliance", "exportButton": "Export", @@ -224,7 +223,7 @@ "noPendingAppliedControl": "No pending applied control", "rankingScoreDefintion": "Ranking score is an adaptive metric that combines the information of effort and current risk level, and crosses it with the other data to assist you for the prioritization", "actions": "Actions", - "projectsSummaryEmpty": "Projects summary is empty", + "perimetersSummaryEmpty": "Perimeters summary is empty", "riskOpen": "Risk: open", "riskMitigate": "Risk: mitigate", "riskAccept": "Risk: accept", @@ -768,7 +767,7 @@ "mailFailedToSend": "The mail failed to be sent", "questionOrQuestions": "Question(s)", "successfullyUpdatedClientSettings": "Client settings successfully updated, please refresh the page.", - "xRaysEmptyMessage": "You have to create at least one project to use X-rays.", + "xRaysEmptyMessage": "You have to create at least one perimeter to use X-rays.", "suggestControls": "Suggest controls", "createAppliedControlsFromSuggestionsHelpText": "Create applied controls from the framework's requirements' suggested reference controls", "createAppliedControlsFromSuggestionsSuccess": "Applied controls successfully created from the suggested reference controls", @@ -1106,8 +1105,8 @@ "tourOrganizationDescription": "This is where you will define the hierarchy and perimeters of your organization.
Click on it.", "tourDomainsDescription": "Domains allow you to isolate your objects using the associated roles. You will need at least one.
Click on it.", "tourDomainAddDescription": "This where you will be able to create a new domain.", - "tourProjectsDescription": "Projects are functional perimeters within a domain. You will need at least one.
Click on it.", - "tourProjectAddDescription": "This is where you will be able to create a project.", + "tourPerimetersDescription": "Perimeters are functional sets within a domain. You will need at least one.
Click on it.", + "tourPerimeterAddDescription": "This is where you will be able to create a perimeter.", "tourCatalogTitle": "Catalog Overview", "tourCatalogDescription": "The catalog is where you will be able to import frameworks, threats, matrices and other predifined objects", "tourCatalogBrowseDescription": "You will be able to browse the loaded objects per category and import new ones.
Click on it.", diff --git a/frontend/messages/es.json b/frontend/messages/es.json index 2fc0c8792..6e29ff84e 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "Iniciar auditoría", "addEvidence": "Agregar evidencia", "addDomain": "Agregar dominio", - "addProject": "Agregar proyecto", + "addPerimeter": "Agregar alcance", "addUser": "Agregar usuario", "addPolicy": "Agregar política", "associatedThreats": "Amenazas asociadas", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "Auditorías asociadas", "associatedEvidences": "Evidencias asociadas", "associatedDomains": "Dominios asociados", - "associatedProjects": "Proyectos asociados", + "associatedPerimeters": "Alcances asociados", "associatedUsers": "Usuarios asociados", "associatedEntityAssessments": "Evaluaciones de entidades asociadas", "associatedRepresentatives": "Representantes asociados", @@ -78,7 +78,7 @@ "frameworks": "Marcos", "frameworksColon": "Marcos:", "domains": "Dominios", - "projects": "Proyectos", + "perimeters": "Alcances", "users": "Usuarios", "user": "Usuario", "userGroups": "Grupos de usuarios", @@ -116,7 +116,7 @@ "residualLevel": "Nivel residual", "riskMatrix": "Matriz de riesgos", "riskMatrixColon": "Matriz de riesgo:", - "project": "Proyecto", + "perimeter": "Alcance", "folder": "Carpeta", "riskAssessment": "Evaluación de riesgos", "threat": "Amenaza", @@ -184,9 +184,8 @@ "summary": "Resumen", "composer": "Compositor", "statistics": "Estadísticas", - "myProjects": "Mis proyectos", + "myPerimeters": "Mis Alcances", "scenarios": "Escenarios", - "assignedProjects": "Asignado a {number} proyecto{s}", "currentRiskLevelPerScenario": "Nivel de riesgo actual por escenario de riesgo", "residualRiskLevelPerScenario": "Nivel de riesgo residual por escenario de riesgo", "appliedControlsStatus": "Estado de los controles aplicados", @@ -221,7 +220,7 @@ "noPendingAppliedControl": "No hay controles aplicados pendientes", "rankingScoreDefintion": "El puntaje de clasificación es una métrica adaptativa que combina la información del esfuerzo y el nivel de riesgo actual, y lo cruza con otros datos para ayudarlo en la priorización", "actions": "Acciones", - "projectsSummaryEmpty": "Resumen de proyectos vacío", + "perimetersSummaryEmpty": "Resumen de alcances vacío", "riskOpen": "Riesgo: abierto", "riskMitigate": "Riesgo: mitigar", "riskAccept": "Riesgo: aceptar", diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index 8ab2aa4d2..7864b699b 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "Démarrer l'audit", "addEvidence": "Ajouter une preuve", "addDomain": "Ajouter un domaine", - "addProject": "Ajouter un projet", + "addPerimeter": "Ajouter un périmètre", "addUser": "Ajouter un utilisateur", "addPolicy": "Ajouter une politique", "associatedThreats": "Menaces associées", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "Audits associés", "associatedEvidences": "Preuves associées", "associatedDomains": "Domaines associés", - "associatedProjects": "Projets associés", + "associatedPerimeters": "Périmètres associés", "associatedUsers": "Utilisateurs associés", "associatedEntityAssessments": "Évaluations des entités associées", "associatedRepresentatives": "Représentants associés", @@ -80,7 +80,7 @@ "frameworks": "Référentiels", "frameworksColon": "Référentiels :", "domains": "Domaines", - "projects": "Projets", + "perimeters": "Périmètres", "users": "Utilisateurs", "user": "Utilisateur", "userGroups": "Groupes d'utilisateurs", @@ -118,7 +118,7 @@ "residualLevel": "Niveau résiduel", "riskMatrix": "Matrice de risque", "riskMatrixColon": "Matrice des risques :", - "project": "Projet", + "perimeter": "Périmètre", "folder": "Domaine", "riskAssessment": "Analyse de risque", "threat": "Menace", @@ -187,9 +187,8 @@ "summary": "Synthèse", "composer": "Compositeur", "statistics": "Statistiques", - "myProjects": "Mes projets", + "myPerimeters": "Mes périmètres", "scenarios": "Scénarios", - "assignedProjects": "Assigné à {number} projet{s}", "currentRiskLevelPerScenario": "Niveau de risque actuel par scénario de risque", "residualRiskLevelPerScenario": "Niveau de risque résiduel par scénario de risque", "appliedControlsStatus": "Statut des mesures appliquées", @@ -224,7 +223,7 @@ "noPendingAppliedControl": "Aucune mesure appliquée en attente", "rankingScoreDefintion": "Le score de classement est une mesure adaptative qui combine les informations relatives à l'effort et au niveau de risque courant, et les croise avec d'autres données pour vous aider à établir des priorités", "actions": "Actions", - "projectsSummaryEmpty": "Le résumé des projets est vide", + "perimetersSummaryEmpty": "Le résumé des périmètres est vide", "riskOpen": "Risque : ouvert", "riskMitigate": "Risque : atténué", "riskAccept": "Risque : accepté", @@ -1098,8 +1097,8 @@ "tourOrganizationDescription": "C'est ici que vous définirez la hiérarchie et les périmètres de votre organisation.
Cliquez dessus.", "tourDomainsDescription": "Les domaines vous permettent d'isoler vos objets en utilisant les rôles associés. Vous en aurez besoin d'au moins un.
Cliquez dessus.", "tourDomainAddDescription": "C'est ici que vous pourrez créer un nouveau domaine.", - "tourProjectsDescription": "Les projets sont des périmètres fonctionnels au sein d'un domaine. Vous en aurez besoin d'au moins un.
Cliquez dessus.", - "tourProjectAddDescription": "C'est ici que vous pourrez créer un projet.", + "tourPerimetersDescription": "Les périmètres sont des contours fonctionnels au sein d'un domaine. Vous en aurez besoin d'au moins un.
Cliquez dessus.", + "tourPerimeterAddDescription": "C'est ici que vous pourrez créer un périmètre.", "tourCatalogTitle": "Aperçu du Catalogue", "tourCatalogDescription": "Le catalogue est l'endroit où vous pourrez importer des référentiels, des menaces, des matrices et d'autres objets prédéfinis", "tourCatalogBrowseDescription": "Vous pourrez parcourir les objets chargés par catégorie et en importer de nouveaux.
Cliquez dessus.", diff --git a/frontend/messages/hi.json b/frontend/messages/hi.json index e606d3c37..c7ce6b257 100644 --- a/frontend/messages/hi.json +++ b/frontend/messages/hi.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "नया ऑडिट", "addEvidence": "साक्ष्य जोड़ें", "addDomain": "डोमेन जोड़ें", - "addProject": "प्रोजेक्ट जोड़ें", + "addPerimeter": "परिधि जोड़ें", "addUser": "उपयोगकर्ता जोड़ें", "addPolicy": "नीति जोड़ें", "associatedThreats": "संबंधित खतरे", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "संबंधित ऑडिट", "associatedEvidences": "संबंधित साक्ष्य", "associatedDomains": "संबंधित डोमेन", - "associatedProjects": "संबंधित प्रोजेक्ट", + "associatedPerimeters": "संबंधित परिधि", "associatedUsers": "संबंधित उपयोगकर्ता", "associatedEntityAssessments": "संबद्ध इकाई मूल्यांकन", "associatedRepresentatives": "संबद्ध प्रतिनिधि", @@ -78,7 +78,7 @@ "frameworks": "फ्रेमवर्क", "frameworksColon": "फ्रेमवर्क:", "domains": "डोमेन", - "projects": "प्रोजेक्ट्स", + "perimeters": "परिधियाँ", "users": "उपयोगकर्ता", "user": "उपयोगकर्ता", "userGroups": "उपयोगकर्ता समूह", @@ -116,7 +116,7 @@ "residualLevel": "अवशिष्ट स्तर", "riskMatrix": "जोखिम मैट्रिक्स", "riskMatrixColon": "जोखिम मैट्रिक्स:", - "project": "प्रोजेक्ट", + "perimeter": "परिधि", "folder": "फ़ोल्डर", "riskAssessment": "जोखिम आकलन", "threat": "खतरा", @@ -184,9 +184,8 @@ "summary": "सारांश", "composer": "रचनाकार", "statistics": "आँकड़े", - "myProjects": "मेरे प्रोजेक्ट", + "myPerimeters": "मेरी परिधियाँ", "scenarios": "परिदृश्य", - "assignedProjects": "{number} प्रोजेक्ट{s} के लिए असाइन किया गया", "currentRiskLevelPerScenario": "जोखिम परिदृश्य प्रति वर्तमान जोखिम स्तर", "residualRiskLevelPerScenario": "जोखिम परिदृश्य प्रति अवशिष्ट जोखिम स्तर", "appliedControlsStatus": "लागू नियंत्रण स्थिति", @@ -221,7 +220,7 @@ "noPendingAppliedControl": "कोई लंबित लागू नियंत्रण नहीं", "rankingScoreDefintion": "रैंकिंग स्कोर एक अनुकूलनशील मेट्रिक है जो प्रयास और वर्तमान जोखिम स्तर की जानकारी को जोड़ता है, और आपको प्राथमिकता के लिए सहायता प्रदान करने के लिए अन्य डेटा के साथ इसे पार करता है", "actions": "कार्रवाई", - "projectsSummaryEmpty": "प्रोजेक्ट्स सारांश खाली है", + "perimetersSummaryEmpty": "परिधि सारांश खाली है", "riskOpen": "जोखिम: खुला", "riskMitigate": "जोखिम: कम करें", "riskAccept": "जोखिम: स्वीकार करें", diff --git a/frontend/messages/id.json b/frontend/messages/id.json index 4e3c3c519..b4c6da8a2 100644 --- a/frontend/messages/id.json +++ b/frontend/messages/id.json @@ -26,7 +26,7 @@ "addComplianceAssessment": "Audit Baru", "addEvidence": "Tambahkan bukti", "addDomain": "Tambahkan domain", - "addProject": "Tambahkan proyek", + "addPerimeter": "Tambahkan lingkup", "addUser": "Tambahkan pengguna", "addPolicy": "Tambahkan kebijakan", "associatedThreats": "Ancaman terkait", @@ -39,7 +39,7 @@ "associatedComplianceAssessments": "Audit terkait", "associatedEvidences": "Bukti terkait", "associatedDomains": "Domain terkait", - "associatedProjects": "Proyek terkait", + "associatedPerimeters": "Lingkup terkait", "associatedUsers": "Pengguna terkait", "associatedEntityAssessments": "Penilaian entitas terkait", "associatedRepresentatives": "Perwakilan terkait", @@ -81,7 +81,7 @@ "frameworks": "Kerangka kerja", "frameworksColon": "Kerangka kerja:", "domains": "Domain", - "projects": "Proyek", + "perimeters": "Lingkup", "users": "Pengguna", "user": "Pengguna", "userGroups": "Grup pengguna", @@ -119,7 +119,7 @@ "residualLevel": "Tingkat residu", "riskMatrix": "Matriks risiko", "riskMatrixColon": "Matriks risiko:", - "project": "Proyek", + "perimeter": "Lingkup", "folder": "Domain", "riskAssessment": "Penilaian risiko", "threat": "Ancaman", @@ -187,9 +187,8 @@ "summary": "Ringkasan", "composer": "Komposer", "statistics": "Statistik", - "myProjects": "Proyek saya", + "myPerimeters": "Lingkup saya", "scenarios": "Skenario", - "assignedProjects": "Ditugaskan ke {number} proyek{s}", "currentRiskLevelPerScenario": "Tingkat risiko saat ini per skenario risiko", "residualRiskLevelPerScenario": "Tingkat risiko residu per skenario risiko", "appliedControlsStatus": "Status kontrol yang diterapkan", @@ -224,7 +223,7 @@ "noPendingAppliedControl": "Tidak ada kontrol yang diterapkan yang masih tertunda", "rankingScoreDefintion": "Skor peringkat adalah metrik adaptif yang menggabungkan informasi tentang upaya dan tingkat risiko saat ini, serta menganalisis data lainnya untuk membantu Anda menentukan prioritas", "actions": "Tindakan", - "projectsSummaryEmpty": "Ringkasan proyek kosong", + "perimetersSummaryEmpty": "Ringkasan lingkup kosong", "riskOpen": "Risiko: terbuka", "riskMitigate": "Risiko: mitigasi", "riskAccept": "Risiko: diterima", diff --git a/frontend/messages/it.json b/frontend/messages/it.json index 89f158fdb..4fd8e05f2 100644 --- a/frontend/messages/it.json +++ b/frontend/messages/it.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "Inizia audit", "addEvidence": "Aggiungi prova", "addDomain": "Aggiungi dominio", - "addProject": "Aggiungi progetto", + "addPerimeter": "Aggiungi ambito", "addUser": "Aggiungi utente", "addPolicy": "Aggiungi politica", "associatedThreats": "Minacce associate", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "Audit associati", "associatedEvidences": "Prove associate", "associatedDomains": "Domini associati", - "associatedProjects": "Progetti associati", + "associatedPerimeters": "Ambiti associati", "associatedUsers": "Utenti associati", "associatedEntityAssessments": "Valutazioni di entità associate", "associatedRepresentatives": "Rappresentanti associati", @@ -78,7 +78,7 @@ "frameworks": "Framework", "frameworksColon": "Framework:", "domains": "Domini", - "projects": "Progetti", + "perimeters": "Ambiti", "users": "Utenti", "user": "Utente", "userGroups": "Gruppi di utenti", @@ -116,7 +116,7 @@ "residualLevel": "Rischio residuo", "riskMatrix": "Matrice del rischio", "riskMatrixColon": "Matrice del rischio:", - "project": "Progetto", + "perimeter": "Ambito", "folder": "Cartella", "riskAssessment": "Valutazione del rischio", "threat": "Minaccia", @@ -184,9 +184,8 @@ "summary": "Riepilogo", "composer": "Autore", "statistics": "Statistiche", - "myProjects": "I miei progetti", + "myPerimeters": "I miei ambiti", "scenarios": "Scenari", - "assignedProjects": "Assegnato al progetto{i} {number}", "currentRiskLevelPerScenario": "Rischio attuale associato allo scenario di rischio", "residualRiskLevelPerScenario": "Rischio residuo associato allo scenario di rischio", "appliedControlsStatus": "Stato di avanzamento dei controlli applicati", @@ -221,7 +220,7 @@ "noPendingAppliedControl": "Nessun controllo applicato in sospeso", "rankingScoreDefintion": "Il punteggio è una metrica adattiva che combina le informazioni sull'impegno e il livello di rischio attuale e le incrocia con altri dati per aiutarti ad assegnare le priorità", "actions": "Azioni", - "projectsSummaryEmpty": "Riepilogo del progetto", + "perimetersSummaryEmpty": "Riepilogo del ambito", "riskOpen": "Rischio: da valutare", "riskMitigate": "Rischio: da mitigare", "riskAccept": "Rischio: da accettare", diff --git a/frontend/messages/nl.json b/frontend/messages/nl.json index ba268fe3f..2275febf7 100644 --- a/frontend/messages/nl.json +++ b/frontend/messages/nl.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "Audit starten", "addEvidence": "Bewijs toevoegen", "addDomain": "Domein toevoegen", - "addProject": "Project toevoegen", + "addPerimeter": "Perimeter toevoegen", "addUser": "Gebruiker toevoegen", "addPolicy": "Beleid toevoegen", "associatedThreats": "Geassocieerde bedreigingen", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "Geassocieerde audits", "associatedEvidences": "Geassocieerde bewijzen", "associatedDomains": "Geassocieerde domeinen", - "associatedProjects": "Geassocieerde projecten", + "associatedPerimeters": "Geassocieerde perimeters", "associatedUsers": "Geassocieerde gebruikers", "associatedEntityAssessments": "Beoordelingen van geassocieerde entiteiten", "associatedRepresentatives": "Geassocieerde vertegenwoordigers", @@ -78,7 +78,7 @@ "frameworks": "Kaders", "frameworksColon": "Kaders:", "domains": "Domeinen", - "projects": "Projecten", + "perimeters": "Perimeters", "users": "Gebruikers", "user": "Gebruiker", "userGroups": "Gebruikersgroepen", @@ -116,7 +116,7 @@ "residualLevel": "Restniveau", "riskMatrix": "Risicomatrix", "riskMatrixColon": "Risicomatrix:", - "project": "Project", + "perimeter": "Perimeter", "folder": "Map", "riskAssessment": "Risicobeoordeling", "threat": "Bedreiging", @@ -184,9 +184,8 @@ "summary": "Samenvatting", "composer": "Samensteller", "statistics": "Statistieken", - "myProjects": "Mijn projecten", + "myPerimeters": "Mijn perimeters", "scenarios": "Scenario's", - "assignedProjects": "Toegewezen aan {number} project{en}", "currentRiskLevelPerScenario": "Huidig risiconiveau per risicoscenario", "residualRiskLevelPerScenario": "Rest risiconiveau per risicoscenario", "appliedControlsStatus": "Status van toegepaste controles", @@ -209,8 +208,8 @@ "reviewers": "Beoordelaars", "processButton": "Verwerken", "selectTargets": "Selecteer je doelen", - "composerDescription": "Dit zal je helpen meerdere componenten (projecten) samen te voegen om een samengestelde weergave van je risico te krijgen. Dit is vooral nuttig voor twee gebruiksscenario's", - "composerDescription1": "business intelligence benadering om te focussen op een specifieke subset over verschillende projectdomeinen (bijv. over afdelingen)", + "composerDescription": "Dit zal je helpen meerdere componenten (perimeteren) samen te voegen om een samengestelde weergave van je risico te krijgen. Dit is vooral nuttig voor twee gebruiksscenario's", + "composerDescription1": "business intelligence benadering om te focussen op een specifieke subset over verschillende perimeterdomeinen (bijv. over afdelingen)", "composerDescription2": "je bent geïnteresseerd in de risicobeoordeling van een specifiek systeem, waarvoor je de risicobeoordeling van de onderliggende componenten nodig hebt", "overallCompliance": "Algemene naleving", "exportButton": "Exporteren", @@ -221,7 +220,7 @@ "noPendingAppliedControl": "Geen wachtende toegepaste controle", "rankingScoreDefintion": "Rangschikkingsscore is een adaptieve maatstaf die de informatie van inspanning en huidig risiconiveau combineert en deze kruist met andere gegevens om je te helpen bij de prioritering", "actions": "Acties", - "projectsSummaryEmpty": "Projectoverzicht is leeg", + "perimetersSummaryEmpty": "Perimeteroverzicht is leeg", "riskOpen": "Risico: open", "riskMitigate": "Risico: beperken", "riskAccept": "Risico: accepteren", @@ -753,7 +752,7 @@ "mailFailedToSend": "De e-mail kon niet worden verzonden", "questionOrQuestions": "Vraag(en)", "successfullyUpdatedClientSettings": "De clientinstellingen zijn succesvol bijgewerkt. Vernieuw de pagina.", - "xRaysEmptyMessage": "U moet minimaal één project maken om röntgenstraling te kunnen gebruiken.", + "xRaysEmptyMessage": "U moet minimaal één perimeter maken om röntgenstraling te kunnen gebruiken.", "suggestControls": "Suggesties voor bedieningselementen", "createAppliedControlsFromSuggestionsHelpText": "Toegepaste controles maken op basis van de voorgestelde referentiecontroles van de vereisten van het raamwerk", "createAppliedControlsFromSuggestionsSuccess": "Toegepaste besturingselementen zijn succesvol gemaakt op basis van de voorgestelde referentiebesturingselementen", diff --git a/frontend/messages/pl.json b/frontend/messages/pl.json index f2a5996ba..7b480b0fb 100644 --- a/frontend/messages/pl.json +++ b/frontend/messages/pl.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "Rozpocznij audyt", "addEvidence": "Dodaj dowód", "addDomain": "Dodaj domenę", - "addProject": "Dodaj projekt", + "addPerimeter": "Dodaj zakres", "addUser": "Dodaj użytkownika", "addPolicy": "Dodaj politykę", "associatedThreats": "Powiązane zagrożenia", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "Powiązane audyty", "associatedEvidences": "Powiązane dowody", "associatedDomains": "Powiązane domeny", - "associatedProjects": "Powiązane projekty", + "associatedPerimeters": "Powiązane zakresy", "associatedUsers": "Powiązani użytkownicy", "associatedEntityAssessments": "Oceny podmiotów stowarzyszonych", "associatedRepresentatives": "Przedstawiciele stowarzyszeni", @@ -78,7 +78,7 @@ "frameworks": "Ramy", "frameworksColon": "Ramy:", "domains": "Domeny", - "projects": "Projekty", + "perimeters": "Zakresy", "users": "Użytkownicy", "user": "Użytkownik", "userGroups": "Grupy użytkowników", @@ -116,7 +116,7 @@ "residualLevel": "Poziom resztkowy", "riskMatrix": "Macierz ryzyka", "riskMatrixColon": "Matryca ryzyka:", - "project": "Projekt", + "perimeter": "Zakres", "folder": "Folder", "riskAssessment": "Ocena ryzyka", "threat": "Zagrożenie", @@ -184,9 +184,8 @@ "summary": "Podsumowanie", "composer": "Kompozytor", "statistics": "Statystyki", - "myProjects": "Moje projekty", + "myPerimeters": "Moje zakresy", "scenarios": "Scenariusze", - "assignedProjects": "Przypisane do {number} projektu(ów)", "currentRiskLevelPerScenario": "Obecny poziom ryzyka na scenariusz ryzyka", "residualRiskLevelPerScenario": "Resztkowy poziom ryzyka na scenariusz ryzyka", "appliedControlsStatus": "Status zastosowanych kontroli", @@ -221,7 +220,7 @@ "noPendingAppliedControl": "Brak oczekujących zastosowanych kontroli", "rankingScoreDefintion": "Wynik rankingowy to adaptacyjna metryka łącząca informacje o wysiłku i obecnym poziomie ryzyka oraz krzyżuje go z innymi danymi w celu ułatwienia priorytetyzacji", "actions": "Działania", - "projectsSummaryEmpty": "Podsumowanie projektów jest puste", + "perimetersSummaryEmpty": "Podsumowanie zakresy jest puste", "riskOpen": "Ryzyko: otwarte", "riskMitigate": "Ryzyko: łagodzenie", "riskAccept": "Ryzyko: akceptacja", diff --git a/frontend/messages/pt.json b/frontend/messages/pt.json index 1d70a00d6..dbcfcb25e 100644 --- a/frontend/messages/pt.json +++ b/frontend/messages/pt.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "Iniciar Auditoria", "addEvidence": "Adicionar evidência", "addDomain": "Adicionar domínio", - "addProject": "Adicionar projeto", + "addPerimeter": "Adicionar âmbito", "addUser": "Adicionar usuário", "addPolicy": "Adicionar política", "associatedThreats": "Ameaças associadas", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "Auditorias associadas", "associatedEvidences": "Evidências associadas", "associatedDomains": "Domínios associados", - "associatedProjects": "Projetos associados", + "associatedPerimeters": "Âmbitos associados", "associatedUsers": "Usuários associados", "associatedEntityAssessments": "Avaliações de entidades associadas", "associatedRepresentatives": "Representantes associados", @@ -78,7 +78,7 @@ "frameworks": "Frameworks", "frameworksColon": "Estruturas:", "domains": "Domínios", - "projects": "Projetos", + "perimeters": "Âmbitos", "users": "Usuários", "user": "Usuário", "userGroups": "Grupos de usuários", @@ -116,7 +116,7 @@ "residualLevel": "Nível residual", "riskMatrix": "Matriz de risco", "riskMatrixColon": "Matriz de risco:", - "project": "Projeto", + "perimeter": "Âmbito", "folder": "Pasta", "riskAssessment": "Avaliação de risco", "threat": "Ameaça", @@ -184,9 +184,8 @@ "summary": "Resumo", "composer": "Compositor", "statistics": "Estatísticas", - "myProjects": "Meus projetos", + "myPerimeters": "Meus âmbitos", "scenarios": "Cenários", - "assignedProjects": "Atribuído a {number} projeto{s}", "currentRiskLevelPerScenario": "Nível de risco atual por cenário de risco", "residualRiskLevelPerScenario": "Nível de risco residual por cenário de risco", "appliedControlsStatus": "Status dos controles aplicados", @@ -221,7 +220,7 @@ "noPendingAppliedControl": "Nenhum controle aplicado pendente", "rankingScoreDefintion": "A pontuação de classificação é uma métrica adaptativa que combina informações de esforço e nível de risco atual, cruzando-as com outros dados para auxiliá-lo na priorização", "actions": "Ações", - "projectsSummaryEmpty": "O resumo do projeto está vazio", + "perimetersSummaryEmpty": "O resumo do âmbitos está vazio", "riskOpen": "Risco: aberto", "riskMitigate": "Risco: mitigar", "riskAccept": "Risco: aceitar", diff --git a/frontend/messages/ro.json b/frontend/messages/ro.json index ab7da8b4e..0771ee873 100644 --- a/frontend/messages/ro.json +++ b/frontend/messages/ro.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "Nou Audit", "addEvidence": "Adaugă dovadă", "addDomain": "Adaugă domeniu", - "addProject": "Adaugă proiect", + "addPerimeter": "Adaugă întindere", "addUser": "Adaugă utilizator", "addPolicy": "Adaugă politică", "associatedThreats": "Amenințări asociate", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "Auditurile asociate", "associatedEvidences": "Dovezi asociate", "associatedDomains": "Domenii asociate", - "associatedProjects": "Proiecte asociate", + "associatedPerimeters": "Întinderi asociate", "associatedUsers": "Utilizatori asociați", "associatedEntityAssessments": "Evaluări ale entităților asociate", "associatedRepresentatives": "Reprezentanti asociati", @@ -78,7 +78,7 @@ "frameworks": "Cadre", "frameworksColon": "Cadre:", "domains": "Domenii", - "projects": "Proiecte", + "perimeters": "Întinderi", "users": "Utilizatori", "user": "Utilizator", "userGroups": "Grupuri de utilizatori", @@ -116,7 +116,7 @@ "residualLevel": "Nivel rezidual", "riskMatrix": "Matrice de risc", "riskMatrixColon": "Matrice de risc:", - "project": "Proiect", + "perimeter": "Întindere", "folder": "Dosar", "riskAssessment": "Evaluare a riscului", "threat": "Amenințare", @@ -184,9 +184,8 @@ "summary": "Rezumat", "composer": "Compozitor", "statistics": "Statistici", - "myProjects": "Proiectele mele", + "myPerimeters": "Întinderi mele", "scenarios": "Scenarii", - "assignedProjects": "Atribuit la {number} proiect{e}", "currentRiskLevelPerScenario": "Nivelul actual al riscului per scenariu de risc", "residualRiskLevelPerScenario": "Nivelul rezidual al riscului per scenariu de risc", "appliedControlsStatus": "Starea controalelor aplicate", @@ -221,7 +220,7 @@ "noPendingAppliedControl": "Nu există controale aplicate în așteptare", "rankingScoreDefintion": "Scorul de clasificare este o metrică adaptivă care combină informațiile despre efort și nivelul de risc actual și le combină cu alte date pentru a vă ajuta la prioritizare", "actions": "Acțiuni", - "projectsSummaryEmpty": "Rezumatul proiectelor este gol", + "perimetersSummaryEmpty": "Rezumatul întinderilor este gol", "riskOpen": "Risc: deschis", "riskMitigate": "Risc: atenuat", "riskAccept": "Risc: acceptat", diff --git a/frontend/messages/sv.json b/frontend/messages/sv.json index 1700b61b5..68c065753 100644 --- a/frontend/messages/sv.json +++ b/frontend/messages/sv.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "Ny revision", "addEvidence": "Lägg till bevis", "addDomain": "Lägg till domän", - "addProject": "Lägg till projekt", + "addPerimeter": "Lägg till perimeter", "addUser": "Lägg till användare", "addPolicy": "Lägg till policy", "associatedThreats": "Associerade hot", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "Associerade revisioner", "associatedEvidences": "Associerade bevis", "associatedDomains": "Associerade domäner", - "associatedProjects": "Associerade projekt", + "associatedPerimeters": "Associerade perimetrar", "associatedUsers": "Associerade användare", "associatedEntityAssessments": "Associerade enhetsbedömningar", "associatedRepresentatives": "Associerade representanter", @@ -80,7 +80,7 @@ "frameworks": "Ramverk", "frameworksColon": "Ramverk:", "domains": "Domäner", - "projects": "Projekt", + "perimeters": "Perimetrar", "users": "Användare", "user": "Användare", "userGroups": "Användargrupper", @@ -118,7 +118,7 @@ "residualLevel": "Restnivå", "riskMatrix": "Riskmatris", "riskMatrixColon": "Riskmatris:", - "project": "Projekt", + "perimeter": "Perimeter", "folder": "Mapp", "riskAssessment": "Riskbedömning", "threat": "Hot", @@ -186,9 +186,8 @@ "summary": "Sammanfattning", "composer": "Kompositör", "statistics": "Statistik", - "myProjects": "Mina projekt", + "myPerimeters": "Mina perimetrar", "scenarios": "Scenarier", - "assignedProjects": "Tilldelad till {number} projekt{s}", "currentRiskLevelPerScenario": "Nuvarande risknivå per riskscenario", "residualRiskLevelPerScenario": "Rest risknivå per riskscenario", "appliedControlsStatus": "Status för tillämpade kontroller", @@ -223,7 +222,7 @@ "noPendingAppliedControl": "Ingen väntande tillämpad kontroll", "rankingScoreDefintion": "Rankingpoäng är ett adaptivt mått som kombinerar information om ansträngning och nuvarande risknivå för att hjälpa till med prioritering", "actions": "Åtgärder", - "projectsSummaryEmpty": "Projektöversikten är tom", + "perimetersSummaryEmpty": "Perimeteröversikten är tom", "riskOpen": "Risk: öppen", "riskMitigate": "Risk: mildra", "riskAccept": "Risk: acceptera", diff --git a/frontend/messages/ur.json b/frontend/messages/ur.json index 1b663cec4..ceb94ae03 100644 --- a/frontend/messages/ur.json +++ b/frontend/messages/ur.json @@ -25,7 +25,7 @@ "addComplianceAssessment": "نیا آڈٹ", "addEvidence": "ثبوت شامل کریں", "addDomain": "ڈومین شامل کریں", - "addProject": "پروجیکٹ شامل کریں", + "addPerimeter": "پیریمیٹر شامل کریں", "addUser": "صارف شامل کریں", "addPolicy": "پالیسی شامل کریں", "associatedThreats": "وابستہ خطرات", @@ -38,7 +38,7 @@ "associatedComplianceAssessments": "وابستہ آڈٹ", "associatedEvidences": "وابستہ ثبوت", "associatedDomains": "وابستہ ڈومینز", - "associatedProjects": "وابستہ پروجیکٹس", + "associatedPerimeters": "وابستہ پیریمیٹرز", "associatedUsers": "وابستہ صارفین", "associatedEntityAssessments": "وابستہ ہستی کے جائزے", "associatedRepresentatives": "وابستہ نمائندے۔", @@ -78,7 +78,7 @@ "frameworks": "فریم ورک", "frameworksColon": "فریم ورک:", "domains": "ڈومینز", - "projects": "پروجیکٹس", + "perimeters": "پیریمیٹرز", "users": "صارفین", "user": "صارف", "userGroups": "صارف گروپ", @@ -116,7 +116,7 @@ "residualLevel": "باقی سطح", "riskMatrix": "خطرے کی میٹرکس", "riskMatrixColon": "خطرے کی میٹرکس:", - "project": "پروجیکٹ", + "perimeter": "پیریمیٹرز", "folder": "فولڈر", "riskAssessment": "خطرے کی تشخیص", "threat": "خطرہ", @@ -184,9 +184,8 @@ "summary": "خلاصہ", "composer": "کمپوزر", "statistics": "اعداد و شمار", - "myProjects": "میرے پروجیکٹس", + "myPerimeters": "میرے پیریمیٹرز", "scenarios": "منظرنامے", - "assignedProjects": "{number} پروجیکٹ{s} کے لیے تفویض کیا گیا", "currentRiskLevelPerScenario": "منظرنامے کے مطابق موجودہ خطرے کی سطح", "residualRiskLevelPerScenario": "منظرنامے کے مطابق باقی خطرے کی سطح", "appliedControlsStatus": "لاگو کنٹرول کی حیثیت", @@ -221,7 +220,7 @@ "noPendingAppliedControl": "کوئی زیر التواء لاگو کنٹرول نہیں", "rankingScoreDefintion": "رینکنگ اسکور ایک موافقت پذیر میٹرک ہے جو کوشش اور موجودہ خطرے کی سطح کی معلومات کو یکجا کرتا ہے، اور اس کو دیگر ڈیٹا کے ساتھ عبور کرتا ہے تاکہ آپ کو ترجیح دینے میں مدد مل سکے", "actions": "کارروائیاں", - "projectsSummaryEmpty": "پروجیکٹس کا خلاصہ خالی ہے", + "perimetersSummaryEmpty": "پیریمیٹرز کا خلاصہ خالی ہے", "riskOpen": "خطرہ: کھلا", "riskMitigate": "خطرہ: کم کریں", "riskAccept": "خطرہ: قبول کریں", diff --git a/frontend/src/lib/components/DetailView/DetailView.svelte b/frontend/src/lib/components/DetailView/DetailView.svelte index bbc3ed63d..87d42431b 100644 --- a/frontend/src/lib/components/DetailView/DetailView.svelte +++ b/frontend/src/lib/components/DetailView/DetailView.svelte @@ -187,14 +187,14 @@ }; export let orderRelatedModels = ['']; - if (data.urlModel === 'projects') { + if (data.urlModel === 'perimeters') { orderRelatedModels = ['compliance-assessments', 'risk-assessments', 'entity-assessments']; } if (data.urlModel === 'entities') { orderRelatedModels = ['entity-assessments', 'representatives', 'solutions']; } if (data.urlModel === 'folders') { - orderRelatedModels = ['projects', 'entities']; + orderRelatedModels = ['perimeters', 'entities']; } diff --git a/frontend/src/lib/components/Forms/ModelForm.svelte b/frontend/src/lib/components/Forms/ModelForm.svelte index 10569bc17..d5cc3422e 100644 --- a/frontend/src/lib/components/Forms/ModelForm.svelte +++ b/frontend/src/lib/components/Forms/ModelForm.svelte @@ -6,7 +6,7 @@ import TextField from '$lib/components/Forms/TextField.svelte'; import RiskAssessmentForm from './ModelForm/RiskAssessmentForm.svelte'; - import ProjectForm from './ModelForm/ProjectForm.svelte'; + import PerimeterForm from './ModelForm/PerimeterForm.svelte'; import ThreatForm from './ModelForm/ThreatForm.svelte'; import RiskScenarioForm from './ModelForm/RiskScenarioForm.svelte'; import AppliedControlsPoliciesForm from './ModelForm/AppliedControlPolicyForm.svelte'; @@ -187,8 +187,8 @@ data-focusindex="1" /> {/if} - {#if URLModel === 'projects'} - + {#if URLModel === 'perimeters'} + {:else if URLModel === 'folders' || URLModel === 'folders-import'} {:else if URLModel === 'risk-assessments'} diff --git a/frontend/src/lib/components/Forms/ModelForm/ComplianceAssessmentForm.svelte b/frontend/src/lib/components/Forms/ModelForm/ComplianceAssessmentForm.svelte index 3b559b479..0fcc9320a 100644 --- a/frontend/src/lib/components/Forms/ModelForm/ComplianceAssessmentForm.svelte +++ b/frontend/src/lib/components/Forms/ModelForm/ComplianceAssessmentForm.svelte @@ -60,14 +60,14 @@
{#if item.risk_assessment.quality_check.count > 0} diff --git a/frontend/src/routes/(app)/(internal)/compliance-assessments/[id=uuid]/action-plan/+page.svelte b/frontend/src/routes/(app)/(internal)/compliance-assessments/[id=uuid]/action-plan/+page.svelte index 416fa1ece..ec2cbe5b4 100644 --- a/frontend/src/routes/(app)/(internal)/compliance-assessments/[id=uuid]/action-plan/+page.svelte +++ b/frontend/src/routes/(app)/(internal)/compliance-assessments/[id=uuid]/action-plan/+page.svelte @@ -40,11 +40,11 @@

- {m.project()}: + {m.perimeter()}: {data.compliance_assessment.project.str}{data.compliance_assessment.perimeter.str}

/

diff --git a/frontend/src/routes/(app)/(internal)/recap/+page.server.ts b/frontend/src/routes/(app)/(internal)/recap/+page.server.ts index 2ff9665cb..009561784 100644 --- a/frontend/src/routes/(app)/(internal)/recap/+page.server.ts +++ b/frontend/src/routes/(app)/(internal)/recap/+page.server.ts @@ -1,6 +1,6 @@ import { BASE_API_URL } from '$lib/utils/constants'; import type { PageServerLoad } from './$types'; -import type { Project } from '$lib/utils/types'; +import type { Perimeter } from '$lib/utils/types'; import * as m from '$paraglide/messages'; const REQUIREMENT_ASSESSMENT_STATUS = [ @@ -24,7 +24,7 @@ interface RequirementAssessmentDonutItem extends Omit { percentage: string; } -interface ProjectAnalytics extends Project { +interface PerimeterAnalytics extends Perimeter { overallCompliance: { values: RequirementAssessmentDonutItem[]; total: number; @@ -32,14 +32,14 @@ interface ProjectAnalytics extends Project { } export const load: PageServerLoad = async ({ locals, fetch }) => { - const projects: ProjectAnalytics[] = await fetch(`${BASE_API_URL}/projects/`) + const perimeters: PerimeterAnalytics[] = await fetch(`${BASE_API_URL}/perimeters/`) .then((res) => res.json()) - .then(async (projects) => { - if (projects && Array.isArray(projects.results)) { - const projectPromises = projects.results.map(async (project) => { + .then(async (perimeters) => { + if (perimeters && Array.isArray(perimeters.results)) { + const perimeterPromises = perimeters.results.map(async (perimeter) => { try { const complianceAssessmentsResponse = await fetch( - `${BASE_API_URL}/compliance-assessments/?project=${project.id}` + `${BASE_API_URL}/compliance-assessments/?perimeter=${perimeter.id}` ); const complianceAssessmentsData = await complianceAssessmentsResponse.json(); @@ -72,8 +72,8 @@ export const load: PageServerLoad = async ({ locals, fetch }) => { ); const updatedAssessments = await Promise.all(updatedAssessmentsPromises); - project.compliance_assessments = updatedAssessments; - return project; + perimeter.compliance_assessments = updatedAssessments; + return perimeter; } else { throw new Error('Compliance assessments results not found or not an array'); } @@ -83,18 +83,18 @@ export const load: PageServerLoad = async ({ locals, fetch }) => { } }); - return Promise.all(projectPromises); + return Promise.all(perimeterPromises); } else { - throw new Error('Projects results not found or not an array'); + throw new Error('Perimeters results not found or not an array'); } }) .catch((error) => { - console.error('Failed to load projects:', error); + console.error('Failed to load perimeters:', error); return []; // Ensure always returning an array of Record }); - if (projects) { - projects.forEach((project) => { + if (perimeters) { + perimeters.forEach((perimeter) => { // Initialize an object to hold the aggregated donut data const aggregatedDonutData: { values: RequirementAssessmentDonutItem[]; @@ -104,8 +104,8 @@ export const load: PageServerLoad = async ({ locals, fetch }) => { total: 0 }; - // Iterate through each compliance assessment of the project - project.compliance_assessments.forEach((compliance_assessment: Record) => { + // Iterate through each compliance assessment of the perimeter + perimeter.compliance_assessments.forEach((compliance_assessment: Record) => { // Process the donut data of each assessment compliance_assessment.donut.result.values.forEach( (donutItem: RequirementAssessmentDonutItem) => { @@ -132,13 +132,13 @@ export const load: PageServerLoad = async ({ locals, fetch }) => { percentage: totalValue > 0 ? ((item.value / totalValue) * 100).toFixed(1) : '0' })); - // Assign the aggregated donut data to the project - project.overallCompliance = aggregatedDonutData; + // Assign the aggregated donut data to the perimeter + perimeter.overallCompliance = aggregatedDonutData; }); } return { - projects, + perimeters, user: locals.user, title: m.recap() }; diff --git a/frontend/src/routes/(app)/(internal)/recap/+page.svelte b/frontend/src/routes/(app)/(internal)/recap/+page.svelte index 65cc7740b..de949c155 100644 --- a/frontend/src/routes/(app)/(internal)/recap/+page.svelte +++ b/frontend/src/routes/(app)/(internal)/recap/+page.svelte @@ -21,20 +21,20 @@
{m.overallCompliance()}
- {#each data.projects as project} + {#each data.perimeters as perimeter}
- {#if project.compliance_assessments && project.compliance_assessments.length > 0} + {#if perimeter.compliance_assessments && perimeter.compliance_assessments.length > 0}
{project.folder.str}/{project.name}{perimeter.folder.str}/{perimeter.name}
- {#each project.overallCompliance.values.sort((a, b) => REQUIREMENT_ASSESSMENT_STATUS.indexOf(a.name) - REQUIREMENT_ASSESSMENT_STATUS.indexOf(b.name)) as sp} + {#each perimeter.overallCompliance.values.sort((a, b) => REQUIREMENT_ASSESSMENT_STATUS.indexOf(a.name) - REQUIREMENT_ASSESSMENT_STATUS.indexOf(b.name)) as sp}
{/if} - {#each project.compliance_assessments as compliance_assessment} + {#each perimeter.compliance_assessments as compliance_assessment}
diff --git a/frontend/src/routes/(app)/(internal)/risk-assessments/[id=uuid]/+page.svelte b/frontend/src/routes/(app)/(internal)/risk-assessments/[id=uuid]/+page.svelte index 64a36c8e9..ecb8a07d8 100644 --- a/frontend/src/routes/(app)/(internal)/risk-assessments/[id=uuid]/+page.svelte +++ b/frontend/src/routes/(app)/(internal)/risk-assessments/[id=uuid]/+page.svelte @@ -109,7 +109,7 @@
- {risk_assessment.project.str}/{risk_assessment.name} - {risk_assessment.version} + {risk_assessment.perimeter.str}/{risk_assessment.name} - {risk_assessment.version}

diff --git a/frontend/src/routes/(app)/(internal)/risk-assessments/[id=uuid]/remediation-plan/+page.svelte b/frontend/src/routes/(app)/(internal)/risk-assessments/[id=uuid]/remediation-plan/+page.svelte index a13952960..ac4a7e112 100644 --- a/frontend/src/routes/(app)/(internal)/risk-assessments/[id=uuid]/remediation-plan/+page.svelte +++ b/frontend/src/routes/(app)/(internal)/risk-assessments/[id=uuid]/remediation-plan/+page.svelte @@ -47,10 +47,11 @@

- {m.project()}: + {m.perimeter()}: {data.risk_assessment.project.str}{data.risk_assessment.perimeter.str}

/

diff --git a/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/+page.svelte b/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/+page.svelte index 4e107fa73..4eb08a11f 100644 --- a/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/+page.svelte +++ b/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/+page.svelte @@ -86,9 +86,10 @@

{m.scope()}

-

{m.project()}

- {data.scenario.project.str}{m.perimeter()}

+ {data.scenario.perimeter.str}
diff --git a/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/edit/+page.server.ts b/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/edit/+page.server.ts index 4a73bba94..faf6320c5 100644 --- a/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/edit/+page.server.ts +++ b/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/edit/+page.server.ts @@ -136,7 +136,7 @@ export const load: PageServerLoad = async ({ params, fetch }) => { const measureCreateSchema = modelSchema('applied-controls'); const initialData = { - folder: scenario.project.folder.id + folder: scenario.perimeter.folder.id }; const measureCreateForm = await superValidate(initialData, zod(measureCreateSchema), { errors: false diff --git a/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/edit/+page.svelte b/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/edit/+page.svelte index ba5b2b814..e1f27c7c4 100644 --- a/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/edit/+page.svelte +++ b/frontend/src/routes/(app)/(internal)/risk-scenarios/[id=uuid]/edit/+page.svelte @@ -92,10 +92,11 @@
-

{m.project()}

+

{m.perimeter()}

{data.scenario.project.str}{data.scenario.perimeter.str}
diff --git a/frontend/src/routes/(app)/(internal)/x-rays/+page.server.ts b/frontend/src/routes/(app)/(internal)/x-rays/+page.server.ts index f408a41ba..1a1a830d4 100644 --- a/frontend/src/routes/(app)/(internal)/x-rays/+page.server.ts +++ b/frontend/src/routes/(app)/(internal)/x-rays/+page.server.ts @@ -3,7 +3,7 @@ import * as m from '$paraglide/messages'; import type { PageServerLoad } from './$types'; export const load = (async ({ fetch }) => { - const endpoint = `${BASE_API_URL}/projects/quality_check/`; + const endpoint = `${BASE_API_URL}/perimeters/quality_check/`; const res = await fetch(endpoint); const data = await res.json().then((res) => res.results); diff --git a/frontend/src/routes/(app)/(internal)/x-rays/+page.svelte b/frontend/src/routes/(app)/(internal)/x-rays/+page.svelte index 5cdc90442..469638409 100644 --- a/frontend/src/routes/(app)/(internal)/x-rays/+page.svelte +++ b/frontend/src/routes/(app)/(internal)/x-rays/+page.svelte @@ -23,7 +23,7 @@ return result; }; - const projects = Object.entries(data.data).map(([key, value]) => { + const perimeters = Object.entries(data.data).map(([key, value]) => { return { id: key, tabSet: 0, @@ -41,55 +41,57 @@
- {#if projects.length == 0} + {#if perimeters.length == 0} {m.xRaysEmptyMessage()} {/if} - {#each projects as project, index} - {@const compliance_assessments = Object.values(project.compliance_assessments.objects)} - {@const risk_assessments = Object.values(project.risk_assessments.objects)} + {#each perimeters as perimeter, index} + {@const compliance_assessments = Object.values(perimeter.compliance_assessments.objects)} + {@const risk_assessments = Object.values(perimeter.risk_assessments.objects)}
💡 - {project.project.folder.str}/{project.project.name} + {perimeter.perimeter.folder.str}/{perimeter.perimeter.name} - {m.complianceAssessments()} - {#if project.compliance_assessments.errors.length > 0} + {#if perimeter.compliance_assessments.errors.length > 0} {project.compliance_assessments.errors.length}{perimeter.compliance_assessments.errors.length} {/if} - {#if project.compliance_assessments.warnings.length > 0} + {#if perimeter.compliance_assessments.warnings.length > 0} {project.compliance_assessments.warnings.length}{perimeter.compliance_assessments.warnings.length} {/if} - {#if project.compliance_assessments.info.length > 0} + {#if perimeter.compliance_assessments.info.length > 0} {project.compliance_assessments.info.length}{perimeter.compliance_assessments.info.length} {/if} - {m.riskAssessments()} - {#if project.risk_assessments.errors.length > 0} - {project.risk_assessments.errors.length} + {#if perimeter.risk_assessments.errors.length > 0} + {perimeter.risk_assessments.errors.length} {/if} - {#if project.risk_assessments.warnings.length > 0} + {#if perimeter.risk_assessments.warnings.length > 0} {project.risk_assessments.warnings.length}{perimeter.risk_assessments.warnings.length} {/if} - {#if project.risk_assessments.info.length > 0} - {project.risk_assessments.info.length} + {#if perimeter.risk_assessments.info.length > 0} + {perimeter.risk_assessments.info.length} {/if} - {#if project.tabSet === 0} + {#if perimeter.tabSet === 0}
    {#each compliance_assessments as compliance_assessment, index}
  • @@ -182,7 +184,7 @@ {/each}
{/if} - {#if project.tabSet === 1} + {#if perimeter.tabSet === 1}
    {#each risk_assessments as risk_assessment, index}
  • @@ -275,7 +277,7 @@
- {#if index != projects.length - 1} + {#if index != perimeters.length - 1}
{/if} {/each} diff --git a/frontend/src/routes/(app)/(third-party)/compliance-assessments/[id=uuid]/+page.svelte b/frontend/src/routes/(app)/(third-party)/compliance-assessments/[id=uuid]/+page.svelte index bced2c4dc..4356c190f 100644 --- a/frontend/src/routes/(app)/(third-party)/compliance-assessments/[id=uuid]/+page.svelte +++ b/frontend/src/routes/(app)/(third-party)/compliance-assessments/[id=uuid]/+page.svelte @@ -232,7 +232,7 @@
- {#each Object.entries(data.compliance_assessment).filter( ([key, _]) => ['ref_id', 'name', 'description', 'project', 'framework', 'authors', 'reviewers', 'status', 'selected_implementation_groups'].includes(key) ) as [key, value]} + {#each Object.entries(data.compliance_assessment).filter( ([key, _]) => ['ref_id', 'name', 'description', 'perimeter', 'framework', 'authors', 'reviewers', 'status', 'selected_implementation_groups'].includes(key) ) as [key, value]}
{ - const testRequirements = ['folders', 'projects', 'complianceAssessments']; + const testRequirements = ['folders', 'perimeters', 'complianceAssessments']; const IDAM1Score = { ratio: 0.66, progress: '75', diff --git a/frontend/tests/functional/nav.test.ts b/frontend/tests/functional/nav.test.ts index 84eb33b1f..fe10949ea 100644 --- a/frontend/tests/functional/nav.test.ts +++ b/frontend/tests/functional/nav.test.ts @@ -102,6 +102,9 @@ test('sidebar navigation tests', async ({ logedPage, analyticsPage, sideBar, pag test('sidebar component tests', async ({ logedPage, sideBar }) => { await test.step('sidebar can be collapsed and expanded', async () => { + if (await logedPage.page.locator('#driver-dummy-element').isVisible()) { + await logedPage.page.locator('.driver-popover-close-btn').first().click(); + } sideBar.toggleButton.click(); await expect(sideBar.toggleButton).toHaveClass(/rotate-180/); sideBar.toggleButton.click(); diff --git a/frontend/tests/functional/user-route.test.ts b/frontend/tests/functional/user-route.test.ts index 75645e240..171376162 100644 --- a/frontend/tests/functional/user-route.test.ts +++ b/frontend/tests/functional/user-route.test.ts @@ -31,20 +31,20 @@ test('user usual routine actions are working correctly', async ({ //TODO assert that the domain data are displayed in the table }); - await test.step('user can create a project', async () => { - await sideBar.click('Organization', pages.projectsPage.url); - await pages.projectsPage.hasUrl(); - await pages.projectsPage.hasTitle(); + await test.step('user can create a perimeter', async () => { + await sideBar.click('Organization', pages.perimetersPage.url); + await pages.perimetersPage.hasUrl(); + await pages.perimetersPage.hasTitle(); - await pages.projectsPage.createItem({ - name: vars.projectName, + await pages.perimetersPage.createItem({ + name: vars.perimeterName, description: vars.description, folder: vars.folderName, ref_id: 'R.1234', lc_status: 'Production' }); - //TODO assert that the project data are displayed in the table + //TODO assert that the perimeter data are displayed in the table }); await test.step('user can create an asset', async () => { @@ -125,7 +125,7 @@ test('user usual routine actions are working correctly', async ({ await pages.complianceAssessmentsPage.createItem({ name: vars.assessmentName, description: vars.description, - project: vars.folderName + '/' + vars.projectName, + perimeter: vars.folderName + '/' + vars.perimeterName, version: '1.4.2', status: 'Done', framework: vars.framework.name, @@ -180,7 +180,7 @@ test('user usual routine actions are working correctly', async ({ await pages.riskAssessmentsPage.createItem({ name: vars.riskAssessmentName, description: vars.description, - project: vars.folderName + '/' + vars.projectName, + perimeter: vars.folderName + '/' + vars.perimeterName, version: vars.riskAssessmentVersion, status: 'Done', risk_matrix: vars.matrix.displayName, @@ -214,7 +214,7 @@ test('user usual routine actions are working correctly', async ({ await pages.riskScenariosPage.createItem({ name: vars.riskScenarioName, description: vars.description, - risk_assessment: `${vars.folderName}/${vars.projectName}/${vars.riskAssessmentName} - ${vars.riskAssessmentVersion}`, + risk_assessment: `${vars.folderName}/${vars.perimeterName}/${vars.riskAssessmentName} - ${vars.riskAssessmentVersion}`, threats: [`${vars.folderName}/${vars.threatName}`] }); @@ -233,7 +233,7 @@ test('user usual routine actions are working correctly', async ({ folder: vars.folderName, approver: LoginPage.defaultEmail, risk_scenarios: [ - `${vars.folderName}/${vars.projectName}/${vars.riskAssessmentName} - ${vars.riskAssessmentVersion}/${vars.riskScenarioName}` + `${vars.folderName}/${vars.perimeterName}/${vars.riskAssessmentName} - ${vars.riskAssessmentVersion}/${vars.riskScenarioName}` ] }); diff --git a/frontend/tests/utils/page-detail.ts b/frontend/tests/utils/page-detail.ts index 3c3d59c2b..ca2ea4812 100644 --- a/frontend/tests/utils/page-detail.ts +++ b/frontend/tests/utils/page-detail.ts @@ -41,10 +41,10 @@ export class PageDetail extends BasePage { async verifyItem(values: { [k: string]: any }) { if (this.url.includes('risk-assessments')) { - if ('project' in values) { + if ('perimeter' in values) { await expect .soft(this.page.getByTestId('name-field-value')) - .toHaveText(`${values.project}/${values.name} - ${values.version}`); + .toHaveText(`${values.perimeter}/${values.name} - ${values.version}`); } else { await expect .soft(this.page.getByTestId('name-field-value')) diff --git a/frontend/tests/utils/test-data.ts b/frontend/tests/utils/test-data.ts index 1a377a3dc..cc0d644b8 100644 --- a/frontend/tests/utils/test-data.ts +++ b/frontend/tests/utils/test-data.ts @@ -3,7 +3,7 @@ export default { assetName: 'Test asset', evidenceName: 'Test evidence', folderName: 'Test domain', - projectName: 'Test project', + perimeterName: 'Test perimeter', riskAcceptanceName: 'Test risk acceptance', riskAssessmentName: 'Test risk assessment', riskAssessmentVersion: '1.4.2', @@ -31,7 +31,7 @@ export default { 'add_complianceassessment', 'add_evidence', 'add_policy', - 'add_project', + 'add_perimeter', 'add_riskacceptance', 'add_riskassessment', 'add_riskscenario', @@ -44,7 +44,7 @@ export default { 'change_entityassessment', 'change_evidence', 'change_policy', - 'change_project', + 'change_perimeter', 'change_referencecontrol', 'change_representative', 'change_requirementassessment', @@ -60,7 +60,7 @@ export default { 'delete_entityassessment', 'delete_evidence', 'delete_policy', - 'delete_project', + 'delete_perimeter', 'delete_referencecontrol', 'delete_representative', 'delete_riskacceptance', @@ -78,7 +78,7 @@ export default { 'view_framework', 'view_loadedlibrary', 'view_policy', - 'view_project', + 'view_perimeter', 'view_referencecontrol', 'view_representative', 'view_requirementassessment', @@ -109,7 +109,7 @@ export default { 'view_framework', 'view_loadedlibrary', 'view_policy', - 'view_project', + 'view_perimeter', 'view_referencecontrol', 'view_representative', 'view_requirementassessment', @@ -138,7 +138,7 @@ export default { 'add_evidence', 'add_folder', 'add_policy', - 'add_project', + 'add_perimeter', 'add_riskacceptance', 'add_riskassessment', 'add_riskmatrix', @@ -153,7 +153,7 @@ export default { 'change_evidence', 'change_folder', 'change_policy', - 'change_project', + 'change_perimeter', 'change_referencecontrol', 'change_representative', 'change_requirementassessment', @@ -171,7 +171,7 @@ export default { 'delete_evidence', 'delete_folder', 'delete_policy', - 'delete_project', + 'delete_perimeter', 'delete_referencecontrol', 'delete_representative', 'delete_riskacceptance', @@ -190,7 +190,7 @@ export default { 'view_framework', 'view_loadedlibrary', 'view_policy', - 'view_project', + 'view_perimeter', 'view_referencecontrol', 'view_representative', 'view_requirementassessment', @@ -211,7 +211,7 @@ export default { approver: { name: 'Approver', perms: [ - 'view_project', + 'view_perimeter', 'view_riskassessment', 'view_appliedcontrol', 'view_policy', diff --git a/frontend/tests/utils/test-utils.ts b/frontend/tests/utils/test-utils.ts index 9dc343a3d..c3a0cd940 100644 --- a/frontend/tests/utils/test-utils.ts +++ b/frontend/tests/utils/test-utils.ts @@ -21,7 +21,7 @@ type Fixtures = { foldersPage: PageContent; frameworksPage: PageContent; librariesPage: PageContent; - projectsPage: PageContent; + perimetersPage: PageContent; riskAcceptancesPage: PageContent; riskAssessmentsPage: PageContent; riskMatricesPage: PageContent; @@ -59,7 +59,7 @@ export const test = base.extend({ foldersPage, frameworksPage, librariesPage, - projectsPage, + perimetersPage, riskAcceptancesPage, riskAssessmentsPage, riskMatricesPage, @@ -78,7 +78,7 @@ export const test = base.extend({ foldersPage, frameworksPage, librariesPage, - projectsPage, + perimetersPage, riskAcceptancesPage, riskAssessmentsPage, riskMatricesPage, @@ -98,7 +98,7 @@ export const test = base.extend({ const aPage = new PageContent(page, '/compliance-assessments', 'Audits', [ { name: 'name', type: type.TEXT }, { name: 'description', type: type.TEXT }, - { name: 'project', type: type.SELECT_AUTOCOMPLETE }, + { name: 'perimeter', type: type.SELECT_AUTOCOMPLETE }, //{ name: 'version', type: type.TEXT }, //{ name: 'status', type: type.SELECT }, { name: 'framework', type: type.SELECT_AUTOCOMPLETE }, @@ -145,8 +145,8 @@ export const test = base.extend({ await use(lPage); }, - projectsPage: async ({ page }, use) => { - const pPage = new PageContent(page, '/projects', 'Projects', [ + perimetersPage: async ({ page }, use) => { + const pPage = new PageContent(page, '/perimeters', 'Perimeters', [ { name: 'name', type: type.TEXT }, { name: 'description', type: type.TEXT }, { name: 'folder', type: type.SELECT_AUTOCOMPLETE }, @@ -172,7 +172,7 @@ export const test = base.extend({ const rPage = new PageContent(page, '/risk-assessments', 'Risk assessments', [ { name: 'name', type: type.TEXT }, { name: 'description', type: type.TEXT }, - { name: 'project', type: type.SELECT_AUTOCOMPLETE }, + { name: 'perimeter', type: type.SELECT_AUTOCOMPLETE }, { name: 'version', type: type.TEXT }, { name: 'status', type: type.SELECT }, { name: 'risk_matrix', type: type.SELECT_AUTOCOMPLETE }, @@ -368,10 +368,10 @@ export class TestContent { is_active: false } }, - projectsPage: { - displayName: 'Projects', + perimetersPage: { + displayName: 'Perimeters', build: { - name: vars.projectName, + name: vars.perimeterName, description: vars.description, folder: vars.folderName, ref_id: 'R.1234', @@ -481,7 +481,7 @@ export class TestContent { build: { name: vars.assessmentName, description: vars.description, - project: vars.folderName + '/' + vars.projectName, + perimeter: vars.folderName + '/' + vars.perimeterName, // status: 'Planned', // version: "1.4.2", framework: vars.framework.name @@ -525,7 +525,7 @@ export class TestContent { str: `${vars.riskAssessmentName} - ${vars.riskAssessmentVersion}`, name: vars.riskAssessmentName, description: vars.description, - project: vars.folderName + '/' + vars.projectName, + perimeter: vars.folderName + '/' + vars.perimeterName, version: vars.riskAssessmentVersion, status: 'Planned', risk_matrix: vars.matrix.displayName @@ -547,7 +547,7 @@ export class TestContent { build: { name: vars.riskScenarioName, description: vars.description, - risk_assessment: `${vars.folderName}/${vars.projectName}/${vars.riskAssessmentName} - ${vars.riskAssessmentVersion}`, + risk_assessment: `${vars.folderName}/${vars.perimeterName}/${vars.riskAssessmentName} - ${vars.riskAssessmentVersion}`, threats: ['Global/' + vars.threat.name, 'Global/' + vars.threat2.name] }, editParams: { @@ -574,7 +574,7 @@ export class TestContent { folder: vars.folderName, approver: LoginPage.defaultEmail, risk_scenarios: [ - `${vars.folderName}/${vars.projectName}/${vars.riskAssessmentName} - ${vars.riskAssessmentVersion}/${vars.riskScenarioName}` + `${vars.folderName}/${vars.perimeterName}/${vars.riskAssessmentName} - ${vars.riskAssessmentVersion}/${vars.riskScenarioName}` ] }, editParams: {