From 1dc19695b57df90f338ad06866b0712cb794c7bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Hermida?= Date: Tue, 22 May 2018 18:25:55 +0200 Subject: [PATCH] Improve assigned users filter to have old US's --- taiga/base/filters.py | 23 +++++++++++++++++++ taiga/users/validators.py | 1 + tests/factories.py | 2 ++ .../test_auth_resources.py | 1 + .../test_users_resources.py | 4 ++-- tests/integration/test_auth_api.py | 9 ++++++++ 6 files changed, 38 insertions(+), 2 deletions(-) diff --git a/taiga/base/filters.py b/taiga/base/filters.py index f89302a0..f8840111 100644 --- a/taiga/base/filters.py +++ b/taiga/base/filters.py @@ -423,6 +423,29 @@ class AssignedToFilter(BaseRelatedFieldsFilter): class AssignedUsersFilter(BaseRelatedFieldsFilter): filter_name = 'assigned_users' + def get_lookup_expression(self, field_name, value): + if None in value: + qs_in_kwargs = { + "{}__in".format(field_name): [v for v in value if + v is not None]} + qs_isnull_kwargs = {"{}__isnull".format(field_name): True} + return Q(**qs_in_kwargs) | Q(**qs_isnull_kwargs) + else: + return Q(**{"{}__in".format(field_name): value}) + + def _get_queryparams(self, params): + param_name = self.param_name or self.filter_name + raw_value = params.get(param_name, None) + + if raw_value: + value = self._prepare_filter_data(raw_value) + assigned_user_filter = self.get_lookup_expression(param_name, value) + assigned_to_filter = self.get_lookup_expression('assigned_to', value) + + return Q(assigned_user_filter | assigned_to_filter) + + return None + class StatusesFilter(BaseRelatedFieldsFilter): filter_name = 'status' diff --git a/taiga/users/validators.py b/taiga/users/validators.py index 8b649446..6f7ca07d 100644 --- a/taiga/users/validators.py +++ b/taiga/users/validators.py @@ -74,6 +74,7 @@ class UserAdminValidator(UserValidator): return attrs + class RecoveryValidator(validators.Validator): token = serializers.CharField(max_length=200) password = serializers.CharField(min_length=6) diff --git a/tests/factories.py b/tests/factories.py index 409a818e..138a150b 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -188,6 +188,8 @@ class UserFactory(Factory): username = factory.Sequence(lambda n: "user{}".format(n)) email = factory.LazyAttribute(lambda obj: '%s@email.com' % obj.username) password = factory.PostGeneration(lambda obj, *args, **kwargs: obj.set_password(obj.username)) + accepted_terms = True + read_new_terms = True class MembershipFactory(Factory): diff --git a/tests/integration/resources_permissions/test_auth_resources.py b/tests/integration/resources_permissions/test_auth_resources.py index 133bc5fa..9b03172d 100644 --- a/tests/integration/resources_permissions/test_auth_resources.py +++ b/tests/integration/resources_permissions/test_auth_resources.py @@ -61,6 +61,7 @@ def test_auth_action_register(client, settings): "password": "test", "full_name": "test", "email": "test@test.com", + "accepted_terms": True, }) result = client.post(url, register_data, content_type="application/json") diff --git a/tests/integration/resources_permissions/test_users_resources.py b/tests/integration/resources_permissions/test_users_resources.py index b02c163c..f45a99e5 100644 --- a/tests/integration/resources_permissions/test_users_resources.py +++ b/tests/integration/resources_permissions/test_users_resources.py @@ -22,7 +22,7 @@ from tempfile import NamedTemporaryFile from django.core.urlresolvers import reverse from taiga.base.utils import json -from taiga.users.serializers import UserSerializer +from taiga.users.serializers import UserAdminSerializer from tests import factories as f from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals @@ -102,7 +102,7 @@ def test_user_update(client, data): data.superuser, ] - user_data = UserSerializer(data.registered_user).data + user_data = UserAdminSerializer(data.registered_user).data user_data["full_name"] = "test" user_data = json.dumps(user_data) diff --git a/tests/integration/test_auth_api.py b/tests/integration/test_auth_api.py index 49b8c7f9..9f31f008 100644 --- a/tests/integration/test_auth_api.py +++ b/tests/integration/test_auth_api.py @@ -33,6 +33,7 @@ def register_form(): "password": "password", "full_name": "fname", "email": "user@email.com", + "accepted_terms": True, "type": "public"} @@ -87,6 +88,7 @@ def test_response_200_in_public_registration(client, settings): "full_name": "martin seamus mcfly", "email": "mmcfly@bttf.com", "password": "password", + "accepted_terms": True, } response = client.post(reverse("auth-register"), form) @@ -129,6 +131,7 @@ def test_auth_uppercase_ignore(client, settings): "password": "password", "full_name": "fname", "email": "User@email.com", + "accepted_terms": True, "type": "public"} response = client.post(reverse("auth-register"), register_form) @@ -153,6 +156,7 @@ def test_auth_uppercase_ignore(client, settings): "password": "password", "full_name": "fname", "email": "user@email.com", + "accepted_terms": True, "type": "public"} response = client.post(reverse("auth-register"), register_form) @@ -194,6 +198,7 @@ def test_login_fail_throttling(client, settings): "password": "valid_password", "full_name": "fullname", "email": "valid_username_login_fail@email.com", + "accepted_terms": True, "type": "public"} response = client.post(reverse("auth-register"), register_form) @@ -235,6 +240,7 @@ def test_register_success_throttling(client, settings): "password": "valid_password", "full_name": "fullname", "email": "", + "accepted_terms": True, "type": "public"} response = client.post(reverse("auth-register"), register_form) assert response.status_code == 400 @@ -243,6 +249,7 @@ def test_register_success_throttling(client, settings): "password": "valid_password", "full_name": "fullname", "email": "valid_username_register_success@email.com", + "accepted_terms": True, "type": "public"} response = client.post(reverse("auth-register"), register_form) assert response.status_code == 201 @@ -251,6 +258,7 @@ def test_register_success_throttling(client, settings): "password": "valid_password2", "full_name": "fullname", "email": "valid_username_register_success2@email.com", + "accepted_terms": True, "type": "public"} response = client.post(reverse("auth-register"), register_form) assert response.status_code == 429 @@ -259,6 +267,7 @@ def test_register_success_throttling(client, settings): "password": "valid_password2", "full_name": "fullname", "email": "", + "accepted_terms": True, "type": "public"} response = client.post(reverse("auth-register"), register_form) assert response.status_code == 429