Change 'star/unstar project' to 'like/unlike project'

remotes/origin/logger
David Barragán Merino 2015-09-01 18:02:44 +02:00
parent 260e5339c2
commit b5fed8e65b
12 changed files with 84 additions and 52 deletions

View File

@ -45,15 +45,10 @@ USER_PERMISSIONS = [
('modify_wiki_page', _('Modify wiki page')),
('add_wiki_link', _('Add wiki link')),
('modify_wiki_link', _('Modify wiki link')),
('star_project', _('Star project')),
('vote_us', _('Vote user story')),
('vote_task', _('Vote task')),
('vote_issue', _('Vote issue')),
]
MEMBERS_PERMISSIONS = [
('view_project', _('View project')),
('star_project', _('Star project')),
# Milestone permissions
('view_milestones', _('View milestones')),
('add_milestone', _('Add milestone')),
@ -64,19 +59,16 @@ MEMBERS_PERMISSIONS = [
('add_us', _('Add user story')),
('modify_us', _('Modify user story')),
('delete_us', _('Delete user story')),
('vote_us', _('Vote user story')),
# Task permissions
('view_tasks', _('View tasks')),
('add_task', _('Add task')),
('modify_task', _('Modify task')),
('delete_task', _('Delete task')),
('vote_task', _('Vote task')),
# Issue permissions
('view_issues', _('View issues')),
('add_issue', _('Add issue')),
('modify_issue', _('Modify issue')),
('delete_issue', _('Delete issue')),
('vote_issue', _('Vote issue')),
# Wiki page permissions
('view_wiki_pages', _('View wiki pages')),
('add_wiki_page', _('Add wiki page')),

View File

@ -45,13 +45,13 @@ from . import models
from . import permissions
from . import services
from .votes.mixins.viewsets import StarredResourceMixin, VotersViewSetMixin
from .votes.mixins.viewsets import LikedResourceMixin, VotersViewSetMixin
######################################################
## Project
######################################################
class ProjectViewSet(StarredResourceMixin, HistoryResourceMixin, WatchedResourceMixin, ModelCrudViewSet):
class ProjectViewSet(LikedResourceMixin, HistoryResourceMixin, WatchedResourceMixin, ModelCrudViewSet):
queryset = models.Project.objects.all()
serializer_class = serializers.ProjectDetailSerializer
admin_serializer_class = serializers.ProjectDetailAdminSerializer

View File

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import djorm_pgarray.fields
class Migration(migrations.Migration):
dependencies = [
('projects', '0024_auto_20150810_1247'),
]
operations = [
migrations.AlterField(
model_name='project',
name='public_permissions',
field=djorm_pgarray.fields.TextArrayField(default=[], choices=[('view_project', 'View project'), ('view_milestones', 'View milestones'), ('add_milestone', 'Add milestone'), ('modify_milestone', 'Modify milestone'), ('delete_milestone', 'Delete milestone'), ('view_us', 'View user story'), ('add_us', 'Add user story'), ('modify_us', 'Modify user story'), ('delete_us', 'Delete user story'), ('view_tasks', 'View tasks'), ('add_task', 'Add task'), ('modify_task', 'Modify task'), ('delete_task', 'Delete task'), ('view_issues', 'View issues'), ('add_issue', 'Add issue'), ('modify_issue', 'Modify issue'), ('delete_issue', 'Delete issue'), ('view_wiki_pages', 'View wiki pages'), ('add_wiki_page', 'Add wiki page'), ('modify_wiki_page', 'Modify wiki page'), ('delete_wiki_page', 'Delete wiki page'), ('view_wiki_links', 'View wiki links'), ('add_wiki_link', 'Add wiki link'), ('modify_wiki_link', 'Modify wiki link'), ('delete_wiki_link', 'Delete wiki link')], dbtype='text', verbose_name='user permissions'),
preserve_default=True,
),
]

View File

@ -60,8 +60,8 @@ class ProjectPermission(TaigaResourcePermission):
regenerate_tasks_csv_uuid_perms = IsProjectOwner()
tags_perms = HasProjectPerm('view_project')
tags_colors_perms = HasProjectPerm('view_project')
star_perms = IsAuthenticated() & HasProjectPerm('view_project')
unstar_perms = IsAuthenticated() & HasProjectPerm('view_project')
like_perms = IsAuthenticated() & HasProjectPerm('view_project')
unlike_perms = IsAuthenticated() & HasProjectPerm('view_project')
watch_perms = IsAuthenticated() & HasProjectPerm('view_project')
unwatch_perms = IsAuthenticated() & HasProjectPerm('view_project')
create_template_perms = IsSuperUser()

View File

@ -43,7 +43,7 @@ from .custom_attributes.serializers import UserStoryCustomAttributeSerializer
from .custom_attributes.serializers import TaskCustomAttributeSerializer
from .custom_attributes.serializers import IssueCustomAttributeSerializer
from .notifications.mixins import WatchedResourceModelSerializer
from .votes.mixins.serializers import StarredResourceSerializerMixin
from .votes.mixins.serializers import LikedResourceSerializerMixin
######################################################
## Custom values for selectors
@ -308,7 +308,7 @@ class ProjectMemberSerializer(serializers.ModelSerializer):
## Projects
######################################################
class ProjectSerializer(WatchersValidator, StarredResourceSerializerMixin, WatchedResourceModelSerializer, serializers.ModelSerializer):
class ProjectSerializer(WatchersValidator, LikedResourceSerializerMixin, WatchedResourceModelSerializer, serializers.ModelSerializer):
tags = TagsField(default=[], required=False)
anon_permissions = PgArrayField(required=False)
public_permissions = PgArrayField(required=False)
@ -385,10 +385,10 @@ class ProjectDetailAdminSerializer(ProjectDetailSerializer):
######################################################
## Starred
## Liked
######################################################
class StarredSerializer(serializers.ModelSerializer):
class LikedSerializer(serializers.ModelSerializer):
class Meta:
model = models.Project
fields = ['id', 'name', 'slug']

View File

@ -27,9 +27,9 @@ class BaseVotedResourceSerializer(serializers.ModelSerializer):
return getattr(obj, "is_voted", False) or False
class StarredResourceSerializerMixin(BaseVotedResourceSerializer):
stars = serializers.SerializerMethodField("get_votes_counter")
is_starred = serializers.SerializerMethodField("get_is_voted")
class LikedResourceSerializerMixin(BaseVotedResourceSerializer):
likes = serializers.SerializerMethodField("get_votes_counter")
is_liked = serializers.SerializerMethodField("get_is_voted")
class VotedResourceSerializerMixin(BaseVotedResourceSerializer):

View File

@ -55,16 +55,16 @@ class BaseVotedResource:
return response.Ok()
class StarredResourceMixin(BaseVotedResource):
# Note: objects nedd 'star' and 'unstar' permissions.
class LikedResourceMixin(BaseVotedResource):
# Note: objects nedd 'like' and 'unlike' permissions.
@detail_route(methods=["POST"])
def star(self, request, pk=None):
return self._add_voter("star", request, pk)
def like(self, request, pk=None):
return self._add_voter("like", request, pk)
@detail_route(methods=["POST"])
def unstar(self, request, pk=None):
return self._remove_vote("unstar", request, pk)
def unlike(self, request, pk=None):
return self._remove_vote("unlike", request, pk)
class VotedResourceMixin(BaseVotedResource):

View File

@ -34,7 +34,6 @@ from taiga.base.filters import PermissionBasedFilterBackend
from taiga.base.api.utils import get_object_or_404
from taiga.base.filters import MembersFilterBackend
from taiga.projects.votes import services as votes_service
from taiga.projects.serializers import StarredSerializer
from easy_thumbnails.source_generators import pil_image

View File

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import djorm_pgarray.fields
class Migration(migrations.Migration):
dependencies = [
('users', '0012_auto_20150812_1142'),
]
operations = [
migrations.AlterField(
model_name='role',
name='permissions',
field=djorm_pgarray.fields.TextArrayField(default=[], choices=[('view_project', 'View project'), ('view_milestones', 'View milestones'), ('add_milestone', 'Add milestone'), ('modify_milestone', 'Modify milestone'), ('delete_milestone', 'Delete milestone'), ('view_us', 'View user story'), ('add_us', 'Add user story'), ('modify_us', 'Modify user story'), ('delete_us', 'Delete user story'), ('view_tasks', 'View tasks'), ('add_task', 'Add task'), ('modify_task', 'Modify task'), ('delete_task', 'Delete task'), ('view_issues', 'View issues'), ('add_issue', 'Add issue'), ('modify_issue', 'Modify issue'), ('delete_issue', 'Delete issue'), ('view_wiki_pages', 'View wiki pages'), ('add_wiki_page', 'Add wiki page'), ('modify_wiki_page', 'Modify wiki page'), ('delete_wiki_page', 'Delete wiki page'), ('view_wiki_links', 'View wiki links'), ('add_wiki_link', 'Add wiki link'), ('modify_wiki_link', 'Modify wiki link'), ('delete_wiki_link', 'Delete wiki link')], dbtype='text', verbose_name='permissions'),
preserve_default=True,
),
]

View File

@ -44,7 +44,6 @@ class UserPermission(TaigaResourcePermission):
change_avatar_perms = IsAuthenticated()
me_perms = IsAuthenticated()
remove_avatar_perms = IsAuthenticated()
starred_perms = AllowAny()
change_email_perms = AllowAny()
contacts_perms = AllowAny()
favourites_perms = AllowAny()

View File

@ -225,10 +225,10 @@ def test_project_action_issues_stats(client, data):
assert results == [404, 404, 200, 200]
def test_project_action_star(client, data):
public_url = reverse('projects-star', kwargs={"pk": data.public_project.pk})
private1_url = reverse('projects-star', kwargs={"pk": data.private_project1.pk})
private2_url = reverse('projects-star', kwargs={"pk": data.private_project2.pk})
def test_project_action_like(client, data):
public_url = reverse('projects-like', kwargs={"pk": data.public_project.pk})
private1_url = reverse('projects-like', kwargs={"pk": data.private_project1.pk})
private2_url = reverse('projects-like', kwargs={"pk": data.private_project2.pk})
users = [
None,
@ -244,10 +244,10 @@ def test_project_action_star(client, data):
assert results == [404, 404, 200, 200]
def test_project_action_unstar(client, data):
public_url = reverse('projects-unstar', kwargs={"pk": data.public_project.pk})
private1_url = reverse('projects-unstar', kwargs={"pk": data.private_project1.pk})
private2_url = reverse('projects-unstar', kwargs={"pk": data.private_project2.pk})
def test_project_action_unlike(client, data):
public_url = reverse('projects-unlike', kwargs={"pk": data.public_project.pk})
private1_url = reverse('projects-unlike', kwargs={"pk": data.private_project1.pk})
private2_url = reverse('projects-unlike', kwargs={"pk": data.private_project2.pk})
users = [
None,

View File

@ -23,11 +23,11 @@ from .. import factories as f
pytestmark = pytest.mark.django_db
def test_star_project(client):
def test_like_project(client):
user = f.UserFactory.create()
project = f.create_project(owner=user)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
url = reverse("projects-star", args=(project.id,))
url = reverse("projects-like", args=(project.id,))
client.login(user)
response = client.post(url)
@ -35,11 +35,11 @@ def test_star_project(client):
assert response.status_code == 200
def test_unstar_project(client):
def test_unlike_project(client):
user = f.UserFactory.create()
project = f.create_project(owner=user)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
url = reverse("projects-unstar", args=(project.id,))
url = reverse("projects-unlike", args=(project.id,))
client.login(user)
response = client.post(url)
@ -75,7 +75,7 @@ def test_get_project_fan(client):
assert response.data['id'] == vote.user.id
def test_get_project_stars(client):
def test_get_project_likes(client):
user = f.UserFactory.create()
project = f.create_project(owner=user)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
@ -87,37 +87,37 @@ def test_get_project_stars(client):
response = client.get(url)
assert response.status_code == 200
assert response.data['stars'] == 5
assert response.data['likes'] == 5
def test_get_project_is_starred(client):
def test_get_project_is_liked(client):
user = f.UserFactory.create()
project = f.create_project(owner=user)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.VotesFactory.create(content_object=project)
url_detail = reverse("projects-detail", args=(project.id,))
url_star = reverse("projects-star", args=(project.id,))
url_unstar = reverse("projects-unstar", args=(project.id,))
url_like = reverse("projects-like", args=(project.id,))
url_unlike = reverse("projects-unlike", args=(project.id,))
client.login(user)
response = client.get(url_detail)
assert response.status_code == 200
assert response.data['stars'] == 0
assert response.data['is_starred'] == False
assert response.data['likes'] == 0
assert response.data['is_liked'] == False
response = client.post(url_star)
response = client.post(url_like)
assert response.status_code == 200
response = client.get(url_detail)
assert response.status_code == 200
assert response.data['stars'] == 1
assert response.data['is_starred'] == True
assert response.data['likes'] == 1
assert response.data['is_liked'] == True
response = client.post(url_unstar)
response = client.post(url_unlike)
assert response.status_code == 200
response = client.get(url_detail)
assert response.status_code == 200
assert response.data['stars'] == 0
assert response.data['is_starred'] == False
assert response.data['likes'] == 0
assert response.data['is_liked'] == False