From cb4b401bd9d64d9f32d6c2b0f99c9181e74b62ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Dudfield?= Date: Tue, 13 Feb 2018 22:37:35 +0100 Subject: [PATCH] Changes now listed in project view. Project test improvements. --- pygameweb/project/models.py | 4 ++++ pygameweb/project/views.py | 23 +++++++++---------- pygameweb/templates/project/view.html | 11 +++++++-- .../pygameweb/project/test_project_views.py | 10 ++++++-- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/pygameweb/project/models.py b/pygameweb/project/models.py index 6b79526..10da3b4 100644 --- a/pygameweb/project/models.py +++ b/pygameweb/project/models.py @@ -135,3 +135,7 @@ class Release(Base): @property def datetimeon_2882(self): return formatdate(self.datetimeon.timestamp()) + + @property + def description_html(self): + return sanitize_html(self.description) diff --git a/pygameweb/project/views.py b/pygameweb/project/views.py index 53902f9..ac39620 100644 --- a/pygameweb/project/views.py +++ b/pygameweb/project/views.py @@ -5,7 +5,7 @@ from flask import (Blueprint, render_template, abort, redirect, url_for, request, current_app, - make_response, flash) + make_response) from flask_sqlalchemy_session import current_session from werkzeug.utils import secure_filename from flask_security import current_user, login_required, roles_required @@ -210,6 +210,7 @@ def all_tags(): """ + @project_blueprint.route('/project//comment', methods=['GET', 'POST']) @login_required @@ -483,9 +484,11 @@ def recent_releases(): def atom(): """ of recent releases """ - resp = render_template('project/atom.xml', recent_releases=recent_releases()) + resp = render_template('project/atom.xml', + recent_releases=recent_releases()) response = make_response(resp) - response.headers['Content-Type'] = 'application/atom+xml; charset=utf-8; filename=news-ATOM' + content_type = 'application/atom+xml; charset=utf-8; filename=news-ATOM' + response.headers['Content-Type'] = content_type return response @@ -494,9 +497,12 @@ def rss(): """ of recent releases """ build_date = formatdate(datetime.datetime.now().timestamp()) - resp = render_template('project/rss.xml', recent_releases=recent_releases(), build_date=build_date) + resp = render_template('project/rss.xml', + recent_releases=recent_releases(), + build_date=build_date) response = make_response(resp) - response.headers['Content-Type'] = 'application/xml; charset=ISO-8859-1; filename=news-RSS2.0' + content_type = 'application/xml; charset=ISO-8859-1; filename=news-RSS2.0' + response.headers['Content-Type'] = content_type return response @@ -510,13 +516,6 @@ def legacy_feeds(): return '' - - - - - - - def add_project_blueprint(app): """ to the app. """ diff --git a/pygameweb/templates/project/view.html b/pygameweb/templates/project/view.html index cd5ceff..bebfbed 100644 --- a/pygameweb/templates/project/view.html +++ b/pygameweb/templates/project/view.html @@ -39,6 +39,15 @@

{{ project.title }}{% if release and release.version %} - {{ release.version +

Changes

+ {% if release %} +
+
+ {{ release.description_html|safe }} +
+
+ {% endif %} +
{% set thumb_img = project.image_thumb(400,400) %} @@ -53,8 +62,6 @@

{{ project.title }}{% if release and release.version %} - {{ release.version

-
-

Links

diff --git a/tests/functional/pygameweb/project/test_project_views.py b/tests/functional/pygameweb/project/test_project_views.py index 02cd0bc..586eb22 100644 --- a/tests/functional/pygameweb/project/test_project_views.py +++ b/tests/functional/pygameweb/project/test_project_views.py @@ -130,7 +130,7 @@ def a_project(session, title, version, user): ) release1 = Release(datetimeon=datetime.datetime(2017, 1, 5), - description='Description of some project 2.', + description='Description of some release 2.', srcuri='http://example.com/source.tar.gz', winuri='http://example.com/win.exe', macuri='http://example.com/mac.dmg', @@ -206,6 +206,7 @@ def test_project_index(project_client, session, user, project, project2): assert resp.status_code == 200 assert b'

Some project title 1' in resp.data assert b'

Some project title 2' not in resp.data + assert project.description.encode('utf8') in resp.data assert b'game' in resp.data assert b'arcade' in resp.data @@ -217,6 +218,7 @@ def test_project_index(project_client, session, user, project, project2): resp = project_client.get(url) assert resp.status_code == 200 assert b'A release title.' in resp.data + assert b'Some release.' in resp.data url = (f'/project-blabla+blasbla+-' f'{project.id}-{project.releases[0].id}.html') @@ -277,7 +279,8 @@ def test_project_new(project_client, session, user): image = (BytesIO(png), 'helloworld.png') data = dict(image=image, title='title', version='1.0.2', tags='tags', summary='summary', - description='description', uri='http://example.com/') + description='description of project', + uri='http://example.com/') with mock.patch('pygameweb.project.views.save_image') as save_image: resp = project_client.post('/members/projects/new', @@ -289,6 +292,8 @@ def test_project_new(project_client, session, user): .first()) assert (save_image.call_args[0][1] == f'frontend/www/shots/{project.id}.png') + resp = project_client.get(f'/project/{project.id}/') + assert project.description.encode('utf8') in resp.data assert resp.status_code == 200 assert project.title == 'title' @@ -350,6 +355,7 @@ def test_project_new(project_client, session, user): session.refresh(project) session.refresh(project.releases[0]) + assert data['description'] == project.releases[0].description assert project.releases[0].version == '2.0.0', 'edited a release version' assert len(project.releases) == 1