From 0039098e63ba071bca826f63841d8d7c66f3d471 Mon Sep 17 00:00:00 2001 From: lc_hd Date: Wed, 11 Sep 2024 15:35:41 -0400 Subject: [PATCH 1/9] feat: created testcase for test_user_created_project_in_community --- tests/unit/test_custom_acct_tags.py | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 tests/unit/test_custom_acct_tags.py diff --git a/tests/unit/test_custom_acct_tags.py b/tests/unit/test_custom_acct_tags.py new file mode 100644 index 000000000..103633da7 --- /dev/null +++ b/tests/unit/test_custom_acct_tags.py @@ -0,0 +1,34 @@ +from django.test import TransactionTestCase +from factories.accounts_factories import UserFactory +from factories.communities_factories import CommunityFactory +from factories.projects_factories import ProjectCreatorFactory +from factories.projects_factories import ProjectFactory + +from accounts.templatetags.custom_acct_tags import user_created_project_in_community + + +class TestCustomAccountTags(TransactionTestCase): + def test_user_created_project_in_community(self): + # create user and communities + user = UserFactory() + community_with_project = CommunityFactory() + community_without_project = CommunityFactory() + + # create project for the community_with_project + project = ProjectFactory( + project_creator=user + ) + ProjectCreatorFactory( + community=community_with_project, + project=project + ) + + assert user_created_project_in_community( + user_id=user.id, + community_id=community_with_project.id + ) is True + + assert user_created_project_in_community( + user_id=user.id, + community_id=community_without_project.id + ) is False From b4b5221c54d1086736e5e483bbb19441ceffc944 Mon Sep 17 00:00:00 2001 From: lc_hd Date: Wed, 11 Sep 2024 15:50:46 -0400 Subject: [PATCH 2/9] feat: created testcase for test_user_created_project_in_institution --- tests/unit/test_custom_acct_tags.py | 31 ++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/tests/unit/test_custom_acct_tags.py b/tests/unit/test_custom_acct_tags.py index 103633da7..fd7bc0948 100644 --- a/tests/unit/test_custom_acct_tags.py +++ b/tests/unit/test_custom_acct_tags.py @@ -1,10 +1,14 @@ from django.test import TransactionTestCase from factories.accounts_factories import UserFactory from factories.communities_factories import CommunityFactory +from factories.institutions_factories import InstitutionFactory from factories.projects_factories import ProjectCreatorFactory from factories.projects_factories import ProjectFactory -from accounts.templatetags.custom_acct_tags import user_created_project_in_community +from accounts.templatetags.custom_acct_tags import ( + user_created_project_in_community, + user_created_project_in_institution +) class TestCustomAccountTags(TransactionTestCase): @@ -32,3 +36,28 @@ def test_user_created_project_in_community(self): user_id=user.id, community_id=community_without_project.id ) is False + + def test_user_created_project_in_institution(self): + # create user and institutions + user = UserFactory() + institution_with_project = InstitutionFactory() + institution_without_project = InstitutionFactory() + + # create project for the institution_with_project + project = ProjectFactory( + project_creator=user + ) + ProjectCreatorFactory( + institution=institution_with_project, + project=project + ) + + assert user_created_project_in_institution( + user_id=user.id, + institution_id=institution_with_project.id + ) is True + + assert user_created_project_in_institution( + user_id=user.id, + institution_id=institution_without_project.id + ) is False From 33a5808b09cf8588751b6730a97f61a1b6830654 Mon Sep 17 00:00:00 2001 From: lc_hd Date: Wed, 11 Sep 2024 16:05:12 -0400 Subject: [PATCH 3/9] feat: created testcase for test_user_created_project_as_researcher --- tests/unit/test_custom_acct_tags.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/tests/unit/test_custom_acct_tags.py b/tests/unit/test_custom_acct_tags.py index fd7bc0948..a00a276bb 100644 --- a/tests/unit/test_custom_acct_tags.py +++ b/tests/unit/test_custom_acct_tags.py @@ -2,12 +2,13 @@ from factories.accounts_factories import UserFactory from factories.communities_factories import CommunityFactory from factories.institutions_factories import InstitutionFactory +from factories.researchers_factories import ResearcherFactory from factories.projects_factories import ProjectCreatorFactory from factories.projects_factories import ProjectFactory from accounts.templatetags.custom_acct_tags import ( user_created_project_in_community, - user_created_project_in_institution + user_created_project_in_institution, user_created_project_as_researcher ) @@ -61,3 +62,28 @@ def test_user_created_project_in_institution(self): user_id=user.id, institution_id=institution_without_project.id ) is False + + def test_researcher_created_project(self): + # create user and researcher + user = UserFactory() + researcher_with_project = ResearcherFactory() + researcher_without_project = ResearcherFactory() + + # create project for the researcher_with_project + project = ProjectFactory( + project_creator=user + ) + ProjectCreatorFactory( + researcher=researcher_with_project, + project=project + ) + + assert user_created_project_as_researcher( + user_id=user.id, + researcher_id=researcher_with_project.id + ) is True + + assert user_created_project_as_researcher( + user_id=user.id, + researcher_id=researcher_without_project.id + ) is False From 29bbc67d58342f99af158f5701112827ec66ff09 Mon Sep 17 00:00:00 2001 From: lc_hd Date: Wed, 11 Sep 2024 16:16:29 -0400 Subject: [PATCH 4/9] feat: changed test name --- ..._acct_tags.py => test_deactivation_related_helpers.py} | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) rename tests/unit/{test_custom_acct_tags.py => test_deactivation_related_helpers.py} (93%) diff --git a/tests/unit/test_custom_acct_tags.py b/tests/unit/test_deactivation_related_helpers.py similarity index 93% rename from tests/unit/test_custom_acct_tags.py rename to tests/unit/test_deactivation_related_helpers.py index a00a276bb..c4147d262 100644 --- a/tests/unit/test_custom_acct_tags.py +++ b/tests/unit/test_deactivation_related_helpers.py @@ -8,11 +8,12 @@ from accounts.templatetags.custom_acct_tags import ( user_created_project_in_community, - user_created_project_in_institution, user_created_project_as_researcher + user_created_project_in_institution, + user_created_project_as_researcher ) -class TestCustomAccountTags(TransactionTestCase): +class TestDeactivationRelatedHelpers(TransactionTestCase): def test_user_created_project_in_community(self): # create user and communities user = UserFactory() @@ -87,3 +88,6 @@ def test_researcher_created_project(self): user_id=user.id, researcher_id=researcher_without_project.id ) is False + + def test_remove_user_from_account(self): + pass From 6c9c9967234fe15af1f1398770c900c379ca4897 Mon Sep 17 00:00:00 2001 From: lc_hd Date: Thu, 12 Sep 2024 13:56:08 -0400 Subject: [PATCH 5/9] feat: created testcase for remove_user_from_account --- .../unit/test_deactivation_related_helpers.py | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/tests/unit/test_deactivation_related_helpers.py b/tests/unit/test_deactivation_related_helpers.py index c4147d262..f5b03f301 100644 --- a/tests/unit/test_deactivation_related_helpers.py +++ b/tests/unit/test_deactivation_related_helpers.py @@ -6,11 +6,13 @@ from factories.projects_factories import ProjectCreatorFactory from factories.projects_factories import ProjectFactory +from accounts.models import UserAffiliation from accounts.templatetags.custom_acct_tags import ( user_created_project_in_community, user_created_project_in_institution, user_created_project_as_researcher ) +from accounts.utils import remove_user_from_account class TestDeactivationRelatedHelpers(TransactionTestCase): @@ -89,5 +91,26 @@ def test_researcher_created_project(self): researcher_id=researcher_without_project.id ) is False - def test_remove_user_from_account(self): - pass + def test_remove_admin_user_from_community(self): + admin_user = UserFactory() + community = CommunityFactory() + community.admins.add(admin_user) + affiliation = UserAffiliation.objects.prefetch_related( + 'communities' + ).get(user=admin_user) + affiliation.communities.add(community) + + # verify admin_user is an admin + assert community.admins.contains(admin_user) is True + # verify community is in affiliation.communities + assert affiliation.communities.contains(community) is True + + remove_user_from_account( + user=admin_user, + account=community + ) + + # verify admin_user is no longer an admin + assert community.admins.contains(admin_user) is False + # verify community is no longer in affiliation.communities + assert affiliation.communities.contains(community) is False From 754df8ea79221f6e54febaefcd0a4607eb8c7717 Mon Sep 17 00:00:00 2001 From: lc_hd Date: Thu, 12 Sep 2024 14:02:56 -0400 Subject: [PATCH 6/9] feat: created testcase for remove_user_from_account --- .../unit/test_deactivation_related_helpers.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/unit/test_deactivation_related_helpers.py b/tests/unit/test_deactivation_related_helpers.py index f5b03f301..86df40c24 100644 --- a/tests/unit/test_deactivation_related_helpers.py +++ b/tests/unit/test_deactivation_related_helpers.py @@ -114,3 +114,27 @@ def test_remove_admin_user_from_community(self): assert community.admins.contains(admin_user) is False # verify community is no longer in affiliation.communities assert affiliation.communities.contains(community) is False + + def test_remove_editor_user_from_community(self): + editor_user = UserFactory() + community = CommunityFactory() + community.editors.add(editor_user) + affiliation = UserAffiliation.objects.prefetch_related( + 'communities' + ).get(user=editor_user) + affiliation.communities.add(community) + + # verify editor_user is an editor + assert community.editors.contains(editor_user) is True + # verify community is in affiliation.communities + assert affiliation.communities.contains(community) is True + + remove_user_from_account( + user=editor_user, + account=community + ) + + # verify editor_user is no longer an editor + assert community.editors.contains(editor_user) is False + # verify community is no longer in affiliation.communities + assert affiliation.communities.contains(community) is False From b42c948a1ef9961cbf1a680db02e5a0dbbea8fd5 Mon Sep 17 00:00:00 2001 From: lc_hd Date: Thu, 12 Sep 2024 14:10:27 -0400 Subject: [PATCH 7/9] feat: created testcase for remove_user_from_account --- .../unit/test_deactivation_related_helpers.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/unit/test_deactivation_related_helpers.py b/tests/unit/test_deactivation_related_helpers.py index 86df40c24..927417063 100644 --- a/tests/unit/test_deactivation_related_helpers.py +++ b/tests/unit/test_deactivation_related_helpers.py @@ -138,3 +138,27 @@ def test_remove_editor_user_from_community(self): assert community.editors.contains(editor_user) is False # verify community is no longer in affiliation.communities assert affiliation.communities.contains(community) is False + + def test_remove_viewer_user_from_community(self): + viewer_user = UserFactory() + community = CommunityFactory() + community.viewers.add(viewer_user) + affiliation = UserAffiliation.objects.prefetch_related( + 'communities' + ).get(user=viewer_user) + affiliation.communities.add(community) + + # verify viewer_user is a viewer + assert community.viewers.contains(viewer_user) is True + # verify community is in affiliation.communities + assert affiliation.communities.contains(community) is True + + remove_user_from_account( + user=viewer_user, + account=community + ) + + # verify viewer_user is no longer a viewer + assert community.viewers.contains(viewer_user) is False + # verify community is no longer in affiliation.communities + assert affiliation.communities.contains(community) is False From 96365dde47ab3796aa20ae8bc8e95699e770ac64 Mon Sep 17 00:00:00 2001 From: lc_hd Date: Thu, 12 Sep 2024 14:28:54 -0400 Subject: [PATCH 8/9] feat: created testcase for remove_user_from_account --- .../unit/test_deactivation_related_helpers.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/unit/test_deactivation_related_helpers.py b/tests/unit/test_deactivation_related_helpers.py index 927417063..d298a9964 100644 --- a/tests/unit/test_deactivation_related_helpers.py +++ b/tests/unit/test_deactivation_related_helpers.py @@ -162,3 +162,40 @@ def test_remove_viewer_user_from_community(self): assert community.viewers.contains(viewer_user) is False # verify community is no longer in affiliation.communities assert affiliation.communities.contains(community) is False + + def test_remove_user_from_all_accounts(self): + community = CommunityFactory() + institution = InstitutionFactory() + + user = UserFactory() + + community.admins.add(user) + community.editors.add(user) + community.viewers.add(user) + + institution.admins.add(user) + institution.editors.add(user) + institution.viewers.add(user) + + affiliation = UserAffiliation.objects.prefetch_related( + 'communities', 'institutions' + ).get(user=user) + + affiliation.communities.add(community) + affiliation.institutions.add(institution) + + # verify state before + assert community.admins.contains(user) is True + assert community.editors.contains(user) is True + assert community.viewers.contains(user) is True + assert affiliation.communities.contains(community) is True + assert affiliation.institutions.contains(institution) is True + + remove_user_from_account(user=user) + + # verify state after + assert community.admins.contains(user) is False + assert community.editors.contains(user) is False + assert community.viewers.contains(user) is False + assert affiliation.communities.contains(community) is False + assert affiliation.institutions.contains(institution) is False From 5f884b2cd2cd1a48d584ff179ef867621cd9ee1f Mon Sep 17 00:00:00 2001 From: Ashley Rojas Date: Thu, 19 Sep 2024 11:19:12 -0400 Subject: [PATCH 9/9] add doi and guid as search params and fields in API v1 --- api/base/serializers.py | 4 ++-- api/base/views.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/base/serializers.py b/api/base/serializers.py index 7139e9b2e..ea07479e6 100644 --- a/api/base/serializers.py +++ b/api/base/serializers.py @@ -102,7 +102,7 @@ class ProjectSerializer(serializers.ModelSerializer): class Meta: model = Project - fields = ('unique_id', 'providers_id', 'source_project_uuid', 'project_page', 'title', 'project_privacy', 'date_added', 'date_modified', 'created_by', 'notice', 'sub_projects', 'related_projects', 'project_boundary_geojson') + fields = ('unique_id', 'providers_id', 'publication_doi', 'project_data_guid', 'source_project_uuid', 'project_page', 'title', 'project_privacy', 'date_added', 'date_modified', 'created_by', 'notice', 'sub_projects', 'related_projects', 'project_boundary_geojson') def get_related_projects(self, obj): return [project.unique_id for project in obj.related_projects.all()] @@ -120,7 +120,7 @@ class ProjectNoNoticeSerializer(serializers.ModelSerializer): class Meta: model = Project - fields = ('unique_id', 'providers_id', 'source_project_uuid', 'project_page', 'title', 'project_privacy', 'date_added', 'date_modified', 'created_by', 'bc_labels', 'tk_labels', 'sub_projects', 'related_projects', 'project_boundary_geojson') + fields = ('unique_id', 'providers_id', 'publication_doi', 'project_data_guid', 'source_project_uuid', 'project_page', 'title', 'project_privacy', 'date_added', 'date_modified', 'created_by', 'bc_labels', 'tk_labels', 'sub_projects', 'related_projects', 'project_boundary_geojson') def get_related_projects(self, obj): return [project.unique_id for project in obj.related_projects.all()] diff --git a/api/base/views.py b/api/base/views.py index ac54d2995..e8014ed59 100644 --- a/api/base/views.py +++ b/api/base/views.py @@ -47,7 +47,7 @@ class ProjectList(generics.ListAPIView): serializer_class = ProjectOverviewSerializer filter_backends = [filters.SearchFilter] - search_fields = ['^providers_id', '=unique_id', 'title'] + search_fields = ['^providers_id', '=unique_id', 'title', 'publication_doi', 'project_data_guid'] # '^' starts-with search # '=' exact matches