Merge lp:~elachuni/ubuntu-webcatalog/screenshots-and-reviews into lp:ubuntu-webcatalog

Proposed by Anthony Lenton
Status: Merged
Approved by: Łukasz Czyżykowski
Approved revision: 108
Merged at revision: 107
Proposed branch: lp:~elachuni/ubuntu-webcatalog/screenshots-and-reviews
Merge into: lp:ubuntu-webcatalog
Diff against target: 93 lines (+30/-6)
3 files modified
src/webcatalog/tests/test_views.py (+22/-2)
src/webcatalog/utilities.py (+6/-3)
src/webcatalog/views.py (+2/-1)
To merge this branch: bzr merge lp:~elachuni/ubuntu-webcatalog/screenshots-and-reviews
Reviewer Review Type Date Requested Status
Canonical Consumer Applications Hackers Pending
Review via email: mp+102616@code.launchpad.net

Commit message

Fix screenshots and reviews.

Description of the change

A fix for two issues uncovered during testing:

- The review page crashes for packages with colons in their names. Afaik this is an issue only for multiarch packages (that's why they picked that separator). See for example http://catalog.razorgirl.info/cat/applications/oneiric/skype:i386/reviews/
http://catalog.razorgirl.info/cat/applications/skype:i386/ is even funnier.

- The screenshots page fails when there's more than one app for a given package name (this includes the same app on two different distroseries). See for example https://catalog.razorgirl.info/cat/applications/screenshots/hedgewars/

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/webcatalog/tests/test_views.py'
--- src/webcatalog/tests/test_views.py 2012-04-18 22:29:29 +0000
+++ src/webcatalog/tests/test_views.py 2012-04-19 03:12:18 +0000
@@ -897,7 +897,8 @@
897 self.mock_get_reviews.return_value = [eg_review]897 self.mock_get_reviews.return_value = [eg_review]
898898
899 def tearDown(self):899 def tearDown(self):
900 self.get_reviews_patcher.stop()900 if hasattr(self, 'get_reviews_patcher'):
901 self.get_reviews_patcher.stop()
901 super(ApplicationReviewsTestCase, self).tearDown()902 super(ApplicationReviewsTestCase, self).tearDown()
902903
903 def test_only_valid_apps(self):904 def test_only_valid_apps(self):
@@ -968,11 +969,21 @@
968 self.assertContains(response, 'review_summary1')969 self.assertContains(response, 'review_summary1')
969 self.assertContains(response, 'review_summary2')970 self.assertContains(response, 'review_summary2')
970971
972 def test_doesnt_break_for_invalid_package_name(self):
973 self.get_reviews_patcher.stop()
974 del self.get_reviews_patcher
975 app = self.factory.make_application(package_name='invalid:name')
976
977 response = self.client.get(reverse('wc-package-reviews',
978 args=[app.distroseries.code_name, app.package_name]))
979
980 self.assertEqual(200, response.status_code)
981
971982
972class ApplicationScreenshotsTestCase(TestCaseWithFactory):983class ApplicationScreenshotsTestCase(TestCaseWithFactory):
973 def setUp(self):984 def setUp(self):
974 super(ApplicationScreenshotsTestCase, self).setUp()985 super(ApplicationScreenshotsTestCase, self).setUp()
975 self.app = self.factory.make_application()986 self.app = self.factory.make_application(is_latest=True)
976 self.expected = ['http://example.com/foo', 'http://example.com/bar']987 self.expected = ['http://example.com/foo', 'http://example.com/bar']
977988
978 def test_only_valid_apps(self):989 def test_only_valid_apps(self):
@@ -1032,6 +1043,15 @@
10321043
1033 self.assertEqual('max-age=600', response['cache-control'])1044 self.assertEqual('max-age=600', response['cache-control'])
10341045
1046 @patch('webcatalog.utilities.urllib.urlopen')
1047 def test_doesnt_break_with_multiple_apps(self, mock_urlopen):
1048 self.factory.make_application(package_name=self.app.package_name)
1049
1050 response = self.client.get(reverse('wc-package-screenshots',
1051 args=[self.app.package_name]))
1052
1053 self.assertEqual(200, response.status_code)
1054
10351055
1036class ComboViewTestCase(TestCase):1056class ComboViewTestCase(TestCase):
1037 """Tests for ComboView."""1057 """Tests for ComboView."""
10381058
=== modified file 'src/webcatalog/utilities.py'
--- src/webcatalog/utilities.py 2012-04-18 22:29:29 +0000
+++ src/webcatalog/utilities.py 2012-04-19 03:12:18 +0000
@@ -42,7 +42,7 @@
42 BasicAuthorizer,42 BasicAuthorizer,
43 OAuthAuthorizer,43 OAuthAuthorizer,
44 )44 )
4545from piston_mini_client.validators import ValidationException
46from rnrclient import RatingsAndReviewsAPI46from rnrclient import RatingsAndReviewsAPI
47from ssoclient import SingleSignOnAPI47from ssoclient import SingleSignOnAPI
4848
@@ -74,8 +74,11 @@
74 if cached_reviews is not None:74 if cached_reviews is not None:
75 return cached_reviews75 return cached_reviews
7676
77 fresh_reviews = self.rnr_api.get_reviews(packagename=package_name,77 try:
78 distroseries=distroseries, page=page)78 fresh_reviews = self.rnr_api.get_reviews(packagename=package_name,
79 distroseries=distroseries, page=page)
80 except ValidationException:
81 fresh_reviews = []
79 cache.set(key, fresh_reviews, settings.REVIEWS_CACHE_TIMEOUT)82 cache.set(key, fresh_reviews, settings.REVIEWS_CACHE_TIMEOUT)
80 return fresh_reviews83 return fresh_reviews
8184
8285
=== modified file 'src/webcatalog/views.py'
--- src/webcatalog/views.py 2012-04-18 22:29:29 +0000
+++ src/webcatalog/views.py 2012-04-19 03:12:18 +0000
@@ -211,7 +211,8 @@
211211
212212
213def application_screenshots(request, package_name):213def application_screenshots(request, package_name):
214 app = get_object_or_404(Application, package_name=package_name)214 app = get_object_or_404(Application, package_name=package_name,
215 is_latest=True)
215 screenshots = WebServices().get_screenshots_for_package(package_name)216 screenshots = WebServices().get_screenshots_for_package(package_name)
216 if request.is_ajax():217 if request.is_ajax():
217 return HttpResponse(json.dumps(screenshots),218 return HttpResponse(json.dumps(screenshots),

Subscribers

People subscribed via source and target branches