diff --git a/settings/common.py b/settings/common.py index c871c54c..568be60c 100644 --- a/settings/common.py +++ b/settings/common.py @@ -527,8 +527,8 @@ EXTRA_BLOCKING_CODES = [] MAX_PRIVATE_PROJECTS_PER_USER = None # None == no limit MAX_PUBLIC_PROJECTS_PER_USER = None # None == no limit -MAX_MEMBERS_PRIVATE_PROJECTS = None # None == no limit -MAX_MEMBERS_PUBLIC_PROJECTS = None # None == no limit +MAX_MEMBERSHIPS_PRIVATE_PROJECTS = None # None == no limit +MAX_MEMBERSHIPS_PUBLIC_PROJECTS = None # None == no limit from .sr import * diff --git a/taiga/users/admin.py b/taiga/users/admin.py index 76bc701d..9d4c9815 100644 --- a/taiga/users/admin.py +++ b/taiga/users/admin.py @@ -52,8 +52,8 @@ class UserAdmin(DjangoUserAdmin): (_("Extra info"), {"fields": ("color", "lang", "timezone", "token", "colorize_tags", "email_token", "new_email")}), (_("Permissions"), {"fields": ("is_active", "is_superuser")}), - (_("Restrictions"), {"fields": (("max_private_projects", "max_members_private_projects"), - ("max_public_projects", "max_members_public_projects"))}), + (_("Restrictions"), {"fields": (("max_private_projects", "max_memberships_private_projects"), + ("max_public_projects", "max_memberships_public_projects"))}), (_("Important dates"), {"fields": ("last_login", "date_joined")}), ) form = UserChangeForm diff --git a/taiga/users/migrations/0016_auto_20160204_1050.py b/taiga/users/migrations/0016_auto_20160204_1050.py index d148f56a..244fcd00 100644 --- a/taiga/users/migrations/0016_auto_20160204_1050.py +++ b/taiga/users/migrations/0016_auto_20160204_1050.py @@ -14,12 +14,12 @@ class Migration(migrations.Migration): operations = [ migrations.AddField( model_name='user', - name='max_members_private_projects', - field=models.IntegerField(default=settings.MAX_MEMBERS_PRIVATE_PROJECTS, blank=True, verbose_name='max number of memberships for each owned private project', null=True), + name='max_memberships_private_projects', + field=models.IntegerField(default=settings.MAX_MEMBERSHIPS_PRIVATE_PROJECTS, blank=True, verbose_name='max number of memberships for each owned private project', null=True), ), migrations.AddField( model_name='user', - name='max_members_public_projects', - field=models.IntegerField(default=settings.MAX_MEMBERS_PUBLIC_PROJECTS, blank=True, verbose_name='max number of memberships for each owned public project', null=True), + name='max_memberships_public_projects', + field=models.IntegerField(default=settings.MAX_MEMBERSHIPS_PUBLIC_PROJECTS, blank=True, verbose_name='max number of memberships for each owned public project', null=True), ), ] diff --git a/taiga/users/models.py b/taiga/users/models.py index b4d960c2..054167cc 100644 --- a/taiga/users/models.py +++ b/taiga/users/models.py @@ -130,14 +130,14 @@ class User(AbstractBaseUser, PermissionsMixin): max_public_projects = models.IntegerField(null=True, blank=True, default=settings.MAX_PUBLIC_PROJECTS_PER_USER, verbose_name=_("max number of public projects owned")) - max_members_private_projects = models.IntegerField(null=True, blank=True, - default=settings.MAX_MEMBERS_PRIVATE_PROJECTS, - verbose_name=_("max number of memberships for " - "each owned private project")) - max_members_public_projects = models.IntegerField(null=True, blank=True, - default=settings.MAX_MEMBERS_PUBLIC_PROJECTS, - verbose_name=_("max number of memberships for " - "each owned public project")) + max_memberships_private_projects = models.IntegerField(null=True, blank=True, + default=settings.MAX_MEMBERSHIPS_PRIVATE_PROJECTS, + verbose_name=_("max number of memberships for " + "each owned private project")) + max_memberships_public_projects = models.IntegerField(null=True, blank=True, + default=settings.MAX_MEMBERSHIPS_PUBLIC_PROJECTS, + verbose_name=_("max number of memberships for " + "each owned public project")) _cached_memberships = None _cached_liked_ids = None diff --git a/taiga/users/serializers.py b/taiga/users/serializers.py index de95324c..d36ba768 100644 --- a/taiga/users/serializers.py +++ b/taiga/users/serializers.py @@ -115,13 +115,13 @@ class UserAdminSerializer(UserSerializer): "color", "bio", "lang", "theme", "timezone", "is_active", "photo", "big_photo", "max_private_projects", "max_public_projects", - "max_members_private_projects", "max_members_public_projects", + "max_memberships_private_projects", "max_memberships_public_projects", "total_private_projects", "total_public_projects") read_only_fields = ("id", "email", "max_private_projects", "max_public_projects", - "max_members_private_projects", - "max_members_public_projects") + "max_memberships_private_projects", + "max_memberships_public_projects") def get_total_private_projects(self, user): return user.owned_projects.filter(is_private=True).count() diff --git a/taiga/users/services.py b/taiga/users/services.py index 64cd5087..e13355ad 100644 --- a/taiga/users/services.py +++ b/taiga/users/services.py @@ -601,14 +601,14 @@ def _has_available_slot_for_project_members(user, project, members): current_memberships = project.memberships.count() if project.is_private: - if user.max_members_private_projects is None: + if user.max_memberships_private_projects is None: return (True, None) - elif current_memberships + members <= user.max_members_private_projects: + elif current_memberships + members <= user.max_memberships_private_projects: return (True, None) return (False, _("You have reached the limit of memberships for private projects")) else: - if user.max_members_public_projects is None: + if user.max_memberships_public_projects is None: return (True, None) - elif current_memberships + members <= user.max_members_public_projects: + elif current_memberships + members <= user.max_memberships_public_projects: return (True, None) return (False, _("You have reached the limit of memberships for public projects")) diff --git a/tests/integration/test_importer_api.py b/tests/integration/test_importer_api.py index 90fa70dd..9d4e8d0b 100644 --- a/tests/integration/test_importer_api.py +++ b/tests/integration/test_importer_api.py @@ -1031,7 +1031,7 @@ def test_dict_to_project_with_no_projects_slots_available(client): def test_dict_to_project_with_no_members_private_project_slots_available(client): - user = f.UserFactory.create(max_members_private_projects=2) + user = f.UserFactory.create(max_memberships_private_projects=2) data = { "slug": "valid-project", @@ -1066,7 +1066,7 @@ def test_dict_to_project_with_no_members_private_project_slots_available(client) def test_dict_to_project_with_no_members_public_project_slots_available(client): - user = f.UserFactory.create(max_members_public_projects=2) + user = f.UserFactory.create(max_memberships_public_projects=2) data = { "slug": "valid-project", @@ -1281,7 +1281,7 @@ def test_valid_dump_import_without_enough_private_projects_slots(client): def test_valid_dump_import_without_enough_membership_private_project_slots_one_project(client): - user = f.UserFactory.create(max_members_private_projects=5) + user = f.UserFactory.create(max_memberships_private_projects=5) client.login(user) url = reverse("importer-load-dump") @@ -1328,7 +1328,7 @@ def test_valid_dump_import_without_enough_membership_private_project_slots_one_p def test_valid_dump_import_without_enough_membership_public_project_slots_one_project(client): - user = f.UserFactory.create(max_members_public_projects=5) + user = f.UserFactory.create(max_memberships_public_projects=5) client.login(user) url = reverse("importer-load-dump") @@ -1377,7 +1377,7 @@ def test_valid_dump_import_without_enough_membership_public_project_slots_one_pr def test_valid_dump_import_with_enough_membership_private_project_slots_multiple_projects(client, settings): settings.CELERY_ENABLED = False - user = f.UserFactory.create(max_members_private_projects=10) + user = f.UserFactory.create(max_memberships_private_projects=10) project = f.ProjectFactory.create(owner=user) f.MembershipFactory.create(project=project) f.MembershipFactory.create(project=project) @@ -1433,7 +1433,7 @@ def test_valid_dump_import_with_enough_membership_private_project_slots_multiple def test_valid_dump_import_with_enough_membership_public_project_slots_multiple_projects(client, settings): settings.CELERY_ENABLED = False - user = f.UserFactory.create(max_members_public_projects=10) + user = f.UserFactory.create(max_memberships_public_projects=10) project = f.ProjectFactory.create(owner=user) f.MembershipFactory.create(project=project) f.MembershipFactory.create(project=project) diff --git a/tests/integration/test_memberships.py b/tests/integration/test_memberships.py index 6919cb4b..a408f838 100644 --- a/tests/integration/test_memberships.py +++ b/tests/integration/test_memberships.py @@ -54,7 +54,7 @@ def test_api_create_bulk_members(client): def test_api_create_bulk_members_without_enough_memberships_private_project_slots_one_project(client): - user = f.UserFactory.create(max_members_private_projects=3) + user = f.UserFactory.create(max_memberships_private_projects=3) project = f.ProjectFactory(owner=user, is_private=True) role = f.RoleFactory(project=project, name="Test") f.MembershipFactory(project=project, user=user, is_admin=True) @@ -78,7 +78,7 @@ def test_api_create_bulk_members_without_enough_memberships_private_project_slot def test_api_create_bulk_members_with_enough_memberships_private_project_slots_multiple_projects(client): - user = f.UserFactory.create(max_members_private_projects=6) + user = f.UserFactory.create(max_memberships_private_projects=6) project = f.ProjectFactory(owner=user, is_private=True) role = f.RoleFactory(project=project, name="Test") f.MembershipFactory(project=project, user=user, is_admin=True) @@ -107,7 +107,7 @@ def test_api_create_bulk_members_with_enough_memberships_private_project_slots_m def test_api_create_bulk_members_without_enough_memberships_public_project_slots_one_project(client): - user = f.UserFactory.create(max_members_public_projects=3) + user = f.UserFactory.create(max_memberships_public_projects=3) project = f.ProjectFactory(owner=user, is_private=False) role = f.RoleFactory(project=project, name="Test") f.MembershipFactory(project=project, user=user, is_admin=True) @@ -131,7 +131,7 @@ def test_api_create_bulk_members_without_enough_memberships_public_project_slots def test_api_create_bulk_members_with_enough_memberships_public_project_slots_multiple_projects(client): - user = f.UserFactory.create(max_members_public_projects=6) + user = f.UserFactory.create(max_memberships_public_projects=6) project = f.ProjectFactory(owner=user, is_private=False) role = f.RoleFactory(project=project, name="Test") f.MembershipFactory(project=project, user=user, is_admin=True) @@ -269,7 +269,7 @@ def test_api_create_membership(client): def test_api_create_membership_without_enough_memberships_private_project_slots_one_projects(client): - user = f.UserFactory.create(max_members_private_projects=1) + user = f.UserFactory.create(max_memberships_private_projects=1) project = f.ProjectFactory(owner=user, is_private=True) role = f.RoleFactory(project=project, name="Test") f.MembershipFactory(project=project, user=user, is_admin=True) @@ -284,7 +284,7 @@ def test_api_create_membership_without_enough_memberships_private_project_slots_ def test_api_create_membership_with_enough_memberships_private_project_slots_multiple_projects(client): - user = f.UserFactory.create(max_members_private_projects=5) + user = f.UserFactory.create(max_memberships_private_projects=5) project = f.ProjectFactory(owner=user, is_private=True) role = f.RoleFactory(project=project, name="Test") f.MembershipFactory(project=project, user=user, is_admin=True) @@ -304,7 +304,7 @@ def test_api_create_membership_with_enough_memberships_private_project_slots_mul def test_api_create_membership_without_enough_memberships_public_project_slots_one_projects(client): - user = f.UserFactory.create(max_members_public_projects=1) + user = f.UserFactory.create(max_memberships_public_projects=1) project = f.ProjectFactory(owner=user, is_private=False) role = f.RoleFactory(project=project, name="Test") f.MembershipFactory(project=project, user=user, is_admin=True) @@ -319,7 +319,7 @@ def test_api_create_membership_without_enough_memberships_public_project_slots_o def test_api_create_membership_with_enough_memberships_public_project_slots_multiple_projects(client): - user = f.UserFactory.create(max_members_public_projects=5) + user = f.UserFactory.create(max_memberships_public_projects=5) project = f.ProjectFactory(owner=user, is_private=False) role = f.RoleFactory(project=project, name="Test") f.MembershipFactory(project=project, user=user, is_admin=True) diff --git a/tests/integration/test_projects.py b/tests/integration/test_projects.py index 0065a2a0..e8db7810 100644 --- a/tests/integration/test_projects.py +++ b/tests/integration/test_projects.py @@ -1161,7 +1161,7 @@ def test_project_transfer_accept_from_admin_member_with_valid_token_without_enou def test_project_transfer_accept_from_admin_member_with_valid_token_without_enough_memberships_public_project_slots(client): user_from = f.UserFactory.create() - user_to = f.UserFactory.create(max_members_public_projects=5) + user_to = f.UserFactory.create(max_memberships_public_projects=5) signer = signing.TimestampSigner() token = signer.sign(user_to.id) @@ -1195,7 +1195,7 @@ def test_project_transfer_accept_from_admin_member_with_valid_token_without_enou def test_project_transfer_accept_from_admin_member_with_valid_token_without_enough_memberships_private_project_slots(client): user_from = f.UserFactory.create() - user_to = f.UserFactory.create(max_members_private_projects=5) + user_to = f.UserFactory.create(max_memberships_private_projects=5) signer = signing.TimestampSigner() token = signer.sign(user_to.id)