Adding logo_small_url to user likes and watches APIs

remotes/origin/logger
Alejandro Alonso 2016-01-08 09:57:59 +01:00 committed by David Barragán Merino
parent c280898642
commit 3d3e8f2d49
4 changed files with 23 additions and 4 deletions

View File

@ -15,12 +15,14 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.conf import settings
from django.core import validators from django.core import validators
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from taiga.base.api import serializers from taiga.base.api import serializers
from taiga.base.fields import PgArrayField, TagsField from taiga.base.fields import PgArrayField, TagsField
from taiga.base.utils.thumbnails import get_thumbnail_url
from taiga.projects.models import Project from taiga.projects.models import Project
from .models import User, Role from .models import User, Role
@ -174,6 +176,7 @@ class HighLightedContentSerializer(serializers.Serializer):
tags_colors = serializers.SerializerMethodField("get_tags_color") tags_colors = serializers.SerializerMethodField("get_tags_color")
created_date = serializers.DateTimeField() created_date = serializers.DateTimeField()
is_private = serializers.SerializerMethodField("get_is_private") is_private = serializers.SerializerMethodField("get_is_private")
logo_small_url = serializers.SerializerMethodField("get_logo_small_url")
project = serializers.SerializerMethodField("get_project") project = serializers.SerializerMethodField("get_project")
project_name = serializers.SerializerMethodField("get_project_name") project_name = serializers.SerializerMethodField("get_project_name")
@ -226,6 +229,12 @@ class HighLightedContentSerializer(serializers.Serializer):
def get_project_is_private(self, obj): def get_project_is_private(self, obj):
return self._none_if_project(obj, "project_is_private") return self._none_if_project(obj, "project_is_private")
def get_logo_small_url(self, obj):
logo = self._none_if_not_project(obj, "logo")
if logo:
return get_thumbnail_url(logo, settings.THN_LOGO_SMALL)
return None
def get_photo(self, obj): def get_photo(self, obj):
type = obj.get("type", "") type = obj.get("type", "")
if type == "project": if type == "project":

View File

@ -322,7 +322,7 @@ def get_watched_list(for_user, from_user, type=None, q=None):
-- BEGIN Basic info: we need to mix info from different tables and denormalize it -- BEGIN Basic info: we need to mix info from different tables and denormalize it
SELECT entities.*, SELECT entities.*,
projects_project.name as project_name, projects_project.description as description, projects_project.slug as project_slug, projects_project.is_private as project_is_private, projects_project.name as project_name, projects_project.description as description, projects_project.slug as project_slug, projects_project.is_private as project_is_private,
projects_project.tags_colors, projects_project.tags_colors, projects_project.logo,
users_user.username assigned_to_username, users_user.full_name assigned_to_full_name, users_user.photo assigned_to_photo, users_user.email assigned_to_email users_user.username assigned_to_username, users_user.full_name assigned_to_full_name, users_user.photo assigned_to_photo, users_user.email assigned_to_email
FROM ( FROM (
{userstories_sql} {userstories_sql}
@ -417,7 +417,7 @@ def get_liked_list(for_user, from_user, type=None, q=None):
-- BEGIN Basic info: we need to mix info from different tables and denormalize it -- BEGIN Basic info: we need to mix info from different tables and denormalize it
SELECT entities.*, SELECT entities.*,
projects_project.name as project_name, projects_project.description as description, projects_project.slug as project_slug, projects_project.is_private as project_is_private, projects_project.name as project_name, projects_project.description as description, projects_project.slug as project_slug, projects_project.is_private as project_is_private,
projects_project.tags_colors, projects_project.tags_colors, projects_project.logo,
users_user.username assigned_to_username, users_user.full_name assigned_to_full_name, users_user.photo assigned_to_photo, users_user.email assigned_to_email users_user.username assigned_to_username, users_user.full_name assigned_to_full_name, users_user.photo assigned_to_photo, users_user.email assigned_to_email
FROM ( FROM (
{projects_sql} {projects_sql}
@ -500,7 +500,7 @@ def get_voted_list(for_user, from_user, type=None, q=None):
-- BEGIN Basic info: we need to mix info from different tables and denormalize it -- BEGIN Basic info: we need to mix info from different tables and denormalize it
SELECT entities.*, SELECT entities.*,
projects_project.name as project_name, projects_project.description as description, projects_project.slug as project_slug, projects_project.is_private as project_is_private, projects_project.name as project_name, projects_project.description as description, projects_project.slug as project_slug, projects_project.is_private as project_is_private,
projects_project.tags_colors, projects_project.tags_colors, projects_project.logo,
users_user.username assigned_to_username, users_user.full_name assigned_to_full_name, users_user.photo assigned_to_photo, users_user.email assigned_to_email users_user.username assigned_to_username, users_user.full_name assigned_to_full_name, users_user.photo assigned_to_photo, users_user.email assigned_to_email
FROM ( FROM (
{userstories_sql} {userstories_sql}

View File

@ -22,6 +22,8 @@ from datetime import date, timedelta
from django.conf import settings from django.conf import settings
from .utils import DUMMY_BMP_DATA
import factory import factory
@ -69,6 +71,8 @@ class ProjectFactory(Factory):
name = factory.Sequence(lambda n: "Project {}".format(n)) name = factory.Sequence(lambda n: "Project {}".format(n))
slug = factory.Sequence(lambda n: "project-{}-slug".format(n)) slug = factory.Sequence(lambda n: "project-{}-slug".format(n))
logo = factory.django.FileField(data=DUMMY_BMP_DATA)
description = "Project description" description = "Project description"
owner = factory.SubFactory("tests.factories.UserFactory") owner = factory.SubFactory("tests.factories.UserFactory")
creation_template = factory.SubFactory("tests.factories.ProjectTemplateFactory") creation_template = factory.SubFactory("tests.factories.ProjectTemplateFactory")

View File

@ -1,6 +1,7 @@
import pytest import pytest
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
from django.conf import settings
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.core.files import File from django.core.files import File
@ -9,6 +10,7 @@ from .. import factories as f
from ..utils import DUMMY_BMP_DATA from ..utils import DUMMY_BMP_DATA
from taiga.base.utils import json from taiga.base.utils import json
from taiga.base.utils.thumbnails import get_thumbnail_url
from taiga.users import models from taiga.users import models
from taiga.users.serializers import LikedObjectSerializer, VotedObjectSerializer from taiga.users.serializers import LikedObjectSerializer, VotedObjectSerializer
from taiga.auth.tokens import get_token_for_user from taiga.auth.tokens import get_token_for_user
@ -432,6 +434,7 @@ def test_get_watched_list_valid_info_for_project():
assert "tag" in tags_colors assert "tag" in tags_colors
assert project_watch_info["is_private"] == project.is_private assert project_watch_info["is_private"] == project.is_private
assert project_watch_info["logo_small_url"] == get_thumbnail_url(project.logo, settings.THN_LOGO_SMALL)
assert project_watch_info["is_fan"] == False assert project_watch_info["is_fan"] == False
assert project_watch_info["is_watcher"] == False assert project_watch_info["is_watcher"] == False
assert project_watch_info["total_watchers"] == 1 assert project_watch_info["total_watchers"] == 1
@ -469,7 +472,7 @@ def test_get_liked_list_valid_info():
content_type = ContentType.objects.get_for_model(project) content_type = ContentType.objects.get_for_model(project)
like = f.LikeFactory(content_type=content_type, object_id=project.id, user=fan_user) like = f.LikeFactory(content_type=content_type, object_id=project.id, user=fan_user)
project.refresh_totals() project.refresh_totals()
raw_project_like_info = get_liked_list(fan_user, viewer_user)[0] raw_project_like_info = get_liked_list(fan_user, viewer_user)[0]
project_like_info = LikedObjectSerializer(raw_project_like_info).data project_like_info = LikedObjectSerializer(raw_project_like_info).data
@ -489,6 +492,7 @@ def test_get_liked_list_valid_info():
assert "tag" in tags_colors assert "tag" in tags_colors
assert project_like_info["is_private"] == project.is_private assert project_like_info["is_private"] == project.is_private
assert project_like_info["logo_small_url"] == get_thumbnail_url(project.logo, settings.THN_LOGO_SMALL)
assert project_like_info["is_fan"] == False assert project_like_info["is_fan"] == False
assert project_like_info["is_watcher"] == False assert project_like_info["is_watcher"] == False
@ -542,6 +546,7 @@ def test_get_watched_list_valid_info_for_not_project_types():
assert "test2" in tags_colors assert "test2" in tags_colors
assert instance_watch_info["is_private"] == None assert instance_watch_info["is_private"] == None
assert instance_watch_info["logo_small_url"] == None
assert instance_watch_info["is_voter"] == False assert instance_watch_info["is_voter"] == False
assert instance_watch_info["is_watcher"] == False assert instance_watch_info["is_watcher"] == False
assert instance_watch_info["total_watchers"] == 1 assert instance_watch_info["total_watchers"] == 1
@ -597,6 +602,7 @@ def test_get_voted_list_valid_info():
assert "test2" in tags_colors assert "test2" in tags_colors
assert instance_vote_info["is_private"] == None assert instance_vote_info["is_private"] == None
assert instance_vote_info["logo_small_url"] == None
assert instance_vote_info["is_voter"] == False assert instance_vote_info["is_voter"] == False
assert instance_vote_info["is_watcher"] == False assert instance_vote_info["is_watcher"] == False
assert instance_vote_info["total_watchers"] == 0 assert instance_vote_info["total_watchers"] == 0