Merge lp:~zematynnad/ubuntu-webcatalog/banners_965560 into lp:ubuntu-webcatalog
- banners_965560
- Merge into trunk
Proposed by
Danny Tamez
Status: | Merged |
---|---|
Approved by: | Danny Tamez |
Approved revision: | 104 |
Merged at revision: | 101 |
Proposed branch: | lp:~zematynnad/ubuntu-webcatalog/banners_965560 |
Merge into: | lp:ubuntu-webcatalog |
Diff against target: |
291 lines (+186/-6) 7 files modified
src/webcatalog/management/commands/import_exhibits.py (+2/-0) src/webcatalog/migrations/0020_weight_to_exhibit.py (+164/-0) src/webcatalog/models/applications.py (+1/-0) src/webcatalog/tests/factory.py (+2/-2) src/webcatalog/tests/test_commands.py (+3/-1) src/webcatalog/tests/test_views.py (+13/-0) src/webcatalog/views.py (+1/-3) |
To merge this branch: | bzr merge lp:~zematynnad/ubuntu-webcatalog/banners_965560 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Michael Nelson (community) | Approve | ||
Review via email: mp+101977@code.launchpad.net |
Commit message
Adds ordering of the exhibits in the exhibits banner
Description of the change
Overview
========
This branch fixes the ordering of the banners displayed in the exhibits widget.
Details
========
The weight field which is used for ordering the exhibits in sca is now being brought over in the import_exhibits command. The exhibits are now ordered by that field and their order is no longer randomized in the view.
To Test
=======
$fab bootstrap test
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
1 | === modified file 'src/webcatalog/management/commands/import_exhibits.py' | |||
2 | --- src/webcatalog/management/commands/import_exhibits.py 2012-03-01 21:38:31 +0000 | |||
3 | +++ src/webcatalog/management/commands/import_exhibits.py 2012-04-13 21:23:18 +0000 | |||
4 | @@ -56,6 +56,8 @@ | |||
5 | 56 | for field in ['package_names', 'html', 'banner_url']: | 56 | for field in ['package_names', 'html', 'banner_url']: |
6 | 57 | args[field] = exhibit.get(field, '') | 57 | args[field] = exhibit.get(field, '') |
7 | 58 | 58 | ||
8 | 59 | args['weight'] = exhibit.get('weight', 0) | ||
9 | 60 | |||
10 | 59 | # Munge banner_url into html | 61 | # Munge banner_url into html |
11 | 60 | banner_url = args['banner_url'] | 62 | banner_url = args['banner_url'] |
12 | 61 | if banner_url: | 63 | if banner_url: |
13 | 62 | 64 | ||
14 | === added file 'src/webcatalog/migrations/0020_weight_to_exhibit.py' | |||
15 | --- src/webcatalog/migrations/0020_weight_to_exhibit.py 1970-01-01 00:00:00 +0000 | |||
16 | +++ src/webcatalog/migrations/0020_weight_to_exhibit.py 2012-04-13 21:23:18 +0000 | |||
17 | @@ -0,0 +1,164 @@ | |||
18 | 1 | # -*- coding: utf-8 -*- | ||
19 | 2 | import datetime | ||
20 | 3 | from south.db import db | ||
21 | 4 | from south.v2 import SchemaMigration | ||
22 | 5 | from django.db import models | ||
23 | 6 | |||
24 | 7 | |||
25 | 8 | class Migration(SchemaMigration): | ||
26 | 9 | |||
27 | 10 | def forwards(self, orm): | ||
28 | 11 | # Adding field 'Exhibit.weight' | ||
29 | 12 | db.add_column('webcatalog_exhibit', 'weight', | ||
30 | 13 | self.gf('django.db.models.fields.IntegerField')(default=0), | ||
31 | 14 | keep_default=False) | ||
32 | 15 | |||
33 | 16 | def backwards(self, orm): | ||
34 | 17 | # Deleting field 'Exhibit.weight' | ||
35 | 18 | db.delete_column('webcatalog_exhibit', 'weight') | ||
36 | 19 | |||
37 | 20 | models = { | ||
38 | 21 | 'auth.group': { | ||
39 | 22 | 'Meta': {'object_name': 'Group'}, | ||
40 | 23 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
41 | 24 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), | ||
42 | 25 | 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) | ||
43 | 26 | }, | ||
44 | 27 | 'auth.permission': { | ||
45 | 28 | 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, | ||
46 | 29 | 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
47 | 30 | 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), | ||
48 | 31 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
49 | 32 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) | ||
50 | 33 | }, | ||
51 | 34 | 'auth.user': { | ||
52 | 35 | 'Meta': {'object_name': 'User'}, | ||
53 | 36 | 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
54 | 37 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), | ||
55 | 38 | 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
56 | 39 | 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), | ||
57 | 40 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
58 | 41 | 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), | ||
59 | 42 | 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
60 | 43 | 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
61 | 44 | 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
62 | 45 | 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
63 | 46 | 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), | ||
64 | 47 | 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), | ||
65 | 48 | 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) | ||
66 | 49 | }, | ||
67 | 50 | 'contenttypes.contenttype': { | ||
68 | 51 | 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, | ||
69 | 52 | 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
70 | 53 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
71 | 54 | 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
72 | 55 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) | ||
73 | 56 | }, | ||
74 | 57 | 'webcatalog.application': { | ||
75 | 58 | 'Meta': {'unique_together': "(('distroseries', 'archive_id'),)", 'object_name': 'Application'}, | ||
76 | 59 | 'app_type': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}), | ||
77 | 60 | 'architectures': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), | ||
78 | 61 | 'archive_id': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'null': 'True', 'blank': 'True'}), | ||
79 | 62 | 'categories': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), | ||
80 | 63 | 'channel': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), | ||
81 | 64 | 'comment': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), | ||
82 | 65 | 'debtags': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), | ||
83 | 66 | 'departments': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['webcatalog.Department']", 'symmetrical': 'False', 'blank': 'True'}), | ||
84 | 67 | 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), | ||
85 | 68 | 'distroseries': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['webcatalog.DistroSeries']"}), | ||
86 | 69 | 'for_purchase': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
87 | 70 | 'icon': ('django.db.models.fields.files.ImageField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
88 | 71 | 'icon_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), | ||
89 | 72 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
90 | 73 | 'is_latest': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
91 | 74 | 'keywords': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), | ||
92 | 75 | 'mimetype': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}), | ||
93 | 76 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
94 | 77 | 'package_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
95 | 78 | 'popcon': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), | ||
96 | 79 | 'price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '7', 'decimal_places': '2', 'blank': 'True'}), | ||
97 | 80 | 'ratings_average': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '3', 'decimal_places': '2', 'blank': 'True'}), | ||
98 | 81 | 'ratings_histogram': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}), | ||
99 | 82 | 'ratings_total': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), | ||
100 | 83 | 'section': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}), | ||
101 | 84 | 'version': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), | ||
102 | 85 | 'wilson_score': ('django.db.models.fields.FloatField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}) | ||
103 | 86 | }, | ||
104 | 87 | 'webcatalog.applicationmedia': { | ||
105 | 88 | 'Meta': {'unique_together': "(('application', 'url'),)", 'object_name': 'ApplicationMedia'}, | ||
106 | 89 | 'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['webcatalog.Application']"}), | ||
107 | 90 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
108 | 91 | 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}), | ||
109 | 92 | 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}) | ||
110 | 93 | }, | ||
111 | 94 | 'webcatalog.consumer': { | ||
112 | 95 | 'Meta': {'object_name': 'Consumer'}, | ||
113 | 96 | 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), | ||
114 | 97 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
115 | 98 | 'key': ('django.db.models.fields.CharField', [], {'max_length': '64'}), | ||
116 | 99 | 'secret': ('django.db.models.fields.CharField', [], {'default': "'nDcywpUpPYwdIckXOsrVjMBKQwMuSk'", 'max_length': '255', 'blank': 'True'}), | ||
117 | 100 | 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), | ||
118 | 101 | 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'oauth_consumer'", 'unique': 'True', 'to': "orm['auth.User']"}) | ||
119 | 102 | }, | ||
120 | 103 | 'webcatalog.department': { | ||
121 | 104 | 'Meta': {'object_name': 'Department'}, | ||
122 | 105 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
123 | 106 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), | ||
124 | 107 | 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['webcatalog.Department']", 'null': 'True', 'blank': 'True'}), | ||
125 | 108 | 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}) | ||
126 | 109 | }, | ||
127 | 110 | 'webcatalog.distroseries': { | ||
128 | 111 | 'Meta': {'object_name': 'DistroSeries'}, | ||
129 | 112 | 'code_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20', 'db_index': 'True'}), | ||
130 | 113 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
131 | 114 | 'version': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}) | ||
132 | 115 | }, | ||
133 | 116 | 'webcatalog.exhibit': { | ||
134 | 117 | 'Meta': {'object_name': 'Exhibit'}, | ||
135 | 118 | 'banner_url': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), | ||
136 | 119 | 'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), | ||
137 | 120 | 'display': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), | ||
138 | 121 | 'distroseries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['webcatalog.DistroSeries']", 'symmetrical': 'False'}), | ||
139 | 122 | 'html': ('django.db.models.fields.TextField', [], {}), | ||
140 | 123 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
141 | 124 | 'package_names': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), | ||
142 | 125 | 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
143 | 126 | 'sca_id': ('django.db.models.fields.IntegerField', [], {}), | ||
144 | 127 | 'weight': ('django.db.models.fields.IntegerField', [], {'default': '0'}) | ||
145 | 128 | }, | ||
146 | 129 | 'webcatalog.machine': { | ||
147 | 130 | 'Meta': {'unique_together': "(('owner', 'uuid'),)", 'object_name': 'Machine'}, | ||
148 | 131 | 'hostname': ('django.db.models.fields.CharField', [], {'max_length': '64'}), | ||
149 | 132 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
150 | 133 | 'logo_checksum': ('django.db.models.fields.CharField', [], {'max_length': '56', 'blank': 'True'}), | ||
151 | 134 | 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), | ||
152 | 135 | 'package_list': ('django.db.models.fields.TextField', [], {}), | ||
153 | 136 | 'packages_checksum': ('django.db.models.fields.CharField', [], {'max_length': '56'}), | ||
154 | 137 | 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}) | ||
155 | 138 | }, | ||
156 | 139 | 'webcatalog.nonce': { | ||
157 | 140 | 'Meta': {'object_name': 'Nonce'}, | ||
158 | 141 | 'consumer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['webcatalog.Consumer']"}), | ||
159 | 142 | 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), | ||
160 | 143 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
161 | 144 | 'nonce': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), | ||
162 | 145 | 'token': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['webcatalog.Token']"}) | ||
163 | 146 | }, | ||
164 | 147 | 'webcatalog.reviewstatsimport': { | ||
165 | 148 | 'Meta': {'object_name': 'ReviewStatsImport'}, | ||
166 | 149 | 'distroseries': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['webcatalog.DistroSeries']", 'unique': 'True'}), | ||
167 | 150 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
168 | 151 | 'last_import': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) | ||
169 | 152 | }, | ||
170 | 153 | 'webcatalog.token': { | ||
171 | 154 | 'Meta': {'object_name': 'Token'}, | ||
172 | 155 | 'consumer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['webcatalog.Consumer']"}), | ||
173 | 156 | 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), | ||
174 | 157 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), | ||
175 | 158 | 'token': ('django.db.models.fields.CharField', [], {'default': "'uKqOdpKariCfWFVhuVQbAYOknPhTELPfpvfZVNdKeapBClaiiU'", 'max_length': '50', 'primary_key': 'True'}), | ||
176 | 159 | 'token_secret': ('django.db.models.fields.CharField', [], {'default': "'QkGeNWgqkohZyvBVCcMGtHDiNoSmSoxUxjlblBvjJbEZTmyAof'", 'max_length': '50'}), | ||
177 | 160 | 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) | ||
178 | 161 | } | ||
179 | 162 | } | ||
180 | 163 | |||
181 | 164 | complete_apps = ['webcatalog'] | ||
182 | 0 | \ No newline at end of file | 165 | \ No newline at end of file |
183 | 1 | 166 | ||
184 | === modified file 'src/webcatalog/models/applications.py' | |||
185 | --- src/webcatalog/models/applications.py 2012-04-05 01:09:37 +0000 | |||
186 | +++ src/webcatalog/models/applications.py 2012-04-13 21:23:18 +0000 | |||
187 | @@ -255,6 +255,7 @@ | |||
188 | 255 | display = models.NullBooleanField( | 255 | display = models.NullBooleanField( |
189 | 256 | help_text="Yes: Always display. No: Never display. " | 256 | help_text="Yes: Always display. No: Never display. " |
190 | 257 | "Unknown: Display if published") | 257 | "Unknown: Display if published") |
191 | 258 | weight = models.IntegerField(default=0) | ||
192 | 258 | 259 | ||
193 | 259 | class Meta: | 260 | class Meta: |
194 | 260 | app_label = 'webcatalog' | 261 | app_label = 'webcatalog' |
195 | 261 | 262 | ||
196 | === modified file 'src/webcatalog/tests/factory.py' | |||
197 | --- src/webcatalog/tests/factory.py 2012-03-23 22:41:16 +0000 | |||
198 | +++ src/webcatalog/tests/factory.py 2012-04-13 21:23:18 +0000 | |||
199 | @@ -130,7 +130,7 @@ | |||
200 | 130 | return Department.objects.create(name=name, parent=parent, slug=slug) | 130 | return Department.objects.create(name=name, parent=parent, slug=slug) |
201 | 131 | 131 | ||
202 | 132 | def make_exhibit(self, package_names=None, published=True, display=None, | 132 | def make_exhibit(self, package_names=None, published=True, display=None, |
204 | 133 | distroseries=None): | 133 | distroseries=None, weight=0): |
205 | 134 | sca_id = self.get_unique_integer() | 134 | sca_id = self.get_unique_integer() |
206 | 135 | if package_names is None: | 135 | if package_names is None: |
207 | 136 | package_names = self.get_unique_string(prefix='package-') | 136 | package_names = self.get_unique_string(prefix='package-') |
208 | @@ -140,7 +140,7 @@ | |||
209 | 140 | distroseries = self.make_distroseries() | 140 | distroseries = self.make_distroseries() |
210 | 141 | xibit = Exhibit.objects.create(sca_id=sca_id, | 141 | xibit = Exhibit.objects.create(sca_id=sca_id, |
211 | 142 | package_names=package_names, banner_url=banner_url, html=html, | 142 | package_names=package_names, banner_url=banner_url, html=html, |
213 | 143 | published=published, display=display) | 143 | published=published, display=display, weight=weight) |
214 | 144 | xibit.distroseries.add(distroseries) | 144 | xibit.distroseries.add(distroseries) |
215 | 145 | return xibit | 145 | return xibit |
216 | 146 | 146 | ||
217 | 147 | 147 | ||
218 | === modified file 'src/webcatalog/tests/test_commands.py' | |||
219 | --- src/webcatalog/tests/test_commands.py 2012-04-03 17:45:07 +0000 | |||
220 | +++ src/webcatalog/tests/test_commands.py 2012-04-13 21:23:18 +0000 | |||
221 | @@ -684,6 +684,7 @@ | |||
222 | 684 | 'code_name': ds.code_name, | 684 | 'code_name': ds.code_name, |
223 | 685 | 'html': exhibit.html, | 685 | 'html': exhibit.html, |
224 | 686 | 'date_created': str(exhibit.date_created), | 686 | 'date_created': str(exhibit.date_created), |
225 | 687 | 'weight': str(exhibit.weight), | ||
226 | 687 | 'id': exhibit.sca_id}) | 688 | 'id': exhibit.sca_id}) |
227 | 688 | if changes: | 689 | if changes: |
228 | 689 | for atts, change in zip(data, changes): | 690 | for atts, change in zip(data, changes): |
229 | @@ -713,7 +714,7 @@ | |||
230 | 713 | new_html = self.factory.get_unique_string(prefix='new-') | 714 | new_html = self.factory.get_unique_string(prefix='new-') |
231 | 714 | mock_urlopen.return_value = self.mock_response([xibit], changes=[ | 715 | mock_urlopen.return_value = self.mock_response([xibit], changes=[ |
232 | 715 | {'package_names': new_package_names, 'banner_url': new_banner_url, | 716 | {'package_names': new_package_names, 'banner_url': new_banner_url, |
234 | 716 | 'html': new_html}]) | 717 | 'html': new_html, 'weight': 3}]) |
235 | 717 | 718 | ||
236 | 718 | call_command('import_exhibits') | 719 | call_command('import_exhibits') |
237 | 719 | 720 | ||
238 | @@ -722,6 +723,7 @@ | |||
239 | 722 | self.assertEqual(new_package_names, retrieved.package_names) | 723 | self.assertEqual(new_package_names, retrieved.package_names) |
240 | 723 | self.assertEqual(new_banner_url, retrieved.banner_url) | 724 | self.assertEqual(new_banner_url, retrieved.banner_url) |
241 | 724 | self.assertEqual(new_html, retrieved.html) | 725 | self.assertEqual(new_html, retrieved.html) |
242 | 726 | self.assertEqual(3, retrieved.weight) | ||
243 | 725 | 727 | ||
244 | 726 | @patch('urllib.urlopen') | 728 | @patch('urllib.urlopen') |
245 | 727 | def test_creates_exhibit_if_scaid_does_not_match(self, mock_urlopen): | 729 | def test_creates_exhibit_if_scaid_does_not_match(self, mock_urlopen): |
246 | 728 | 730 | ||
247 | === modified file 'src/webcatalog/tests/test_views.py' | |||
248 | --- src/webcatalog/tests/test_views.py 2012-03-30 13:42:37 +0000 | |||
249 | +++ src/webcatalog/tests/test_views.py 2012-04-13 21:23:18 +0000 | |||
250 | @@ -569,6 +569,19 @@ | |||
251 | 569 | 569 | ||
252 | 570 | self.assertContains(response, '<li class="slide', count=1) | 570 | self.assertContains(response, '<li class="slide', count=1) |
253 | 571 | 571 | ||
254 | 572 | def test_exhibits_orders_banners_by_weight(self): | ||
255 | 573 | third = self.factory.make_exhibit(display=True, weight=3) | ||
256 | 574 | second = self.factory.make_exhibit(display=True, weight=2) | ||
257 | 575 | first = self.factory.make_exhibit(display=True, weight=1) | ||
258 | 576 | |||
259 | 577 | response = self.client.get(reverse('wc-index')) | ||
260 | 578 | |||
261 | 579 | first_pos = response.content.index(first.destination_url()) | ||
262 | 580 | second_pos = response.content.index(second.destination_url()) | ||
263 | 581 | third_pos = response.content.index(third.destination_url()) | ||
264 | 582 | |||
265 | 583 | self.assertTrue(third_pos > second_pos > first_pos) | ||
266 | 584 | |||
267 | 572 | def test_featured_apps(self): | 585 | def test_featured_apps(self): |
268 | 573 | app = self.factory.make_application(package_name='foobar') | 586 | app = self.factory.make_application(package_name='foobar') |
269 | 574 | 587 | ||
270 | 575 | 588 | ||
271 | === modified file 'src/webcatalog/views.py' | |||
272 | --- src/webcatalog/views.py 2012-04-05 01:09:37 +0000 | |||
273 | +++ src/webcatalog/views.py 2012-04-13 21:23:18 +0000 | |||
274 | @@ -25,7 +25,6 @@ | |||
275 | 25 | import json | 25 | import json |
276 | 26 | import operator | 26 | import operator |
277 | 27 | import os | 27 | import os |
278 | 28 | from random import shuffle | ||
279 | 29 | 28 | ||
280 | 30 | from convoy.combo import combine_files, parse_qs | 29 | from convoy.combo import combine_files, parse_qs |
281 | 31 | from django.conf import settings | 30 | from django.conf import settings |
282 | @@ -112,8 +111,7 @@ | |||
283 | 112 | depts = Department.objects.filter(parent=None).order_by('name') | 111 | depts = Department.objects.filter(parent=None).order_by('name') |
284 | 113 | depts = depts.order_by('name') | 112 | depts = depts.order_by('name') |
285 | 114 | exhibits = list(Exhibit.objects.filter(Q(display=True) | | 113 | exhibits = list(Exhibit.objects.filter(Q(display=True) | |
288 | 115 | Q(display=None, published=True,))) | 114 | Q(display=None, published=True,)).order_by('weight')) |
287 | 116 | shuffle(exhibits) | ||
289 | 117 | featured_apps = [Application.objects.find_best(package_name=app) | 115 | featured_apps = [Application.objects.find_best(package_name=app) |
290 | 118 | for app in settings.FEATURED_APPS] | 116 | for app in settings.FEATURED_APPS] |
291 | 119 | featured_apps = [x for x in featured_apps if x] | 117 | featured_apps = [x for x in featured_apps if x] |
Nice and straight-forward - thanks Danny!
No need to change, but just if it's helpful information - you can actually grab things out of the response context for you test... in this case you could grab response. context[ 'exhibits' ] (or whatever it is in the context) and check the ordering directly, rather than having to search and compare indexes in the response html. That said, your current test is more end-to-end, as a template tag could always be used to reverse the order or whatever. Just food for thought:)