Merge lp:~elachuni/ubuntu-webcatalog/remove-portlet-if-empty into lp:ubuntu-webcatalog

Proposed by Anthony Lenton
Status: Merged
Approved by: Anthony Lenton
Approved revision: 116
Merged at revision: 114
Proposed branch: lp:~elachuni/ubuntu-webcatalog/remove-portlet-if-empty
Merge into: lp:ubuntu-webcatalog
Diff against target: 120 lines (+36/-5)
5 files modified
src/webcatalog/templates/webcatalog/application_detail.html (+1/-1)
src/webcatalog/templates/webcatalog/recommended_apps_widget.html (+2/-0)
src/webcatalog/tests/test_utilities.py (+8/-0)
src/webcatalog/tests/test_views.py (+19/-2)
src/webcatalog/utilities.py (+6/-2)
To merge this branch: bzr merge lp:~elachuni/ubuntu-webcatalog/remove-portlet-if-empty
Reviewer Review Type Date Requested Status
Natalia Bidart (community) Approve
Review via email: mp+102913@code.launchpad.net

Commit message

Another two minor fixes:
- Request the ajax version of the reviews from the app details page (not the full version).
- Only include a portlet header for recommended apps if there's at least one recommendation.

To post a comment you must log in.
115. By Anthony Lenton

Added missing newline at the end of a template.

116. By Anthony Lenton

Handled socket errors and other api issues.

Revision history for this message
Natalia Bidart (nataliabidart) wrote :

Branch looks good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/webcatalog/templates/webcatalog/application_detail.html'
2--- src/webcatalog/templates/webcatalog/application_detail.html 2012-04-19 23:25:16 +0000
3+++ src/webcatalog/templates/webcatalog/application_detail.html 2012-04-20 19:18:18 +0000
4@@ -11,7 +11,7 @@
5 YUI({combine: true, comboBase: '{% url wc-combo %}?', root: 'yui/3.4.0/build/'}).use('io-base', 'node-base', function (Y) {
6
7 // XXX michaeln 2011-09-16 bug=851660 Autoload further batches of results.
8- var reviews_uri = "{% url wc-package-reviews application.distroseries.code_name application.package_name %}";
9+ var reviews_uri = "{% url wc-package-reviews-ajax application.distroseries.code_name application.package_name %}";
10 Y.io(reviews_uri, {
11 on: {
12 complete: function(id, obj){
13
14=== modified file 'src/webcatalog/templates/webcatalog/recommended_apps_widget.html'
15--- src/webcatalog/templates/webcatalog/recommended_apps_widget.html 2012-04-19 23:05:19 +0000
16+++ src/webcatalog/templates/webcatalog/recommended_apps_widget.html 2012-04-20 19:18:18 +0000
17@@ -1,4 +1,5 @@
18 {% load webcatalog %}
19+{% if recommended_apps %}
20 <div class="portletheader">Other people also downloaded...</div>
21 <ul class="portletactions">
22 {% for app in recommended_apps %}
23@@ -16,3 +17,4 @@
24 </li>
25 {% endfor %}
26 </ul>
27+{% endif %}
28
29=== modified file 'src/webcatalog/tests/test_utilities.py'
30--- src/webcatalog/tests/test_utilities.py 2012-04-19 13:29:35 +0000
31+++ src/webcatalog/tests/test_utilities.py 2012-04-20 19:18:18 +0000
32@@ -38,6 +38,7 @@
33 from django.test import TestCase
34 from httplib2 import ServerNotFoundError
35 from mock import patch
36+from piston_mini_client.failhandlers import APIError
37
38
39 class CreatePNGFromFileTestCase(TestCaseWithFactory):
40@@ -176,6 +177,13 @@
41 self.assertEqual({'foo': 'bar'}, result)
42 self.assertEqual(0, self.mock_recommend_app.call_count)
43
44+ def test_get_recommends_for_package_socket_error(self):
45+ self.mock_recommend_app.side_effect = APIError('500', 'error')
46+
47+ result = WebServices().get_recommends_for_package('firefox')
48+
49+ self.assertEqual({'data': [], 'package': 'firefox'}, result)
50+
51
52 class ScreenshotGetterTestCase(TestCase):
53 @patch('webcatalog.utilities.urllib.urlopen')
54
55=== modified file 'src/webcatalog/tests/test_views.py'
56--- src/webcatalog/tests/test_views.py 2012-04-20 16:57:50 +0000
57+++ src/webcatalog/tests/test_views.py 2012-04-20 19:18:18 +0000
58@@ -143,6 +143,15 @@
59 app.package_name,
60 ])))
61
62+ def test_link_to_reviews_snippet(self):
63+ response, app = self.get_app_and_response()
64+
65+ self.assertContains(response, 'var reviews_uri = "{0}"'.format(
66+ reverse('wc-package-reviews-ajax', args=[
67+ app.distroseries.code_name,
68+ app.package_name,
69+ ])))
70+
71 def test_link_to_recommended_apps_not_present(self):
72 with patch_settings(NUM_RECOMMENDED_APPS=0):
73 response, app = self.get_app_and_response()
74@@ -1090,11 +1099,19 @@
75 app2 = self.factory.make_application(package_name='firefox')
76
77 response = self.client.get(
78- reverse('wc-package-recommends', args=['firefox']),
79- HTTP_X_REQUESTED_WITH='XMLHttpRequest')
80+ reverse('wc-package-recommends', args=['firefox']))
81
82 self.assertEqual(app2, response.context['application'])
83
84+ def test_no_recommendations_renders_no_portlet_header(self):
85+ self.factory.make_application(package_name='firefox')
86+ self.mock_get_recommends.return_value['data'] = []
87+
88+ response = self.client.get(
89+ reverse('wc-package-recommends', args=['firefox']))
90+
91+ self.assertEqual('', response.content.strip())
92+
93
94 class ComboViewTestCase(TestCase):
95 """Tests for ComboView."""
96
97=== modified file 'src/webcatalog/utilities.py'
98--- src/webcatalog/utilities.py 2012-04-19 13:29:35 +0000
99+++ src/webcatalog/utilities.py 2012-04-20 19:18:18 +0000
100@@ -42,6 +42,7 @@
101 BasicAuthorizer,
102 OAuthAuthorizer,
103 )
104+from piston_mini_client.failhandlers import APIError
105 from piston_mini_client.validators import ValidationException
106 from rnrclient import RatingsAndReviewsAPI
107 from sreclient import SoftwareCenterRecommenderAPI
108@@ -89,8 +90,11 @@
109 if cached_recommends is not None:
110 return cached_recommends
111
112- fresh_recommends = self.recommender_api.recommend_app(
113- pkgname=package_name)
114+ try:
115+ fresh_recommends = self.recommender_api.recommend_app(
116+ pkgname=package_name)
117+ except APIError:
118+ fresh_recommends = {'package': package_name, 'data': []}
119 cache.set(key, fresh_recommends)
120 return fresh_recommends
121

Subscribers

People subscribed via source and target branches