From cc5ed360f156bc0e584cd3a52af9237ec38dffa4 Mon Sep 17 00:00:00 2001 From: Mardone Date: Wed, 27 Dec 2023 17:36:20 -0300 Subject: [PATCH 01/15] Add: Org filters usecase --- nexus/usecases/orgs/__init__.py | 3 +- nexus/usecases/orgs/get_by_intelligence.py | 32 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 nexus/usecases/orgs/get_by_intelligence.py diff --git a/nexus/usecases/orgs/__init__.py b/nexus/usecases/orgs/__init__.py index 0e1aa779..fdb2d469 100644 --- a/nexus/usecases/orgs/__init__.py +++ b/nexus/usecases/orgs/__init__.py @@ -1,3 +1,4 @@ from .get_by_uuid import get_by_uuid from .exceptions import OrgDoesNotExists -from .create_org_auth import CreateOrgAuthUseCase \ No newline at end of file +from .create_org_auth import CreateOrgAuthUseCase +from .get_by_intelligence import GetOrgByIntelligenceUseCase diff --git a/nexus/usecases/orgs/get_by_intelligence.py b/nexus/usecases/orgs/get_by_intelligence.py new file mode 100644 index 00000000..077986ed --- /dev/null +++ b/nexus/usecases/orgs/get_by_intelligence.py @@ -0,0 +1,32 @@ +from nexus.orgs.models import Org + + +class GetOrgByIntelligenceUseCase(): + + def get_org_by_intelligence_uuid( + self, + intelligence_uuid: str + ) -> Org: + + org = Org.objects.get( + intelligences__uuid=intelligence_uuid + ) + return org + + def get_org_by_contentbase_uuid( + self, + contentbase_uuid: str + ) -> Org: + org = Org.objects.get( + intelligences__contentbases__uuid=contentbase_uuid + ) + return org + + def get_by_contentbasetext_uuid( + self, + contentbasetext_uuid: str + ) -> Org: + org = Org.objects.get( + intelligences__contentbases__contentbasetexts__uuid=contentbasetext_uuid + ) + return org From 9310f5616d4baa12f7b5f605ca97849909ab31f5 Mon Sep 17 00:00:00 2001 From: Mardone Date: Wed, 27 Dec 2023 17:36:41 -0300 Subject: [PATCH 02/15] Add: Exceptions and OrgAuth Factory --- nexus/usecases/intelligences/exceptions.py | 4 ++++ nexus/usecases/orgs/tests/org_factory.py | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/nexus/usecases/intelligences/exceptions.py b/nexus/usecases/intelligences/exceptions.py index 495c7c4f..8efbc690 100644 --- a/nexus/usecases/intelligences/exceptions.py +++ b/nexus/usecases/intelligences/exceptions.py @@ -8,3 +8,7 @@ class ContentBaseDoesNotExist(Exception): class ContentBaseTextDoesNotExist(Exception): pass + + +class IntelligencePermissionDenied(Exception): + pass diff --git a/nexus/usecases/orgs/tests/org_factory.py b/nexus/usecases/orgs/tests/org_factory.py index b9eba4f1..4f9b3c97 100644 --- a/nexus/usecases/orgs/tests/org_factory.py +++ b/nexus/usecases/orgs/tests/org_factory.py @@ -1,6 +1,6 @@ import factory -from nexus.orgs.models import Org +from nexus.orgs.models import Org, OrgAuth from nexus.usecases.users.tests.user_factory import UserFactory @@ -10,3 +10,12 @@ class Meta: name = factory.Sequence(lambda n: 'test%d' % n) created_by = factory.SubFactory(UserFactory) + + +class OrgAuthFactory(factory.django.DjangoModelFactory): + class Meta: + model = OrgAuth + + org = factory.SubFactory(OrgFactory) + user = factory.SubFactory(UserFactory) + role = 4 From 37634069e9deeb62a508968159f1e8b663e52c43 Mon Sep 17 00:00:00 2001 From: Mardone Date: Wed, 27 Dec 2023 17:37:00 -0300 Subject: [PATCH 03/15] Add: Create use case auths --- nexus/usecases/intelligences/create.py | 38 +++++++++++++++---- .../tests/test_create_intelligence.py | 4 +- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/nexus/usecases/intelligences/create.py b/nexus/usecases/intelligences/create.py index 77f269e1..35b3874f 100644 --- a/nexus/usecases/intelligences/create.py +++ b/nexus/usecases/intelligences/create.py @@ -3,20 +3,31 @@ ContentBase, ContentBaseText ) -from nexus.usecases import orgs, users, intelligences +from nexus.usecases import ( + orgs, + users, + intelligences +) +from nexus.orgs import permissions +from .exceptions import IntelligencePermissionDenied class CreateIntelligencesUseCase(): - def __init__(self): - pass - def create_intelligences( - self, org_uuid: str, user_email: str, - name: str, description: str + self, + org_uuid: str, + user_email: str, + name: str, + description: str ): org = orgs.get_by_uuid(org_uuid) user = users.get_by_email(user_email) + + has_permission = permissions.can_create_intelligence_in_org(user, org) + if not has_permission: + raise IntelligencePermissionDenied() + intelligence = Intelligence.objects.create( name=name, description=description, org=org, created_by=user @@ -33,7 +44,14 @@ def create_contentbase( title: str, ) -> ContentBase: + org_usecase = orgs.GetOrgByIntelligenceUseCase() + org = org_usecase.get_org_by_intelligence_uuid(intelligence_uuid) user = users.get_by_email(user_email) + + has_permission = permissions.can_create_content_bases(user, org) + if not has_permission: + raise IntelligencePermissionDenied() + intelligence = intelligences.get_by_intelligence_uuid( intelligence_uuid ) @@ -54,7 +72,14 @@ def create_contentbasetext( text: str, ) -> ContentBaseText: + org_usecase = orgs.GetOrgByIntelligenceUseCase() + org = org_usecase.get_org_by_contentbase_uuid(contentbase_uuid) user = users.get_by_email(user_email) + + has_permission = permissions.can_create_content_bases(user, org) + if not has_permission: + raise IntelligencePermissionDenied() + contentbase = intelligences.get_by_contentbase_uuid( contentbase_uuid ) @@ -62,6 +87,5 @@ def create_contentbasetext( text=text, content_base=contentbase, created_by=user, - intelligence=contentbase.intelligence ) return contentbasetext diff --git a/nexus/usecases/intelligences/tests/test_create_intelligence.py b/nexus/usecases/intelligences/tests/test_create_intelligence.py index 5024dc06..248dc9fa 100644 --- a/nexus/usecases/intelligences/tests/test_create_intelligence.py +++ b/nexus/usecases/intelligences/tests/test_create_intelligence.py @@ -5,7 +5,7 @@ CreateContentBaseUseCase, CreateContentBaseTextUseCase ) -from nexus.usecases.orgs.tests.org_factory import OrgFactory +from nexus.usecases.orgs.tests.org_factory import OrgFactory, OrgAuthFactory from nexus.usecases.users.tests.user_factory import UserFactory from nexus.usecases.intelligences.tests.intelligence_factory import ( ContentBaseFactory, @@ -17,6 +17,7 @@ class TestListIntelligenceUseCase(TestCase): def setUp(self): self.user = UserFactory() self.org = OrgFactory(created_by=self.user) + self.auth = OrgAuthFactory(org=self.org, user=self.user) def test_create_intelligence_use_case(self): use_case = CreateIntelligencesUseCase() @@ -34,6 +35,7 @@ class TestCreateContentBaseUseCase(TestCase): def setUp(self): self.user = UserFactory() self.org = OrgFactory(created_by=self.user) + self.auth = OrgAuthFactory(org=self.org, user=self.user) self.intelligence = CreateIntelligencesUseCase().create_intelligences( name="name", description="description", From 8e7dc5e8116793cdd08204f0c7002d42618618b9 Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 10:43:49 -0300 Subject: [PATCH 04/15] Add: Missing permision --- nexus/orgs/permissions.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nexus/orgs/permissions.py b/nexus/orgs/permissions.py index 7afd1db5..1f418a10 100644 --- a/nexus/orgs/permissions.py +++ b/nexus/orgs/permissions.py @@ -48,6 +48,11 @@ def can_create_content_bases(user: User, org: Org): return can_contribute(auth) +def can_delete_content_bases(user: User, org: Org): + auth = get_user_auth(user, org) + return can_contribute(auth) + + def can_add_content_base_file(user: User, org: Org): auth = get_user_auth(user, org) return can_contribute(auth) From 102649ef06a3c53f45d7bc754027000c4a7deabf Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 10:44:18 -0300 Subject: [PATCH 05/15] Change: Improve syntax --- nexus/usecases/orgs/get_by_intelligence.py | 2 +- nexus/usecases/orgs/tests/org_factory.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nexus/usecases/orgs/get_by_intelligence.py b/nexus/usecases/orgs/get_by_intelligence.py index 077986ed..18cf7328 100644 --- a/nexus/usecases/orgs/get_by_intelligence.py +++ b/nexus/usecases/orgs/get_by_intelligence.py @@ -22,7 +22,7 @@ def get_org_by_contentbase_uuid( ) return org - def get_by_contentbasetext_uuid( + def get_org_by_contentbasetext_uuid( self, contentbasetext_uuid: str ) -> Org: diff --git a/nexus/usecases/orgs/tests/org_factory.py b/nexus/usecases/orgs/tests/org_factory.py index 4f9b3c97..16756704 100644 --- a/nexus/usecases/orgs/tests/org_factory.py +++ b/nexus/usecases/orgs/tests/org_factory.py @@ -1,6 +1,6 @@ import factory -from nexus.orgs.models import Org, OrgAuth +from nexus.orgs.models import Org, OrgAuth, Role from nexus.usecases.users.tests.user_factory import UserFactory @@ -18,4 +18,4 @@ class Meta: org = factory.SubFactory(OrgFactory) user = factory.SubFactory(UserFactory) - role = 4 + role = Role.ADMIN.value From 5748d95e30822254220c5de40caab35883475c20 Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 10:44:47 -0300 Subject: [PATCH 06/15] Add: Delete intelligence permissions --- nexus/usecases/intelligences/create.py | 2 +- nexus/usecases/intelligences/delete.py | 38 ++++++++++++-- .../tests/intelligence_factory.py | 1 - .../tests/test_delete_intelligence.py | 49 ++++++++++++++++--- 4 files changed, 79 insertions(+), 11 deletions(-) diff --git a/nexus/usecases/intelligences/create.py b/nexus/usecases/intelligences/create.py index 35b3874f..c4c09571 100644 --- a/nexus/usecases/intelligences/create.py +++ b/nexus/usecases/intelligences/create.py @@ -73,7 +73,7 @@ def create_contentbasetext( ) -> ContentBaseText: org_usecase = orgs.GetOrgByIntelligenceUseCase() - org = org_usecase.get_org_by_contentbase_uuid(contentbase_uuid) + org = org_usecase.get_org_by_contentbasetext_uuid(contentbase_uuid) user = users.get_by_email(user_email) has_permission = permissions.can_create_content_bases(user, org) diff --git a/nexus/usecases/intelligences/delete.py b/nexus/usecases/intelligences/delete.py index 0e299c3e..ef2df42a 100644 --- a/nexus/usecases/intelligences/delete.py +++ b/nexus/usecases/intelligences/delete.py @@ -3,14 +3,28 @@ get_by_contentbase_uuid, get_by_contentbasetext_uuid ) +from nexus.usecases import ( + users, + orgs +) +from nexus.orgs import permissions +from .exceptions import IntelligencePermissionDenied class DeleteIntelligenceUseCase(): def delete_intelligences( self, - intelligence_uuid: str + intelligence_uuid: str, + user_email: str ): + org_use_case = orgs.GetOrgByIntelligenceUseCase() + user = users.get_by_email(user_email) + org = org_use_case.get_org_by_intelligence_uuid(intelligence_uuid) + + has_permission = permissions.can_delete_intelligence_of_org(user, org) + if not has_permission: + raise IntelligencePermissionDenied() intelligence = get_by_intelligence_uuid(intelligence_uuid) intelligence.delete() @@ -21,8 +35,16 @@ class DeleteContentBaseUseCase(): def delete_contentbase( self, - contentbase_uuid: str + contentbase_uuid: str, + user_email: str ): + org_use_case = orgs.GetOrgByIntelligenceUseCase() + user = users.get_by_email(user_email) + org = org_use_case.get_org_by_contentbase_uuid(contentbase_uuid) + + has_permission = permissions.can_delete_content_bases(user, org) + if not has_permission: + raise IntelligencePermissionDenied() contentbase = get_by_contentbase_uuid(contentbase_uuid) contentbase.delete() @@ -33,8 +55,18 @@ class DeleteContentBaseTextUseCase(): def delete_contentbasetext( self, - contentbasetext_uuid: str + contentbasetext_uuid: str, + user_email: str ): + org_use_case = orgs.GetOrgByIntelligenceUseCase() + org = org_use_case.get_org_by_contentbasetext_uuid( + contentbasetext_uuid + ) + user = users.get_by_email(user_email) + + has_permission = permissions.can_delete_content_bases(user, org) + if not has_permission: + raise IntelligencePermissionDenied() contentbasetext = get_by_contentbasetext_uuid(contentbasetext_uuid) contentbasetext.delete() diff --git a/nexus/usecases/intelligences/tests/intelligence_factory.py b/nexus/usecases/intelligences/tests/intelligence_factory.py index 1d57bedc..73a5b23c 100644 --- a/nexus/usecases/intelligences/tests/intelligence_factory.py +++ b/nexus/usecases/intelligences/tests/intelligence_factory.py @@ -36,4 +36,3 @@ class Meta: created_by = factory.SubFactory(UserFactory) content_base = factory.SubFactory(ContentBaseFactory) text = factory.Sequence(lambda n: 'test%d' % n) - intelligence = factory.SubFactory(IntelligenceFactory) diff --git a/nexus/usecases/intelligences/tests/test_delete_intelligence.py b/nexus/usecases/intelligences/tests/test_delete_intelligence.py index 1dab91ad..142320a0 100644 --- a/nexus/usecases/intelligences/tests/test_delete_intelligence.py +++ b/nexus/usecases/intelligences/tests/test_delete_intelligence.py @@ -14,36 +14,73 @@ ContentBaseFactory, ContentBaseTextFactory ) +from nexus.usecases.orgs.tests.org_factory import OrgFactory, OrgAuthFactory +from nexus.usecases.users.tests.user_factory import UserFactory class TestDeleteIntelligenceUseCase(TestCase): def setUp(self): self.use_case = DeleteIntelligenceUseCase() - self.intelligence = IntelligenceFactory() + self.user = UserFactory() + self.org = OrgFactory(created_by=self.user) + self.org_auth = OrgAuthFactory(org=self.org, user=self.user) + self.intelligence = IntelligenceFactory( + org=self.org, + created_by=self.user + ) def test_delete_intelligence(self): - self.use_case.delete_intelligences(self.intelligence.uuid) + self.use_case.delete_intelligences( + self.intelligence.uuid, + self.user.email + ) self.assertEqual(Intelligence.objects.count(), 0) class TestDeleteContentBaseUseCase(TestCase): def setUp(self): - self.contentbase = ContentBaseFactory() + self.user = UserFactory() + self.org = OrgFactory(created_by=self.user) + self.auth = OrgAuthFactory(org=self.org, user=self.user) + self.intelligence = IntelligenceFactory( + org=self.org, + created_by=self.user + ) + self.contentbase = ContentBaseFactory( + intelligence=self.intelligence + ) def test_delete_contentbase(self): use_case = DeleteContentBaseUseCase() - use_case.delete_contentbase(self.contentbase.uuid) + use_case.delete_contentbase( + self.contentbase.uuid, + self.user.email + ) self.assertEqual(ContentBase.objects.count(), 0) class TestDeleteContentBaseTextUseCase(TestCase): def setUp(self): - self.contentbasetext = ContentBaseTextFactory() + self.user = UserFactory() + self.org = OrgFactory(created_by=self.user) + self.auth = OrgAuthFactory(org=self.org, user=self.user) + self.intelligence = IntelligenceFactory( + org=self.org, + created_by=self.user + ) + self.contentbase = ContentBaseFactory(intelligence=self.intelligence) + self.contentbasetext = ContentBaseTextFactory( + content_base=self.contentbase, + created_by=self.user + ) def test_delete_contentbasetext(self): use_case = DeleteContentBaseTextUseCase() - status = use_case.delete_contentbasetext(self.contentbasetext.uuid) + status = use_case.delete_contentbasetext( + contentbasetext_uuid=self.contentbasetext.uuid, + user_email=self.user.email + ) self.assertEqual(ContentBaseText.objects.count(), 0) self.assertTrue(status) From cc3c7900df23b21b9399f3206975eff5fe9b9a41 Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 11:11:37 -0300 Subject: [PATCH 07/15] Add: Factories self attributes improvements --- .../intelligences/tests/intelligence_factory.py | 15 ++++++++++++--- .../intelligences/tests/test_list_intelligence.py | 11 ++++++++--- nexus/usecases/orgs/tests/org_factory.py | 5 +++++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/nexus/usecases/intelligences/tests/intelligence_factory.py b/nexus/usecases/intelligences/tests/intelligence_factory.py index 73a5b23c..89662c78 100644 --- a/nexus/usecases/intelligences/tests/intelligence_factory.py +++ b/nexus/usecases/intelligences/tests/intelligence_factory.py @@ -15,7 +15,10 @@ class Meta: model = Intelligence name = factory.Sequence(lambda n: 'test%d' % n) - org = factory.SubFactory(OrgFactory) + org = factory.SubFactory( + OrgFactory, + created_by=factory.SelfAttribute('..created_by') + ) created_by = factory.SubFactory(UserFactory) description = factory.Sequence(lambda n: 'test%d' % n) @@ -25,7 +28,10 @@ class Meta: model = ContentBase title = factory.Sequence(lambda n: 'test%d' % n) - intelligence = factory.SubFactory(IntelligenceFactory) + intelligence = factory.SubFactory( + IntelligenceFactory, + created_by=factory.SelfAttribute('..created_by') + ) created_by = factory.SubFactory(UserFactory) @@ -34,5 +40,8 @@ class Meta: model = ContentBaseText created_by = factory.SubFactory(UserFactory) - content_base = factory.SubFactory(ContentBaseFactory) + content_base = factory.SubFactory( + ContentBaseFactory, + created_by=factory.SelfAttribute('..created_by') + ) text = factory.Sequence(lambda n: 'test%d' % n) diff --git a/nexus/usecases/intelligences/tests/test_list_intelligence.py b/nexus/usecases/intelligences/tests/test_list_intelligence.py index cf1a4c28..694e0b5f 100644 --- a/nexus/usecases/intelligences/tests/test_list_intelligence.py +++ b/nexus/usecases/intelligences/tests/test_list_intelligence.py @@ -21,7 +21,10 @@ def setUp(self): def test_count_intelligence_use_case(self): use_case = ListIntelligencesUseCase() - intelligences_list = use_case.get_org_intelligences(self.org.uuid) + intelligences_list = use_case.get_org_intelligences( + org_uuid=self.org.uuid, + user_email=self.org.created_by.email + ) self.assertEqual(1, len(intelligences_list)) @@ -35,7 +38,8 @@ def setUp(self): def test_count_contentbase_use_case(self): use_case = ListContentBaseUseCase() contentbase_list = use_case.get_intelligence_contentbases( - self.intelligence.uuid + self.intelligence.uuid, + user_email=self.intelligence.created_by.email ) self.assertEqual(1, len(contentbase_list)) @@ -48,6 +52,7 @@ def setUp(self): def test_count_contentbasetext_use_case(self): use_case = ListContentBaseTextUseCase() contentbasetext_list = use_case.get_contentbase_contentbasetexts( - self.contentbasetext.content_base.uuid + self.contentbasetext.content_base.uuid, + user_email=self.contentbasetext.created_by.email ) self.assertEqual(1, len(contentbasetext_list)) diff --git a/nexus/usecases/orgs/tests/org_factory.py b/nexus/usecases/orgs/tests/org_factory.py index 16756704..1abb4bab 100644 --- a/nexus/usecases/orgs/tests/org_factory.py +++ b/nexus/usecases/orgs/tests/org_factory.py @@ -10,6 +10,11 @@ class Meta: name = factory.Sequence(lambda n: 'test%d' % n) created_by = factory.SubFactory(UserFactory) + org_auth = factory.RelatedFactory( + 'nexus.usecases.orgs.tests.org_factory.OrgAuthFactory', + 'org', + user=factory.SelfAttribute('..created_by') + ) class OrgAuthFactory(factory.django.DjangoModelFactory): From b04c0ec087960cc16bb200b73434b970d1a754e4 Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 11:11:57 -0300 Subject: [PATCH 08/15] Add: List update usecase tests --- nexus/usecases/intelligences/list.py | 42 +++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/nexus/usecases/intelligences/list.py b/nexus/usecases/intelligences/list.py index 4075504f..640de5a6 100644 --- a/nexus/usecases/intelligences/list.py +++ b/nexus/usecases/intelligences/list.py @@ -3,7 +3,9 @@ ContentBase, ContentBaseText ) -from nexus.usecases import orgs +from nexus.usecases import orgs, users +from nexus.orgs import permissions +from .exceptions import IntelligencePermissionDenied from .get_by_uuid import ( get_by_intelligence_uuid, get_by_contentbase_uuid @@ -12,20 +14,52 @@ class ListIntelligencesUseCase(): - def get_org_intelligences(self, org_uuid: str): + def get_org_intelligences( + self, + org_uuid: str, + user_email: str + ) -> Intelligence: + user = users.get_by_email(user_email) org = orgs.get_by_uuid(org_uuid) + + has_permission = permissions.can_list_org_intelligences(user, org) + if not has_permission: + raise IntelligencePermissionDenied() return Intelligence.objects.filter(org=org) class ListContentBaseUseCase(): - def get_intelligence_contentbases(self, intelligence_uuid: str): + def get_intelligence_contentbases( + self, + intelligence_uuid: str, + user_email: str + ) -> ContentBase: + org_use_case = orgs.GetOrgByIntelligenceUseCase() + user = users.get_by_email(user_email) + org = org_use_case.get_org_by_intelligence_uuid(intelligence_uuid) + + has_permission = permissions.can_list_content_bases(user, org) + if not has_permission: + raise IntelligencePermissionDenied() + intelligence = get_by_intelligence_uuid(intelligence_uuid) return ContentBase.objects.filter(intelligence=intelligence) class ListContentBaseTextUseCase(): - def get_contentbase_contentbasetexts(self, contentbase_uuid: str): + def get_contentbase_contentbasetexts( + self, + contentbase_uuid: str, + user_email: str + ): + org_use_case = orgs.GetOrgByIntelligenceUseCase() + user = users.get_by_email(user_email) + org = org_use_case.get_org_by_contentbase_uuid(contentbase_uuid) + + has_permission = permissions.can_list_content_bases(user, org) + if not has_permission: + raise IntelligencePermissionDenied() contentbase = get_by_contentbase_uuid(contentbase_uuid) return ContentBaseText.objects.filter(content_base=contentbase) From 2d38cb7ee0e491c09218ecf93d984632bfb035d4 Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 11:20:17 -0300 Subject: [PATCH 09/15] Add: Simplify tests after factory changes --- .../tests/test_create_intelligence.py | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/nexus/usecases/intelligences/tests/test_create_intelligence.py b/nexus/usecases/intelligences/tests/test_create_intelligence.py index 248dc9fa..beb79a4c 100644 --- a/nexus/usecases/intelligences/tests/test_create_intelligence.py +++ b/nexus/usecases/intelligences/tests/test_create_intelligence.py @@ -5,8 +5,7 @@ CreateContentBaseUseCase, CreateContentBaseTextUseCase ) -from nexus.usecases.orgs.tests.org_factory import OrgFactory, OrgAuthFactory -from nexus.usecases.users.tests.user_factory import UserFactory +from nexus.usecases.orgs.tests.org_factory import OrgFactory from nexus.usecases.intelligences.tests.intelligence_factory import ( ContentBaseFactory, ) @@ -15,9 +14,7 @@ class TestListIntelligenceUseCase(TestCase): def setUp(self): - self.user = UserFactory() - self.org = OrgFactory(created_by=self.user) - self.auth = OrgAuthFactory(org=self.org, user=self.user) + self.org = OrgFactory() def test_create_intelligence_use_case(self): use_case = CreateIntelligencesUseCase() @@ -25,7 +22,7 @@ def test_create_intelligence_use_case(self): name="name", description="description", org_uuid=self.org.uuid, - user_email=self.user.email + user_email=self.org.created_by ) self.assertEqual(intelligences_create.name, "name") @@ -33,34 +30,29 @@ def test_create_intelligence_use_case(self): class TestCreateContentBaseUseCase(TestCase): def setUp(self): - self.user = UserFactory() - self.org = OrgFactory(created_by=self.user) - self.auth = OrgAuthFactory(org=self.org, user=self.user) + self.org = OrgFactory() self.intelligence = CreateIntelligencesUseCase().create_intelligences( name="name", description="description", org_uuid=self.org.uuid, - user_email=self.user.email + user_email=self.org.created_by ) def test_create_content_base_use_case(self): use_case = CreateContentBaseUseCase() content_base_create = use_case.create_contentbase( intelligence_uuid=self.intelligence.uuid, - user_email=self.user.email, + user_email=self.org.created_by, title="title" ) self.assertEqual(content_base_create.title, "title") def test_create_content_base_text_use_case(self): - contentbase = ContentBaseFactory( - intelligence=self.intelligence, - created_by=self.user - ) + contentbase = ContentBaseFactory() use_case = CreateContentBaseTextUseCase() content_base_text_create = use_case.create_contentbasetext( contentbase_uuid=contentbase.uuid, - user_email=self.user.email, + user_email=contentbase.created_by.email, text="text" ) self.assertEqual(content_base_text_create.text, "text") From 7d9dfb24599650fb9b2fb378d64a6d2e78f3ff94 Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 11:20:31 -0300 Subject: [PATCH 10/15] Fix: Create permission --- nexus/usecases/intelligences/create.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nexus/usecases/intelligences/create.py b/nexus/usecases/intelligences/create.py index c4c09571..35b3874f 100644 --- a/nexus/usecases/intelligences/create.py +++ b/nexus/usecases/intelligences/create.py @@ -73,7 +73,7 @@ def create_contentbasetext( ) -> ContentBaseText: org_usecase = orgs.GetOrgByIntelligenceUseCase() - org = org_usecase.get_org_by_contentbasetext_uuid(contentbase_uuid) + org = org_usecase.get_org_by_contentbase_uuid(contentbase_uuid) user = users.get_by_email(user_email) has_permission = permissions.can_create_content_bases(user, org) From e8353e1eda9f96e3fbc217cb89db5553ab27b2da Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 11:23:26 -0300 Subject: [PATCH 11/15] Add: Simplify delete tests after factory changes --- .../tests/test_delete_intelligence.py | 42 ++++--------------- 1 file changed, 8 insertions(+), 34 deletions(-) diff --git a/nexus/usecases/intelligences/tests/test_delete_intelligence.py b/nexus/usecases/intelligences/tests/test_delete_intelligence.py index 142320a0..f63331b3 100644 --- a/nexus/usecases/intelligences/tests/test_delete_intelligence.py +++ b/nexus/usecases/intelligences/tests/test_delete_intelligence.py @@ -21,18 +21,12 @@ class TestDeleteIntelligenceUseCase(TestCase): def setUp(self): self.use_case = DeleteIntelligenceUseCase() - self.user = UserFactory() - self.org = OrgFactory(created_by=self.user) - self.org_auth = OrgAuthFactory(org=self.org, user=self.user) - self.intelligence = IntelligenceFactory( - org=self.org, - created_by=self.user - ) + self.intelligence = IntelligenceFactory() def test_delete_intelligence(self): self.use_case.delete_intelligences( - self.intelligence.uuid, - self.user.email + intelligence_uuid=self.intelligence.uuid, + user_email=self.intelligence.created_by.email ) self.assertEqual(Intelligence.objects.count(), 0) @@ -40,22 +34,13 @@ def test_delete_intelligence(self): class TestDeleteContentBaseUseCase(TestCase): def setUp(self): - self.user = UserFactory() - self.org = OrgFactory(created_by=self.user) - self.auth = OrgAuthFactory(org=self.org, user=self.user) - self.intelligence = IntelligenceFactory( - org=self.org, - created_by=self.user - ) - self.contentbase = ContentBaseFactory( - intelligence=self.intelligence - ) + self.contentbase = ContentBaseFactory() def test_delete_contentbase(self): use_case = DeleteContentBaseUseCase() use_case.delete_contentbase( - self.contentbase.uuid, - self.user.email + contentbase_uuid=self.contentbase.uuid, + user_email=self.contentbase.created_by.email ) self.assertEqual(ContentBase.objects.count(), 0) @@ -63,24 +48,13 @@ def test_delete_contentbase(self): class TestDeleteContentBaseTextUseCase(TestCase): def setUp(self): - self.user = UserFactory() - self.org = OrgFactory(created_by=self.user) - self.auth = OrgAuthFactory(org=self.org, user=self.user) - self.intelligence = IntelligenceFactory( - org=self.org, - created_by=self.user - ) - self.contentbase = ContentBaseFactory(intelligence=self.intelligence) - self.contentbasetext = ContentBaseTextFactory( - content_base=self.contentbase, - created_by=self.user - ) + self.contentbasetext = ContentBaseTextFactory() def test_delete_contentbasetext(self): use_case = DeleteContentBaseTextUseCase() status = use_case.delete_contentbasetext( contentbasetext_uuid=self.contentbasetext.uuid, - user_email=self.user.email + user_email=self.contentbasetext.created_by.email ) self.assertEqual(ContentBaseText.objects.count(), 0) self.assertTrue(status) From f158d211ad06b62b67a75670fb43bd242a42e38a Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 12:02:48 -0300 Subject: [PATCH 12/15] Add: Retrieve usecase unittest --- nexus/usecases/intelligences/retrieve.py | 46 +++++++++++++- .../tests/test_retrieve_intelligence.py | 62 +++++++++++++++++++ 2 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 nexus/usecases/intelligences/tests/test_retrieve_intelligence.py diff --git a/nexus/usecases/intelligences/retrieve.py b/nexus/usecases/intelligences/retrieve.py index da27e1cc..e5e3195a 100644 --- a/nexus/usecases/intelligences/retrieve.py +++ b/nexus/usecases/intelligences/retrieve.py @@ -3,21 +3,61 @@ get_by_contentbase_uuid, get_by_contentbasetext_uuid ) +from nexus.usecases import orgs, users +from nexus.orgs import permissions +from .exceptions import IntelligencePermissionDenied class RetrieveIntelligenceUseCase(): - def get_intelligence(self, intelligence_uuid: str): + def get_intelligence( + self, + intelligence_uuid: str, + user_email: str + ): + user = users.get_by_email(user_email) + org_use_case = orgs.GetOrgByIntelligenceUseCase() + org = org_use_case.get_org_by_intelligence_uuid(intelligence_uuid) + + has_permission = permissions.can_list_org_intelligences(user, org) + if not has_permission: + raise IntelligencePermissionDenied() + return get_by_intelligence_uuid(intelligence_uuid) class RetrieveContentBaseUseCase(): - def get_contentbase(self, contentbase_uuid: str): + def get_contentbase( + self, + contentbase_uuid: str, + user_email: str + ): + org_use_case = orgs.GetOrgByIntelligenceUseCase() + user = users.get_by_email(user_email) + org = org_use_case.get_org_by_contentbase_uuid(contentbase_uuid) + + has_permission = permissions.can_list_content_bases(user, org) + if not has_permission: + raise IntelligencePermissionDenied() + return get_by_contentbase_uuid(contentbase_uuid) class RetrieveContentBaseTextUseCase(): - def get_contentbasetext(self, contentbasetext_uuid: str): + def get_contentbasetext( + self, + contentbasetext_uuid: str, + user_email: str + ): + org_use_case = orgs.GetOrgByIntelligenceUseCase() + user = users.get_by_email(user_email) + org = org_use_case.get_org_by_contentbasetext_uuid( + contentbasetext_uuid + ) + + has_permission = permissions.can_list_content_bases(user, org) + if not has_permission: + raise IntelligencePermissionDenied() return get_by_contentbasetext_uuid(contentbasetext_uuid) diff --git a/nexus/usecases/intelligences/tests/test_retrieve_intelligence.py b/nexus/usecases/intelligences/tests/test_retrieve_intelligence.py new file mode 100644 index 00000000..9a35c9d9 --- /dev/null +++ b/nexus/usecases/intelligences/tests/test_retrieve_intelligence.py @@ -0,0 +1,62 @@ +from django.test import TestCase + +from nexus.intelligences.models import ( + Intelligence, + ContentBase, + ContentBaseText +) +from ..retrieve import ( + RetrieveContentBaseTextUseCase, + RetrieveContentBaseUseCase, + RetrieveIntelligenceUseCase +) +from .intelligence_factory import ( + IntelligenceFactory, + ContentBaseFactory, + ContentBaseTextFactory +) + + +class TestRetrieveIntelligenceUseCase(TestCase): + + def setUp(self): + self.intelligence = IntelligenceFactory() + + def test_count_intelligence_use_case(self): + use_case = RetrieveIntelligenceUseCase() + intelligences_retrieve = use_case.get_intelligence( + intelligence_uuid=self.intelligence.uuid, + user_email=self.intelligence.created_by.email + ) + self.assertIsNotNone(intelligences_retrieve) + self.assertIsInstance(intelligences_retrieve, Intelligence) + + +class TestRetrieveContentBaseUseCase(TestCase): + + def setUp(self): + self.contentbase = ContentBaseFactory() + + def test_count_contentbase_use_case(self): + use_case = RetrieveContentBaseUseCase() + contentbase_retrieve = use_case.get_contentbase( + contentbase_uuid=self.contentbase.uuid, + user_email=self.contentbase.created_by.email + ) + self.assertIsNotNone(contentbase_retrieve) + self.assertIsInstance(contentbase_retrieve, ContentBase) + + +class TestRetrieveContentBaseTextUseCase(TestCase): + + def setUp(self): + self.contentbasetext = ContentBaseTextFactory() + + def test_count_contentbasetext_use_case(self): + use_case = RetrieveContentBaseTextUseCase() + contentbasetext_retrieve = use_case.get_contentbasetext( + contentbasetext_uuid=self.contentbasetext.uuid, + user_email=self.contentbasetext.created_by.email + ) + self.assertIsNotNone(contentbasetext_retrieve) + self.assertIsInstance(contentbasetext_retrieve, ContentBaseText) From 8a86f97061bbb7803840b7916bd4f573b0017a15 Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 12:08:25 -0300 Subject: [PATCH 13/15] Add: Authorization to use update usecase --- nexus/orgs/permissions.py | 5 +++ .../tests/test_update_intelligence.py | 16 +++++--- nexus/usecases/intelligences/update.py | 38 ++++++++++++++----- 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/nexus/orgs/permissions.py b/nexus/orgs/permissions.py index 1f418a10..97b9c84a 100644 --- a/nexus/orgs/permissions.py +++ b/nexus/orgs/permissions.py @@ -53,6 +53,11 @@ def can_delete_content_bases(user: User, org: Org): return can_contribute(auth) +def can_edit_content_bases(user: User, org: Org): + auth = get_user_auth(user, org) + return can_contribute(auth) + + def can_add_content_base_file(user: User, org: Org): auth = get_user_auth(user, org) return can_contribute(auth) diff --git a/nexus/usecases/intelligences/tests/test_update_intelligence.py b/nexus/usecases/intelligences/tests/test_update_intelligence.py index 5a565825..563abb5c 100644 --- a/nexus/usecases/intelligences/tests/test_update_intelligence.py +++ b/nexus/usecases/intelligences/tests/test_update_intelligence.py @@ -21,7 +21,8 @@ def test_update_intelligence_name(self): new_name = 'New Intelligence Name' updated_intelligence = self.use_case.update_intelligences( intelligence_uuid=self.intelligence.uuid, - name=new_name + name=new_name, + user_email=self.intelligence.created_by.email ) self.assertEqual(updated_intelligence.name, new_name) @@ -29,7 +30,8 @@ def test_update_intelligence_description(self): new_description = 'New Intelligence Description' updated_intelligence = self.use_case.update_intelligences( intelligence_uuid=self.intelligence.uuid, - description=new_description + description=new_description, + user_email=self.intelligence.created_by.email ) self.assertEqual(updated_intelligence.description, new_description) @@ -39,7 +41,8 @@ def test_update_intelligence_name_and_description(self): updated_intelligence = self.use_case.update_intelligences( intelligence_uuid=self.intelligence.uuid, name=new_name, - description=new_description + description=new_description, + user_email=self.intelligence.created_by.email ) self.assertEqual(updated_intelligence.name, new_name) self.assertEqual(updated_intelligence.description, new_description) @@ -48,7 +51,6 @@ def test_update_intelligence_name_and_description(self): class TestUpdateContentBaseUseCase(TestCase): def setUp(self): - self.contentbase = ContentBaseFactory() def test_update_contentbase_title(self): @@ -56,7 +58,8 @@ def test_update_contentbase_title(self): use_case = UpdateContentBaseUseCase() updated_contentbase = use_case.update_contentbase( contentbase_uuid=self.contentbase.uuid, - title=new_title + title=new_title, + user_email=self.contentbase.created_by.email ) self.assertEqual(updated_contentbase.title, new_title) @@ -71,6 +74,7 @@ def test_update_contentbasetext_text(self): use_case = UpdateContentBaseTextUseCase() updated_contentbasetext = use_case.update_contentbasetext( contentbasetext_uuid=self.contentbasetext.uuid, - text=new_text + text=new_text, + user_email=self.contentbasetext.created_by.email ) self.assertEqual(updated_contentbasetext.text, new_text) diff --git a/nexus/usecases/intelligences/update.py b/nexus/usecases/intelligences/update.py index 85da6e8b..87bdbf35 100644 --- a/nexus/usecases/intelligences/update.py +++ b/nexus/usecases/intelligences/update.py @@ -3,19 +3,27 @@ get_by_contentbase_uuid, get_by_contentbasetext_uuid ) +from nexus.usecases import orgs, users +from nexus.orgs import permissions +from .exceptions import IntelligencePermissionDenied class UpdateIntelligenceUseCase(): - def __init__(self): - pass - def update_intelligences( self, intelligence_uuid: str, + user_email: str, name: str = None, description: str = None, ): + user = users.get_by_email(user_email) + org_use_case = orgs.GetOrgByIntelligenceUseCase() + org = org_use_case.get_org_by_intelligence_uuid(intelligence_uuid) + + has_permission = permissions.can_edit_intelligence_of_org(user, org) + if not has_permission: + raise IntelligencePermissionDenied() intelligence = get_by_intelligence_uuid(intelligence_uuid) @@ -32,14 +40,19 @@ def update_intelligences( class UpdateContentBaseUseCase(): - def __init__(self): - pass - def update_contentbase( self, contentbase_uuid: str, + user_email: str, title: str = None, ): + org_use_case = orgs.GetOrgByIntelligenceUseCase() + user = users.get_by_email(user_email) + org = org_use_case.get_org_by_contentbase_uuid(contentbase_uuid) + + has_permission = permissions.can_edit_content_bases(user, org) + if not has_permission: + raise IntelligencePermissionDenied() contentbase = get_by_contentbase_uuid(contentbase_uuid) @@ -52,14 +65,21 @@ def update_contentbase( class UpdateContentBaseTextUseCase(): - def __init__(self): - pass - def update_contentbasetext( self, contentbasetext_uuid: str, + user_email: str, text: str = None, ): + org_use_case = orgs.GetOrgByIntelligenceUseCase() + user = users.get_by_email(user_email) + org = org_use_case.get_org_by_contentbasetext_uuid( + contentbasetext_uuid + ) + + has_permission = permissions.can_edit_content_bases(user, org) + if not has_permission: + raise IntelligencePermissionDenied() contentbasetext = get_by_contentbasetext_uuid(contentbasetext_uuid) From 6ff2c2048b294561b6088c23280e18c750c5ee7c Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 15:17:49 -0300 Subject: [PATCH 14/15] Add: Send user email when recieving an api request --- nexus/intelligences/api/views.py | 59 ++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/nexus/intelligences/api/views.py b/nexus/intelligences/api/views.py index 41c427d0..1d415428 100644 --- a/nexus/intelligences/api/views.py +++ b/nexus/intelligences/api/views.py @@ -26,31 +26,34 @@ class IntelligencesViewset( pagination_class = CustomCursorPagination def get_queryset(self): + user_email = self.request.user.email use_case = intelligences.ListIntelligencesUseCase() org_uuid = self.kwargs.get('org_uuid') use_case_list = use_case.get_org_intelligences( - org_uuid + org_uuid, + user_email=user_email ) return use_case_list def retrieve(self, request, *args, **kwargs): - + user_email = request.user.email intelligence_uuid = kwargs.get('intelligence_uuid') use_case = intelligences.RetrieveIntelligenceUseCase() intelligence = use_case.get_intelligence( - intelligence_uuid=intelligence_uuid + intelligence_uuid=intelligence_uuid, + user_email=user_email ) serializer = IntelligenceSerializer(intelligence) return Response(serializer.data, status=status.HTTP_200_OK) def create(self, request, org_uuid=str): + user_email = request.user.email use_case = intelligences.CreateIntelligencesUseCase() serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) - user_email = request.data.get("email") name = serializer.validated_data.get('name') description = serializer.validated_data.get('description') @@ -67,12 +70,14 @@ def create(self, request, org_uuid=str): ) def update(self, request): + user_email = request.user.email use_case = intelligences.UpdateIntelligenceUseCase() update_intelligence = use_case.update_intelligences( intelligence_uuid=request.data.get('intelligence_uuid'), name=request.data.get('name'), - description=request.data.get('description') + description=request.data.get('description'), + user_email=user_email ) return Response( @@ -81,12 +86,14 @@ def update(self, request): ) def destroy(self, request): + user_email = request.user.email use_case = intelligences.DeleteIntelligenceUseCase() intelligence_uuid = request.data.get('intelligence_uuid') use_case.delete_intelligences( - intelligence_uuid=intelligence_uuid + intelligence_uuid=intelligence_uuid, + user_email=user_email ) return Response( @@ -102,31 +109,34 @@ class ContentBaseViewset( serializer_class = ContentBaseSerializer def get_queryset(self): + user_email = self.request.user.email use_case = intelligences.ListContentBaseUseCase() intelligence_uuid = self.kwargs.get('intelligence_uuid') use_case_list = use_case.get_intelligence_contentbases( - intelligence_uuid + intelligence_uuid, + user_email=user_email ) return use_case_list def retrieve(self, request, *args, **kwargs): - + user_email = request.user.email contentbase_uuid = kwargs.get('content_base_uuid') use_case = intelligences.RetrieveContentBaseUseCase() contentbase = use_case.get_contentbase( - contentbase_uuid=contentbase_uuid + contentbase_uuid=contentbase_uuid, + user_email=user_email ) serializer = ContentBaseSerializer(contentbase) return Response(serializer.data, status=status.HTTP_200_OK) def create(self, request, intelligence_uuid=str): + user_email = request.user.email use_case = intelligences.CreateContentBaseUseCase() serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) title = serializer.validated_data.get('title') - user_email = request.data.get("email") contentbase = use_case.create_contentbase( intelligence_uuid=intelligence_uuid, @@ -140,11 +150,13 @@ def create(self, request, intelligence_uuid=str): ) def update(self, request): + user_email = request.user.email use_case = intelligences.UpdateContentBaseUseCase() update_contentbase = use_case.update_contentbase( contentbase_uuid=request.data.get('contentbase_uuid'), - title=request.data.get('title') + title=request.data.get('title'), + user_email=user_email ) return Response( @@ -153,12 +165,14 @@ def update(self, request): ) def destroy(self, request): + user_email = request.user.email use_case = intelligences.DeleteContentBaseUseCase() contentbase_uuid = request.data.get('contentbase_uuid') use_case.delete_contentbase( - contentbase_uuid=contentbase_uuid + contentbase_uuid=contentbase_uuid, + user_email=user_email ) return Response( @@ -174,31 +188,36 @@ class ContentBaseTextViewset( serializer_class = ContentBaseTextSerializer def get_queryset(self): + user_email = self.request.user.email use_case = intelligences.ListContentBaseTextUseCase() contentbase_uuid = self.kwargs.get('contentbase_uuid') use_case_list = use_case.get_contentbase_contentbasetexts( - contentbase_uuid + contentbase_uuid, + user_email=user_email ) return use_case_list def retrieve(self, request, *args, **kwargs): - + user_email = request.user.email contentbasetext_uuid = kwargs.get('content_base_text_uuid') + use_case = intelligences.RetrieveContentBaseTextUseCase() contentbasetext = use_case.get_contentbasetext( - contentbasetext_uuid=contentbasetext_uuid + contentbasetext_uuid=contentbasetext_uuid, + user_email=user_email ) + serializer = ContentBaseTextSerializer(contentbasetext) return Response(serializer.data, status=status.HTTP_200_OK) def create(self, request, contentbase_uuid=str): + user_email = request.user.email use_case = intelligences.CreateContentBaseTextUseCase() serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) text = serializer.validated_data.get('text') - user_email = request.data.get("email") contentbasetext = use_case.create_contentbasetext( contentbase_uuid=contentbase_uuid, @@ -212,11 +231,13 @@ def create(self, request, contentbase_uuid=str): ) def update(self, request): + user_email = request.user.email use_case = intelligences.UpdateContentBaseTextUseCase() update_contentbasetext = use_case.update_contentbasetext( contentbasetext_uuid=request.data.get('contentbasetext_uuid'), - text=request.data.get('text') + text=request.data.get('text'), + user_email=user_email ) return Response( @@ -225,12 +246,14 @@ def update(self, request): ) def destroy(self, request): + user_email = request.user.email use_case = intelligences.DeleteContentBaseTextUseCase() contentbasetext_uuid = request.data.get('contentbasetext_uuid') use_case.delete_contentbasetext( - contentbasetext_uuid=contentbasetext_uuid + contentbasetext_uuid=contentbasetext_uuid, + user_email=user_email ) return Response( From fc3a7faa7e657a673e76bc8f9f88835e08a5fa1b Mon Sep 17 00:00:00 2001 From: Mardone Date: Thu, 28 Dec 2023 15:18:08 -0300 Subject: [PATCH 15/15] Add: Update the tests for the new params --- nexus/intelligences/api/tests/test_views.py | 90 ++++++++++----------- 1 file changed, 43 insertions(+), 47 deletions(-) diff --git a/nexus/intelligences/api/tests/test_views.py b/nexus/intelligences/api/tests/test_views.py index 93e2c2fd..aec68adf 100644 --- a/nexus/intelligences/api/tests/test_views.py +++ b/nexus/intelligences/api/tests/test_views.py @@ -1,15 +1,15 @@ import json from django.test import TestCase +from rest_framework.test import force_authenticate from rest_framework.test import APIRequestFactory + from ..views import ( IntelligencesViewset, ContentBaseViewset, ContentBaseTextViewset ) -from nexus.usecases.users.tests.user_factory import UserFactory -from nexus.usecases.orgs.tests.org_factory import OrgFactory from nexus.usecases.intelligences.tests.intelligence_factory import ( IntelligenceFactory, ContentBaseFactory, @@ -26,69 +26,78 @@ def setUp(self): 'put': 'update', 'delete': 'destroy', }) - self.user = UserFactory() - self.org = OrgFactory( - created_by=self.user - ) - self.intelligence = IntelligenceFactory( - created_by=self.user, - org=self.org - ) + self.intelligence = IntelligenceFactory() + self.user = self.intelligence.created_by + self.org = self.intelligence.org self.url = f'{self.org.uuid}/intelligences/' def test_get_queryset(self): request = self.factory.get(self.url) - response = self.view(request, org_uuid=str(self.org.uuid)) + force_authenticate(request, user=self.user) + + response = self.view( + request, + org_uuid=str(self.org.uuid) + ) self.assertEqual(response.status_code, 200) def test_retrieve(self): url_retrieve = f'{self.url}/{self.intelligence.uuid}/' + request = self.factory.get(url_retrieve) + force_authenticate(request, user=self.user) + response = IntelligencesViewset.as_view({'get': 'retrieve'})( request, org_uuid=str(self.org.uuid), - intelligence_uuid=str(self.intelligence.uuid) + intelligence_uuid=str(self.intelligence.uuid), ) self.assertEqual(response.status_code, 200) def test_create(self): data = { 'name': 'intelligence_name', - 'description': 'intelligence_description', - 'email': self.user.email + 'description': 'intelligence_description' } request = self.factory.post(self.url, data) + force_authenticate(request, user=self.user) + response = self.view(request, org_uuid=str(self.org.uuid)) self.assertEqual(response.status_code, 201) def test_update(self): + + url_put = f'{self.url}/{self.intelligence.uuid}/' data = { 'name': 'intelligence_name', 'description': 'intelligence_description', 'intelligence_uuid': str(self.intelligence.uuid), } - url_put = f'{self.url}/{self.intelligence.uuid}/' request = self.factory.put( url_put, json.dumps(data), content_type='application/json' ) + force_authenticate(request, user=self.user) response = self.view(request) self.assertEqual(response.status_code, 200) self.assertEqual(response.data['name'], data['name']) def test_delete(self): + url_delete = f'{self.url}/{self.intelligence.uuid}/' data = { 'intelligence_uuid': str(self.intelligence.uuid), } - url_delete = f'{self.url}/{self.intelligence.uuid}/' + request = self.factory.delete( url_delete, json.dumps(data), content_type='application/json' ) + force_authenticate(request, user=self.user) + response = self.view(request) self.assertEqual(response.status_code, 204) @@ -102,23 +111,16 @@ def setUp(self): 'put': 'update', 'delete': 'destroy' }) - self.user = UserFactory() - self.org = OrgFactory( - created_by=self.user - ) - self.intelligence = IntelligenceFactory( - created_by=self.user, - org=self.org - ) - self.contentbase = ContentBaseFactory( - created_by=self.user, - intelligence=self.intelligence - ) + self.contentbase = ContentBaseFactory() + self.user = self.contentbase.created_by + self.intelligence = self.contentbase.intelligence + self.url = f'{self.intelligence.uuid}/content-bases' def test_get_queryset(self): request = self.factory.get(self.url) + force_authenticate(request, user=self.user) response = self.view( request, intelligence_uuid=str(self.intelligence.uuid) @@ -129,6 +131,7 @@ def test_retrieve(self): url_retrieve = f'{self.url}/{self.contentbase.uuid}/' request = self.factory.get(url_retrieve) + force_authenticate(request, user=self.user) response = ContentBaseViewset.as_view({'get': 'retrieve'})( request, intelligence_uuid=str(self.intelligence.uuid), @@ -138,10 +141,10 @@ def test_retrieve(self): def test_create(self): data = { - 'title': 'title', - 'email': self.user.email + 'title': 'title' } request = self.factory.post(self.url, data) + force_authenticate(request, user=self.user) response = self.view( request, intelligence_uuid=str(self.intelligence.uuid) @@ -160,6 +163,7 @@ def test_update(self): json.dumps(data), content_type='application/json' ) + force_authenticate(request, user=self.user) response = self.view(request) self.assertEqual(response.status_code, 200) self.assertEqual(response.data['title'], data['title']) @@ -174,6 +178,7 @@ def test_delete(self): json.dumps(data), content_type='application/json' ) + force_authenticate(request, user=self.user) response = self.view(request) self.assertEqual(response.status_code, 204) @@ -188,27 +193,16 @@ def setUp(self): 'put': 'update', 'delete': 'destroy' }) - self.user = UserFactory() - self.org = OrgFactory( - created_by=self.user - ) - self.intelligence = IntelligenceFactory( - created_by=self.user, - org=self.org - ) - self.content_base = ContentBaseFactory( - created_by=self.user, - intelligence=self.intelligence - ) - self.contentbasetext = ContentBaseTextFactory( - created_by=self.user, - content_base=self.content_base - ) + self.contentbasetext = ContentBaseTextFactory() + self.user = self.contentbasetext.created_by + self.content_base = self.contentbasetext.content_base + self.intelligence = self.content_base.intelligence self.url = f'{self.content_base.uuid}/content-bases-text' def test_get_queryset(self): request = self.factory.get(self.url) + force_authenticate(request, user=self.user) response = self.view( request, contentbase_uuid=str(self.content_base.uuid) @@ -219,6 +213,7 @@ def test_retrieve(self): url_retrieve = f'{self.url}/{self.contentbasetext.uuid}/' request = self.factory.get(url_retrieve) + force_authenticate(request, user=self.user) response = ContentBaseTextViewset.as_view({'get': 'retrieve'})( request, contentbase_uuid=str(self.content_base.uuid), @@ -229,10 +224,10 @@ def test_retrieve(self): def test_create(self): data = { 'text': 'text', - 'email': self.user.email, 'intelligence_uuid': str(self.intelligence.uuid), } request = self.factory.post(self.url, data) + force_authenticate(request, user=self.user) response = self.view( request, contentbase_uuid=str(self.content_base.uuid) @@ -250,6 +245,7 @@ def test_update(self): json.dumps(data), content_type='application/json' ) + force_authenticate(request, user=self.user) response = self.view(request) self.assertEqual(response.status_code, 200) self.assertEqual(response.data['text'], data['text'])