Merge lp:~michael.nelson/launchpad/635005-difference-details-1 into lp:launchpad/db-devel

Proposed by Michael Nelson
Status: Merged
Approved by: Māris Fogels
Approved revision: no longer in the source branch.
Merged at revision: 9788
Proposed branch: lp:~michael.nelson/launchpad/635005-difference-details-1
Merge into: lp:launchpad/db-devel
Diff against target: 503 lines (+326/-23)
13 files modified
lib/lp/registry/browser/configure.zcml (+11/-0)
lib/lp/registry/browser/distroseries.py (+5/-0)
lib/lp/registry/browser/distroseriesdifference.py (+29/-0)
lib/lp/registry/browser/tests/test_distroseriesdifference_views.py (+172/-0)
lib/lp/registry/browser/tests/test_sourcepackage_views.py (+1/-1)
lib/lp/registry/configure.zcml (+2/-1)
lib/lp/registry/interfaces/distroseriesdifference.py (+10/-0)
lib/lp/registry/model/distroseriesdifference.py (+11/-0)
lib/lp/registry/stories/packaging/xx-sourcepackage-packaging.txt (+1/-1)
lib/lp/registry/templates/distroseriesdifference-listing-extra.pt (+34/-0)
lib/lp/registry/tests/test_distroseriesdifference.py (+11/-0)
lib/lp/soyuz/tests/test_publishing.py (+22/-20)
lib/lp/testing/factory.py (+17/-0)
To merge this branch: bzr merge lp:~michael.nelson/launchpad/635005-difference-details-1
Reviewer Review Type Date Requested Status
Māris Fogels (community) Approve
Review via email: mp+35408@code.launchpad.net

Commit message

Adds template snippet and view for DistroSeriesDifference details.

Description of the change

Overview
========
This is the first branch to address bug 635005 - adding a template snippet with details about a DistroSeriesDifference.

It continues the work that began (and landed behind a feature flag) at:
https://code.edge.launchpad.net/~michael.nelson/launchpad/distro-series-difference-browser2/+merge/34739 or visually: http://launchpadlibrarian.net/55200786/627295-ui-tweaks.png

which is working towards this UI: https://dev.launchpad.net/LEP/DerivativeDistributions?action=AttachFile&do=get&target=derived-series-diffs_uiround2.png from this LEP: https://dev.launchpad.net/LEP/DerivativeDistributions

Details
=======
The branch:
 * Adds a traversal for a DistroSeriesDifference object, +listing-distroseries-extra, similar to that used on pages like:

https://edge.launchpad.net/~michael.nelson/+archive/pocketsphinx/+packages?field.name_filter=&field.status_filter=&field.series_filter=

for the extra details dropdown.
 * The above required a new getter method, IDistroSeriesDifferenceSource.getByDistroSeriesAndName()
 * Testing the view required updating a soyuz helper method that creates binaries with summaries so that the summary for the source is displayed.
 * Testing the view also required adding a new factory method makePackageDiff().

I've put the template tests in a unit test, I hope that's ok. If you think it's necessary, I can add a story with the next branch that shows the non-js behaviour (ie. this page will display when users click on the first column of the list shown at: http://launchpadlibrarian.net/55200786/627295-ui-tweaks.png)

To demo:
========
You'll need to run the following in a harness:
http://pastebin.ubuntu.com/493653/

and then you can see the raw snippet at:
https://launchpad.dev/ubuntu/hoary/+difference/foo/+listing-distroseries-extra

which should look like this: https://devpad.canonical.com/~michaeln/tmp/635005-difference-details-1.png

(in retrospect, that script could be shortened and used the new helpers in the branch that I created since creating the script).

To test:
========
bin/test -vv -m test_distroseriesdifference_views -m test_sourcepackage_views -m test_distroseriesdifference -m test_publishing

Up next will be a second branch which adds the comments to the snippet and before connecting it up with the JS dropdown. As this won't be styled until its seen in the context of the dropdown, I'll request a ui-review for that branch.

To post a comment you must log in.
Revision history for this message
Māris Fogels (mars) wrote :

Hi Michael,

This looks great! r=mars

Maris

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/registry/browser/configure.zcml'
2--- lib/lp/registry/browser/configure.zcml 2010-08-31 10:00:44 +0000
3+++ lib/lp/registry/browser/configure.zcml 2010-09-14 14:03:47 +0000
4@@ -149,6 +149,17 @@
5 class="lp.registry.browser.distroseries.DistroSeriesLocalDifferences"
6 template="../templates/distroseries-localdifferences.pt"
7 permission="zope.Public"/>
8+ <browser:url
9+ for="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifference"
10+ path_expression="string:+difference/${difference/source_package_name}"
11+ rootsite="mainsite"
12+ attribute_to_parent="derived_series"/>
13+ <browser:page
14+ name="+listing-distroseries-extra"
15+ for="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifference"
16+ class="lp.registry.browser.distroseriesdifference.DistroSeriesDifferenceView"
17+ template="../templates/distroseriesdifference-listing-extra.pt"
18+ permission="zope.Public"/>
19 <browser:menus
20 classes="
21 DistroSeriesFacets
22
23=== modified file 'lib/lp/registry/browser/distroseries.py'
24--- lib/lp/registry/browser/distroseries.py 2010-09-08 07:53:06 +0000
25+++ lib/lp/registry/browser/distroseries.py 2010-09-14 14:03:47 +0000
26@@ -147,6 +147,11 @@
27 def traverse_queue(self, id):
28 return getUtility(IPackageUploadSet).get(id)
29
30+ @stepthrough('+difference')
31+ def traverse_difference(self, name):
32+ dsd_source = getUtility(IDistroSeriesDifferenceSource)
33+ return dsd_source.getByDistroSeriesAndName(self.context, name)
34+
35
36 class DistroSeriesBreadcrumb(Breadcrumb):
37 """Builds a breadcrumb for an `IDistroSeries`."""
38
39=== added file 'lib/lp/registry/browser/distroseriesdifference.py'
40--- lib/lp/registry/browser/distroseriesdifference.py 1970-01-01 00:00:00 +0000
41+++ lib/lp/registry/browser/distroseriesdifference.py 2010-09-14 14:03:47 +0000
42@@ -0,0 +1,29 @@
43+# Copyright 2010 Canonical Ltd. This software is licensed under the
44+# GNU Affero General Public License version 3 (see the file LICENSE).
45+
46+"""Browser views for DistroSeriesDifferences."""
47+
48+__metaclass__ = type
49+__all__ = [
50+ 'DistroSeriesDifferenceView',
51+ ]
52+
53+from canonical.launchpad.webapp.publisher import LaunchpadView
54+
55+
56+class DistroSeriesDifferenceView(LaunchpadView):
57+
58+ @property
59+ def summary(self):
60+ """Return the summary of the related source package."""
61+ source_pub = None
62+ if self.context.source_pub is not None:
63+ source_pub = self.context.source_pub
64+ elif self.context.parent_source_pub is not None:
65+ source_pub = self.context.parent_source_pub
66+
67+ if source_pub is not None:
68+ return source_pub.meta_sourcepackage.summary
69+ else:
70+ return None
71+
72
73=== added file 'lib/lp/registry/browser/tests/test_distroseriesdifference_views.py'
74--- lib/lp/registry/browser/tests/test_distroseriesdifference_views.py 1970-01-01 00:00:00 +0000
75+++ lib/lp/registry/browser/tests/test_distroseriesdifference_views.py 2010-09-14 14:03:47 +0000
76@@ -0,0 +1,172 @@
77+# Copyright 2010 Canonical Ltd. This software is licensed under the
78+# GNU Affero General Public License version 3 (see the file LICENSE).
79+
80+"""Unit tests for the DistroSeriesDifference views."""
81+
82+from __future__ import with_statement
83+
84+__metaclass__ = type
85+
86+from BeautifulSoup import BeautifulSoup
87+from zope.component import getUtility
88+
89+from canonical.testing import (
90+ DatabaseFunctionalLayer,
91+ LaunchpadFunctionalLayer,
92+ )
93+from lp.registry.enum import DistroSeriesDifferenceType
94+from lp.registry.interfaces.distroseriesdifference import IDistroSeriesDifferenceSource
95+from lp.soyuz.enums import PackagePublishingStatus
96+from lp.soyuz.tests.test_publishing import SoyuzTestPublisher
97+from lp.testing import (
98+ celebrity_logged_in,
99+ person_logged_in,
100+ TestCaseWithFactory,
101+ )
102+from lp.testing.views import create_initialized_view
103+
104+
105+class DistroSeriesDifferenceTestCase(TestCaseWithFactory):
106+
107+ layer = DatabaseFunctionalLayer
108+
109+ def addSummaryToDifference(self, distro_series_difference):
110+ """Helper that adds binaries with summary info to the source pubs."""
111+ distro_series = distro_series_difference.derived_series
112+ source_package_name_str = distro_series_difference.source_package_name.name
113+ stp = SoyuzTestPublisher()
114+
115+ if distro_series_difference.difference_type == (
116+ DistroSeriesDifferenceType.MISSING_FROM_DERIVED_SERIES):
117+ source_pub = distro_series_difference.parent_source_pub
118+ else:
119+ source_pub = distro_series_difference.source_pub
120+
121+ stp.makeSourcePackageSummaryData(source_pub)
122+ stp.updateDistroSeriesPackageCache(source_pub.distroseries)
123+
124+ # updateDistroSeriesPackageCache reconnects the db, so the
125+ # objects need to be reloaded.
126+ dsd_source = getUtility(IDistroSeriesDifferenceSource)
127+ ds_diff = dsd_source.getByDistroSeriesAndName(
128+ distro_series, source_package_name_str)
129+ return ds_diff
130+
131+ def test_summary_for_source_pub(self):
132+ # For packages unique to the derived series (or different
133+ # versions) the summary is based on the derived source pub.
134+ ds_diff = self.factory.makeDistroSeriesDifference()
135+ ds_diff = self.addSummaryToDifference(ds_diff)
136+
137+ view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
138+
139+ self.assertIsNot(None, view.summary)
140+ self.assertEqual(
141+ ds_diff.source_pub.meta_sourcepackage.summary, view.summary)
142+
143+ def test_summary_for_missing_difference(self):
144+ # For packages only in the parent series, the summary is based
145+ # on the parent publication.
146+ ds_diff = self.factory.makeDistroSeriesDifference(
147+ difference_type=(
148+ DistroSeriesDifferenceType.MISSING_FROM_DERIVED_SERIES))
149+ ds_diff = self.addSummaryToDifference(ds_diff)
150+
151+ view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
152+
153+ self.assertIsNot(None, view.summary)
154+ self.assertEqual(
155+ ds_diff.parent_source_pub.meta_sourcepackage.summary,
156+ view.summary)
157+
158+ def test_summary_no_pubs(self):
159+ # If the difference has been resolved by removing packages then
160+ # there will not be a summary.
161+ ds_diff = self.factory.makeDistroSeriesDifference(
162+ difference_type=(
163+ DistroSeriesDifferenceType.MISSING_FROM_DERIVED_SERIES))
164+ with celebrity_logged_in('admin'):
165+ ds_diff.parent_source_pub.status = PackagePublishingStatus.DELETED
166+ ds_diff.update()
167+
168+ view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
169+
170+ self.assertIs(None, ds_diff.parent_source_pub)
171+ self.assertIs(None, ds_diff.source_pub)
172+ self.assertIs(None, view.summary)
173+
174+
175+class DistroSeriesDifferenceTemplateTestCase(TestCaseWithFactory):
176+
177+ layer = LaunchpadFunctionalLayer
178+
179+ def number_of_request_diff_texts(self, html):
180+ """Check that the html doesn't include the request diff text."""
181+ soup = BeautifulSoup(html)
182+ return len(soup.findAll('dd', 'request-derived-diff'))
183+
184+ def contains_one_link_to_diff(self, html, package_diff):
185+ """Return whether the html contains a link to the diff content."""
186+ soup = BeautifulSoup(html)
187+ return 1 == len(soup.findAll(
188+ 'a', href=package_diff.diff_content.http_url))
189+
190+ def test_both_request_diff_texts_rendered(self):
191+ # An unlinked description of a potential diff is displayed when
192+ # no diff is present.
193+ ds_diff = self.factory.makeDistroSeriesDifference()
194+
195+ view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
196+ # Both diffs present simple text repr. of proposed diff.
197+ self.assertEqual(2, self.number_of_request_diff_texts(view()))
198+
199+ def test_source_diff_rendering_diff(self):
200+ # A linked description of the diff is displayed when
201+ # it is present.
202+ ds_diff = self.factory.makeDistroSeriesDifference()
203+
204+ with person_logged_in(ds_diff.derived_series.owner):
205+ ds_diff.package_diff = self.factory.makePackageDiff()
206+
207+ view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
208+ # The text for the parent diff remains, but the source package
209+ # diff is now a link.
210+ self.assertEqual(1, self.number_of_request_diff_texts(view()))
211+ self.assertTrue(
212+ self.contains_one_link_to_diff(view(), ds_diff.package_diff))
213+
214+ def test_source_diff_rendering_no_source(self):
215+ # If there is no source pub for this difference, then we don't
216+ # display even the request for a diff.
217+ ds_diff = self.factory.makeDistroSeriesDifference(
218+ difference_type=
219+ (DistroSeriesDifferenceType.MISSING_FROM_DERIVED_SERIES))
220+
221+ view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
222+ self.assertEqual(1, self.number_of_request_diff_texts(view()))
223+
224+ def test_parent_source_diff_rendering_diff(self):
225+ # A linked description of the diff is displayed when
226+ # it is present.
227+ ds_diff = self.factory.makeDistroSeriesDifference()
228+
229+ with person_logged_in(ds_diff.derived_series.owner):
230+ ds_diff.parent_package_diff = self.factory.makePackageDiff()
231+
232+ view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
233+ # The text for the source diff remains, but the parent package
234+ # diff is now a link.
235+ self.assertEqual(1, self.number_of_request_diff_texts(view()))
236+ self.assertTrue(
237+ self.contains_one_link_to_diff(
238+ view(), ds_diff.parent_package_diff))
239+
240+ def test_parent_source_diff_rendering_no_source(self):
241+ # If there is no source pub for this difference, then we don't
242+ # display even the request for a diff.
243+ ds_diff = self.factory.makeDistroSeriesDifference(
244+ difference_type=
245+ (DistroSeriesDifferenceType.UNIQUE_TO_DERIVED_SERIES))
246+
247+ view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
248+ self.assertEqual(1, self.number_of_request_diff_texts(view()))
249
250=== modified file 'lib/lp/registry/browser/tests/test_sourcepackage_views.py'
251--- lib/lp/registry/browser/tests/test_sourcepackage_views.py 2010-09-02 11:34:34 +0000
252+++ lib/lp/registry/browser/tests/test_sourcepackage_views.py 2010-09-14 14:03:47 +0000
253@@ -61,7 +61,7 @@
254
255 def test_get_register_upstream_url_summary(self):
256 test_publisher = SoyuzTestPublisher()
257- test_data = test_publisher.makeSourcePackageWithBinaryPackageRelease()
258+ test_data = test_publisher.makeSourcePackageSummaryData()
259 source_package_name = (
260 test_data['source_package'].sourcepackagename.name)
261 distroseries_id = test_data['distroseries'].id
262
263=== modified file 'lib/lp/registry/configure.zcml'
264--- lib/lp/registry/configure.zcml 2010-09-10 13:29:42 +0000
265+++ lib/lp/registry/configure.zcml 2010-09-14 14:03:47 +0000
266@@ -114,7 +114,8 @@
267 <allow interface="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifferencePublic"/>
268 <require
269 permission="launchpad.Edit"
270- interface="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifferenceEdit"/>
271+ interface="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifferenceEdit"
272+ set_attributes="package_diff parent_package_diff"/>
273 </class>
274
275 <!-- DistroSeriesDifferenceComment -->
276
277=== modified file 'lib/lp/registry/interfaces/distroseriesdifference.py'
278--- lib/lp/registry/interfaces/distroseriesdifference.py 2010-09-10 09:28:45 +0000
279+++ lib/lp/registry/interfaces/distroseriesdifference.py 2010-09-14 14:03:47 +0000
280@@ -177,3 +177,13 @@
281 :type status: `DistroSeriesDifferenceStatus`.
282 :return: A result set of differences.
283 """
284+
285+ def getByDistroSeriesAndName(distro_series, source_package_name):
286+ """Returns a single difference matching the series and name.
287+
288+ :param distro_series: The derived distribution series which is to be
289+ searched for differences.
290+ :type distro_series: `IDistroSeries`.
291+ :param source_package_name: The name of the package difference.
292+ :type source_package_name: unicode.
293+ """
294
295=== modified file 'lib/lp/registry/model/distroseriesdifference.py'
296--- lib/lp/registry/model/distroseriesdifference.py 2010-09-10 14:44:15 +0000
297+++ lib/lp/registry/model/distroseriesdifference.py 2010-09-14 14:03:47 +0000
298@@ -42,6 +42,7 @@
299 )
300 from lp.registry.model.distroseriesdifferencecomment import (
301 DistroSeriesDifferenceComment)
302+from lp.registry.model.sourcepackagename import SourcePackageName
303 from lp.services.propertycache import (
304 cachedproperty,
305 IPropertyCacheManager,
306@@ -126,6 +127,16 @@
307 DistroSeriesDifference.difference_type == difference_type,
308 DistroSeriesDifference.status.is_in(status))
309
310+ @staticmethod
311+ def getByDistroSeriesAndName(distro_series, source_package_name):
312+ """See `IDistroSeriesDifferenceSource`."""
313+ return IStore(DistroSeriesDifference).find(
314+ DistroSeriesDifference,
315+ DistroSeriesDifference.derived_series == distro_series,
316+ DistroSeriesDifference.source_package_name == (
317+ SourcePackageName.id),
318+ SourcePackageName.name == source_package_name).one()
319+
320 @cachedproperty
321 def source_pub(self):
322 """See `IDistroSeriesDifference`."""
323
324=== modified file 'lib/lp/registry/stories/packaging/xx-sourcepackage-packaging.txt'
325--- lib/lp/registry/stories/packaging/xx-sourcepackage-packaging.txt 2010-08-09 23:05:53 +0000
326+++ lib/lp/registry/stories/packaging/xx-sourcepackage-packaging.txt 2010-09-14 14:03:47 +0000
327@@ -6,7 +6,7 @@
328 >>> from lp.soyuz.tests.test_publishing import SoyuzTestPublisher
329 >>> test_publisher = SoyuzTestPublisher()
330 >>> login('admin@canonical.com')
331- >>> test_data = test_publisher.makeSourcePackageWithBinaryPackageRelease()
332+ >>> test_data = test_publisher.makeSourcePackageSummaryData()
333 >>> test_publisher.updateDistroSeriesPackageCache(
334 ... test_data['distroseries'])
335 >>> logout()
336
337=== added file 'lib/lp/registry/templates/distroseriesdifference-listing-extra.pt'
338--- lib/lp/registry/templates/distroseriesdifference-listing-extra.pt 1970-01-01 00:00:00 +0000
339+++ lib/lp/registry/templates/distroseriesdifference-listing-extra.pt 2010-09-14 14:03:47 +0000
340@@ -0,0 +1,34 @@
341+<tal:root
342+ xmlns:tal="http://xml.zope.org/namespaces/tal"
343+ xmlns:metal="http://xml.zope.org/namespaces/metal"
344+ xmlns:i18n="http://xml.zope.org/namespaces/i18n"
345+ i18n:domain="launchpad">
346+ <dl>
347+ <dt>Description:</dt>
348+ <dd><tal:description replace="view/summary" /></dd>
349+ <dt>Last common version:</dt>
350+ <dd>Not implemented.</dd>
351+ <dt>Package differences:</dt>
352+ <tal:source-diff-option condition="context/source_pub">
353+ <dd tal:condition="context/package_diff"
354+ tal:content="structure context/package_diff/fmt:link">
355+ <a>link to a diff</a></dd>
356+ <dd tal:condition="not: context/package_diff" class="request-derived-diff">
357+ Base version to derived <span
358+ tal:replace="context/source_version">1.2.3</span>
359+ </dd>
360+ </tal:source-diff-option>
361+
362+ <tal:parent-diff-option condition="context/parent_source_pub">
363+ <dd tal:condition="context/parent_package_diff"
364+ tal:content="structure context/parent_package_diff/fmt:link">
365+ <a>link to a diff</a></dd>
366+ <dd tal:condition="not: context/parent_package_diff" class="request-derived-diff">
367+ Base version to parent <span
368+ tal:replace="context/parent_source_version">1.2.3</span>
369+ </dd>
370+ </tal:parent-diff-option>
371+ </dl>
372+ <h2>Comments:</h2>
373+
374+</tal:root>
375
376=== modified file 'lib/lp/registry/tests/test_distroseriesdifference.py'
377--- lib/lp/registry/tests/test_distroseriesdifference.py 2010-09-10 14:44:15 +0000
378+++ lib/lp/registry/tests/test_distroseriesdifference.py 2010-09-14 14:03:47 +0000
379@@ -454,6 +454,17 @@
380
381 self.assertContentEqual(diffs['normal'] + diffs['ignored'], result)
382
383+ def test_getByDistroSeriesAndName(self):
384+ # An individual difference is obtained using the name.
385+ ds_diff = self.factory.makeDistroSeriesDifference(
386+ source_package_name_str='fooname')
387+
388+ dsd_source = getUtility(IDistroSeriesDifferenceSource)
389+ result = dsd_source.getByDistroSeriesAndName(
390+ ds_diff.derived_series, 'fooname')
391+
392+ self.assertEqual(ds_diff, result)
393+
394
395 def test_suite():
396 return unittest.TestLoader().loadTestsFromName(__name__)
397
398=== modified file 'lib/lp/soyuz/tests/test_publishing.py'
399--- lib/lp/soyuz/tests/test_publishing.py 2010-08-30 19:06:34 +0000
400+++ lib/lp/soyuz/tests/test_publishing.py 2010-09-14 14:03:47 +0000
401@@ -494,45 +494,47 @@
402
403 return source
404
405- def makeSourcePackageWithBinaryPackageRelease(self):
406+ def makeSourcePackageSummaryData(self, source_pub=None):
407 """Make test data for SourcePackage.summary.
408
409 The distroseries that is returned from this method needs to be
410 passed into updateDistroseriesPackageCache() so that
411 SourcePackage.summary can be populated.
412 """
413- distribution = self.factory.makeDistribution(
414- name='youbuntu', displayname='Youbuntu')
415- distroseries = self.factory.makeDistroRelease(name='busy',
416- distribution=distribution)
417- source_package_name = self.factory.makeSourcePackageName(
418- name='bonkers')
419- source_package = self.factory.makeSourcePackage(
420- sourcepackagename=source_package_name,
421- distroseries=distroseries)
422- component = self.factory.makeComponent('multiverse')
423+ if source_pub is None:
424+ distribution = self.factory.makeDistribution(
425+ name='youbuntu', displayname='Youbuntu')
426+ distroseries = self.factory.makeDistroRelease(name='busy',
427+ distribution=distribution)
428+ source_package_name = self.factory.makeSourcePackageName(
429+ name='bonkers')
430+ source_package = self.factory.makeSourcePackage(
431+ sourcepackagename=source_package_name,
432+ distroseries=distroseries)
433+ component = self.factory.makeComponent('multiverse')
434+ source_pub = self.factory.makeSourcePackagePublishingHistory(
435+ sourcepackagename=source_package_name,
436+ distroseries=distroseries,
437+ component=component)
438+
439 das = self.factory.makeDistroArchSeries(
440- distroseries=distroseries)
441- spph = self.factory.makeSourcePackagePublishingHistory(
442- sourcepackagename=source_package_name,
443- distroseries=distroseries,
444- component=component)
445+ distroseries=source_pub.distroseries)
446
447 for name in ('flubber-bin', 'flubber-lib'):
448 binary_package_name = self.factory.makeBinaryPackageName(name)
449 build = self.factory.makeBinaryPackageBuild(
450- source_package_release=spph.sourcepackagerelease,
451+ source_package_release=source_pub.sourcepackagerelease,
452 archive=self.factory.makeArchive(),
453 distroarchseries=das)
454 bpr = self.factory.makeBinaryPackageRelease(
455 binarypackagename=binary_package_name,
456 summary='summary for %s' % name,
457- build=build, component=component)
458+ build=build, component=source_pub.component)
459 bpph = self.factory.makeBinaryPackagePublishingHistory(
460 binarypackagerelease=bpr, distroarchseries=das)
461 return dict(
462- distroseries=distroseries,
463- source_package=source_package)
464+ distroseries=source_pub.distroseries,
465+ source_package=source_pub.meta_sourcepackage)
466
467 def updateDistroSeriesPackageCache(
468 self, distroseries, restore_db_connection='launchpad'):
469
470=== modified file 'lib/lp/testing/factory.py'
471--- lib/lp/testing/factory.py 2010-09-13 08:19:39 +0000
472+++ lib/lp/testing/factory.py 2010-09-14 14:03:47 +0000
473@@ -220,6 +220,7 @@
474 ArchivePurpose,
475 BinaryPackageFileType,
476 BinaryPackageFormat,
477+ PackageDiffStatus,
478 PackagePublishingPriority,
479 PackagePublishingStatus,
480 PackageUploadStatus,
481@@ -1798,6 +1799,22 @@
482 expires=expires, restricted=restricted)
483 return library_file_alias
484
485+ def makePackageDiff(self, from_spr=None, to_spr=None):
486+ """Make a completed package diff."""
487+ if from_spr is None:
488+ from_spr = self.makeSourcePackageRelease()
489+ if to_spr is None:
490+ to_spr = self.makeSourcePackageRelease()
491+
492+ diff = from_spr.requestDiffTo(
493+ from_spr.creator, to_spr)
494+
495+ naked_diff = removeSecurityProxy(diff)
496+ naked_diff.status = PackageDiffStatus.COMPLETED
497+ naked_diff.diff_content = self.makeLibraryFileAlias()
498+ naked_diff.date_fulfilled = UTC_NOW
499+ return diff
500+
501 def makeDistribution(self, name=None, displayname=None, owner=None,
502 members=None, title=None, aliases=None):
503 """Make a new distribution."""

Subscribers

People subscribed via source and target branches

to status/vote changes: