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
=== modified file 'lib/lp/registry/browser/configure.zcml'
--- lib/lp/registry/browser/configure.zcml 2010-08-31 10:00:44 +0000
+++ lib/lp/registry/browser/configure.zcml 2010-09-14 14:03:47 +0000
@@ -149,6 +149,17 @@
149 class="lp.registry.browser.distroseries.DistroSeriesLocalDifferences"149 class="lp.registry.browser.distroseries.DistroSeriesLocalDifferences"
150 template="../templates/distroseries-localdifferences.pt"150 template="../templates/distroseries-localdifferences.pt"
151 permission="zope.Public"/>151 permission="zope.Public"/>
152 <browser:url
153 for="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifference"
154 path_expression="string:+difference/${difference/source_package_name}"
155 rootsite="mainsite"
156 attribute_to_parent="derived_series"/>
157 <browser:page
158 name="+listing-distroseries-extra"
159 for="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifference"
160 class="lp.registry.browser.distroseriesdifference.DistroSeriesDifferenceView"
161 template="../templates/distroseriesdifference-listing-extra.pt"
162 permission="zope.Public"/>
152 <browser:menus163 <browser:menus
153 classes="164 classes="
154 DistroSeriesFacets165 DistroSeriesFacets
155166
=== modified file 'lib/lp/registry/browser/distroseries.py'
--- lib/lp/registry/browser/distroseries.py 2010-09-08 07:53:06 +0000
+++ lib/lp/registry/browser/distroseries.py 2010-09-14 14:03:47 +0000
@@ -147,6 +147,11 @@
147 def traverse_queue(self, id):147 def traverse_queue(self, id):
148 return getUtility(IPackageUploadSet).get(id)148 return getUtility(IPackageUploadSet).get(id)
149149
150 @stepthrough('+difference')
151 def traverse_difference(self, name):
152 dsd_source = getUtility(IDistroSeriesDifferenceSource)
153 return dsd_source.getByDistroSeriesAndName(self.context, name)
154
150155
151class DistroSeriesBreadcrumb(Breadcrumb):156class DistroSeriesBreadcrumb(Breadcrumb):
152 """Builds a breadcrumb for an `IDistroSeries`."""157 """Builds a breadcrumb for an `IDistroSeries`."""
153158
=== added file 'lib/lp/registry/browser/distroseriesdifference.py'
--- lib/lp/registry/browser/distroseriesdifference.py 1970-01-01 00:00:00 +0000
+++ lib/lp/registry/browser/distroseriesdifference.py 2010-09-14 14:03:47 +0000
@@ -0,0 +1,29 @@
1# Copyright 2010 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).
3
4"""Browser views for DistroSeriesDifferences."""
5
6__metaclass__ = type
7__all__ = [
8 'DistroSeriesDifferenceView',
9 ]
10
11from canonical.launchpad.webapp.publisher import LaunchpadView
12
13
14class DistroSeriesDifferenceView(LaunchpadView):
15
16 @property
17 def summary(self):
18 """Return the summary of the related source package."""
19 source_pub = None
20 if self.context.source_pub is not None:
21 source_pub = self.context.source_pub
22 elif self.context.parent_source_pub is not None:
23 source_pub = self.context.parent_source_pub
24
25 if source_pub is not None:
26 return source_pub.meta_sourcepackage.summary
27 else:
28 return None
29
030
=== added file 'lib/lp/registry/browser/tests/test_distroseriesdifference_views.py'
--- lib/lp/registry/browser/tests/test_distroseriesdifference_views.py 1970-01-01 00:00:00 +0000
+++ lib/lp/registry/browser/tests/test_distroseriesdifference_views.py 2010-09-14 14:03:47 +0000
@@ -0,0 +1,172 @@
1# Copyright 2010 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).
3
4"""Unit tests for the DistroSeriesDifference views."""
5
6from __future__ import with_statement
7
8__metaclass__ = type
9
10from BeautifulSoup import BeautifulSoup
11from zope.component import getUtility
12
13from canonical.testing import (
14 DatabaseFunctionalLayer,
15 LaunchpadFunctionalLayer,
16 )
17from lp.registry.enum import DistroSeriesDifferenceType
18from lp.registry.interfaces.distroseriesdifference import IDistroSeriesDifferenceSource
19from lp.soyuz.enums import PackagePublishingStatus
20from lp.soyuz.tests.test_publishing import SoyuzTestPublisher
21from lp.testing import (
22 celebrity_logged_in,
23 person_logged_in,
24 TestCaseWithFactory,
25 )
26from lp.testing.views import create_initialized_view
27
28
29class DistroSeriesDifferenceTestCase(TestCaseWithFactory):
30
31 layer = DatabaseFunctionalLayer
32
33 def addSummaryToDifference(self, distro_series_difference):
34 """Helper that adds binaries with summary info to the source pubs."""
35 distro_series = distro_series_difference.derived_series
36 source_package_name_str = distro_series_difference.source_package_name.name
37 stp = SoyuzTestPublisher()
38
39 if distro_series_difference.difference_type == (
40 DistroSeriesDifferenceType.MISSING_FROM_DERIVED_SERIES):
41 source_pub = distro_series_difference.parent_source_pub
42 else:
43 source_pub = distro_series_difference.source_pub
44
45 stp.makeSourcePackageSummaryData(source_pub)
46 stp.updateDistroSeriesPackageCache(source_pub.distroseries)
47
48 # updateDistroSeriesPackageCache reconnects the db, so the
49 # objects need to be reloaded.
50 dsd_source = getUtility(IDistroSeriesDifferenceSource)
51 ds_diff = dsd_source.getByDistroSeriesAndName(
52 distro_series, source_package_name_str)
53 return ds_diff
54
55 def test_summary_for_source_pub(self):
56 # For packages unique to the derived series (or different
57 # versions) the summary is based on the derived source pub.
58 ds_diff = self.factory.makeDistroSeriesDifference()
59 ds_diff = self.addSummaryToDifference(ds_diff)
60
61 view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
62
63 self.assertIsNot(None, view.summary)
64 self.assertEqual(
65 ds_diff.source_pub.meta_sourcepackage.summary, view.summary)
66
67 def test_summary_for_missing_difference(self):
68 # For packages only in the parent series, the summary is based
69 # on the parent publication.
70 ds_diff = self.factory.makeDistroSeriesDifference(
71 difference_type=(
72 DistroSeriesDifferenceType.MISSING_FROM_DERIVED_SERIES))
73 ds_diff = self.addSummaryToDifference(ds_diff)
74
75 view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
76
77 self.assertIsNot(None, view.summary)
78 self.assertEqual(
79 ds_diff.parent_source_pub.meta_sourcepackage.summary,
80 view.summary)
81
82 def test_summary_no_pubs(self):
83 # If the difference has been resolved by removing packages then
84 # there will not be a summary.
85 ds_diff = self.factory.makeDistroSeriesDifference(
86 difference_type=(
87 DistroSeriesDifferenceType.MISSING_FROM_DERIVED_SERIES))
88 with celebrity_logged_in('admin'):
89 ds_diff.parent_source_pub.status = PackagePublishingStatus.DELETED
90 ds_diff.update()
91
92 view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
93
94 self.assertIs(None, ds_diff.parent_source_pub)
95 self.assertIs(None, ds_diff.source_pub)
96 self.assertIs(None, view.summary)
97
98
99class DistroSeriesDifferenceTemplateTestCase(TestCaseWithFactory):
100
101 layer = LaunchpadFunctionalLayer
102
103 def number_of_request_diff_texts(self, html):
104 """Check that the html doesn't include the request diff text."""
105 soup = BeautifulSoup(html)
106 return len(soup.findAll('dd', 'request-derived-diff'))
107
108 def contains_one_link_to_diff(self, html, package_diff):
109 """Return whether the html contains a link to the diff content."""
110 soup = BeautifulSoup(html)
111 return 1 == len(soup.findAll(
112 'a', href=package_diff.diff_content.http_url))
113
114 def test_both_request_diff_texts_rendered(self):
115 # An unlinked description of a potential diff is displayed when
116 # no diff is present.
117 ds_diff = self.factory.makeDistroSeriesDifference()
118
119 view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
120 # Both diffs present simple text repr. of proposed diff.
121 self.assertEqual(2, self.number_of_request_diff_texts(view()))
122
123 def test_source_diff_rendering_diff(self):
124 # A linked description of the diff is displayed when
125 # it is present.
126 ds_diff = self.factory.makeDistroSeriesDifference()
127
128 with person_logged_in(ds_diff.derived_series.owner):
129 ds_diff.package_diff = self.factory.makePackageDiff()
130
131 view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
132 # The text for the parent diff remains, but the source package
133 # diff is now a link.
134 self.assertEqual(1, self.number_of_request_diff_texts(view()))
135 self.assertTrue(
136 self.contains_one_link_to_diff(view(), ds_diff.package_diff))
137
138 def test_source_diff_rendering_no_source(self):
139 # If there is no source pub for this difference, then we don't
140 # display even the request for a diff.
141 ds_diff = self.factory.makeDistroSeriesDifference(
142 difference_type=
143 (DistroSeriesDifferenceType.MISSING_FROM_DERIVED_SERIES))
144
145 view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
146 self.assertEqual(1, self.number_of_request_diff_texts(view()))
147
148 def test_parent_source_diff_rendering_diff(self):
149 # A linked description of the diff is displayed when
150 # it is present.
151 ds_diff = self.factory.makeDistroSeriesDifference()
152
153 with person_logged_in(ds_diff.derived_series.owner):
154 ds_diff.parent_package_diff = self.factory.makePackageDiff()
155
156 view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
157 # The text for the source diff remains, but the parent package
158 # diff is now a link.
159 self.assertEqual(1, self.number_of_request_diff_texts(view()))
160 self.assertTrue(
161 self.contains_one_link_to_diff(
162 view(), ds_diff.parent_package_diff))
163
164 def test_parent_source_diff_rendering_no_source(self):
165 # If there is no source pub for this difference, then we don't
166 # display even the request for a diff.
167 ds_diff = self.factory.makeDistroSeriesDifference(
168 difference_type=
169 (DistroSeriesDifferenceType.UNIQUE_TO_DERIVED_SERIES))
170
171 view = create_initialized_view(ds_diff, '+listing-distroseries-extra')
172 self.assertEqual(1, self.number_of_request_diff_texts(view()))
0173
=== modified file 'lib/lp/registry/browser/tests/test_sourcepackage_views.py'
--- lib/lp/registry/browser/tests/test_sourcepackage_views.py 2010-09-02 11:34:34 +0000
+++ lib/lp/registry/browser/tests/test_sourcepackage_views.py 2010-09-14 14:03:47 +0000
@@ -61,7 +61,7 @@
6161
62 def test_get_register_upstream_url_summary(self):62 def test_get_register_upstream_url_summary(self):
63 test_publisher = SoyuzTestPublisher()63 test_publisher = SoyuzTestPublisher()
64 test_data = test_publisher.makeSourcePackageWithBinaryPackageRelease()64 test_data = test_publisher.makeSourcePackageSummaryData()
65 source_package_name = (65 source_package_name = (
66 test_data['source_package'].sourcepackagename.name)66 test_data['source_package'].sourcepackagename.name)
67 distroseries_id = test_data['distroseries'].id67 distroseries_id = test_data['distroseries'].id
6868
=== modified file 'lib/lp/registry/configure.zcml'
--- lib/lp/registry/configure.zcml 2010-09-10 13:29:42 +0000
+++ lib/lp/registry/configure.zcml 2010-09-14 14:03:47 +0000
@@ -114,7 +114,8 @@
114 <allow interface="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifferencePublic"/>114 <allow interface="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifferencePublic"/>
115 <require115 <require
116 permission="launchpad.Edit"116 permission="launchpad.Edit"
117 interface="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifferenceEdit"/>117 interface="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifferenceEdit"
118 set_attributes="package_diff parent_package_diff"/>
118 </class>119 </class>
119120
120 <!-- DistroSeriesDifferenceComment -->121 <!-- DistroSeriesDifferenceComment -->
121122
=== modified file 'lib/lp/registry/interfaces/distroseriesdifference.py'
--- lib/lp/registry/interfaces/distroseriesdifference.py 2010-09-10 09:28:45 +0000
+++ lib/lp/registry/interfaces/distroseriesdifference.py 2010-09-14 14:03:47 +0000
@@ -177,3 +177,13 @@
177 :type status: `DistroSeriesDifferenceStatus`.177 :type status: `DistroSeriesDifferenceStatus`.
178 :return: A result set of differences.178 :return: A result set of differences.
179 """179 """
180
181 def getByDistroSeriesAndName(distro_series, source_package_name):
182 """Returns a single difference matching the series and name.
183
184 :param distro_series: The derived distribution series which is to be
185 searched for differences.
186 :type distro_series: `IDistroSeries`.
187 :param source_package_name: The name of the package difference.
188 :type source_package_name: unicode.
189 """
180190
=== modified file 'lib/lp/registry/model/distroseriesdifference.py'
--- lib/lp/registry/model/distroseriesdifference.py 2010-09-10 14:44:15 +0000
+++ lib/lp/registry/model/distroseriesdifference.py 2010-09-14 14:03:47 +0000
@@ -42,6 +42,7 @@
42 )42 )
43from lp.registry.model.distroseriesdifferencecomment import (43from lp.registry.model.distroseriesdifferencecomment import (
44 DistroSeriesDifferenceComment)44 DistroSeriesDifferenceComment)
45from lp.registry.model.sourcepackagename import SourcePackageName
45from lp.services.propertycache import (46from lp.services.propertycache import (
46 cachedproperty,47 cachedproperty,
47 IPropertyCacheManager,48 IPropertyCacheManager,
@@ -126,6 +127,16 @@
126 DistroSeriesDifference.difference_type == difference_type,127 DistroSeriesDifference.difference_type == difference_type,
127 DistroSeriesDifference.status.is_in(status))128 DistroSeriesDifference.status.is_in(status))
128129
130 @staticmethod
131 def getByDistroSeriesAndName(distro_series, source_package_name):
132 """See `IDistroSeriesDifferenceSource`."""
133 return IStore(DistroSeriesDifference).find(
134 DistroSeriesDifference,
135 DistroSeriesDifference.derived_series == distro_series,
136 DistroSeriesDifference.source_package_name == (
137 SourcePackageName.id),
138 SourcePackageName.name == source_package_name).one()
139
129 @cachedproperty140 @cachedproperty
130 def source_pub(self):141 def source_pub(self):
131 """See `IDistroSeriesDifference`."""142 """See `IDistroSeriesDifference`."""
132143
=== modified file 'lib/lp/registry/stories/packaging/xx-sourcepackage-packaging.txt'
--- lib/lp/registry/stories/packaging/xx-sourcepackage-packaging.txt 2010-08-09 23:05:53 +0000
+++ lib/lp/registry/stories/packaging/xx-sourcepackage-packaging.txt 2010-09-14 14:03:47 +0000
@@ -6,7 +6,7 @@
6 >>> from lp.soyuz.tests.test_publishing import SoyuzTestPublisher6 >>> from lp.soyuz.tests.test_publishing import SoyuzTestPublisher
7 >>> test_publisher = SoyuzTestPublisher()7 >>> test_publisher = SoyuzTestPublisher()
8 >>> login('admin@canonical.com')8 >>> login('admin@canonical.com')
9 >>> test_data = test_publisher.makeSourcePackageWithBinaryPackageRelease()9 >>> test_data = test_publisher.makeSourcePackageSummaryData()
10 >>> test_publisher.updateDistroSeriesPackageCache(10 >>> test_publisher.updateDistroSeriesPackageCache(
11 ... test_data['distroseries'])11 ... test_data['distroseries'])
12 >>> logout()12 >>> logout()
1313
=== added file 'lib/lp/registry/templates/distroseriesdifference-listing-extra.pt'
--- lib/lp/registry/templates/distroseriesdifference-listing-extra.pt 1970-01-01 00:00:00 +0000
+++ lib/lp/registry/templates/distroseriesdifference-listing-extra.pt 2010-09-14 14:03:47 +0000
@@ -0,0 +1,34 @@
1<tal:root
2 xmlns:tal="http://xml.zope.org/namespaces/tal"
3 xmlns:metal="http://xml.zope.org/namespaces/metal"
4 xmlns:i18n="http://xml.zope.org/namespaces/i18n"
5 i18n:domain="launchpad">
6 <dl>
7 <dt>Description:</dt>
8 <dd><tal:description replace="view/summary" /></dd>
9 <dt>Last common version:</dt>
10 <dd>Not implemented.</dd>
11 <dt>Package differences:</dt>
12 <tal:source-diff-option condition="context/source_pub">
13 <dd tal:condition="context/package_diff"
14 tal:content="structure context/package_diff/fmt:link">
15 <a>link to a diff</a></dd>
16 <dd tal:condition="not: context/package_diff" class="request-derived-diff">
17 Base version to derived <span
18 tal:replace="context/source_version">1.2.3</span>
19 </dd>
20 </tal:source-diff-option>
21
22 <tal:parent-diff-option condition="context/parent_source_pub">
23 <dd tal:condition="context/parent_package_diff"
24 tal:content="structure context/parent_package_diff/fmt:link">
25 <a>link to a diff</a></dd>
26 <dd tal:condition="not: context/parent_package_diff" class="request-derived-diff">
27 Base version to parent <span
28 tal:replace="context/parent_source_version">1.2.3</span>
29 </dd>
30 </tal:parent-diff-option>
31 </dl>
32 <h2>Comments:</h2>
33
34</tal:root>
035
=== modified file 'lib/lp/registry/tests/test_distroseriesdifference.py'
--- lib/lp/registry/tests/test_distroseriesdifference.py 2010-09-10 14:44:15 +0000
+++ lib/lp/registry/tests/test_distroseriesdifference.py 2010-09-14 14:03:47 +0000
@@ -454,6 +454,17 @@
454454
455 self.assertContentEqual(diffs['normal'] + diffs['ignored'], result)455 self.assertContentEqual(diffs['normal'] + diffs['ignored'], result)
456456
457 def test_getByDistroSeriesAndName(self):
458 # An individual difference is obtained using the name.
459 ds_diff = self.factory.makeDistroSeriesDifference(
460 source_package_name_str='fooname')
461
462 dsd_source = getUtility(IDistroSeriesDifferenceSource)
463 result = dsd_source.getByDistroSeriesAndName(
464 ds_diff.derived_series, 'fooname')
465
466 self.assertEqual(ds_diff, result)
467
457468
458def test_suite():469def test_suite():
459 return unittest.TestLoader().loadTestsFromName(__name__)470 return unittest.TestLoader().loadTestsFromName(__name__)
460471
=== modified file 'lib/lp/soyuz/tests/test_publishing.py'
--- lib/lp/soyuz/tests/test_publishing.py 2010-08-30 19:06:34 +0000
+++ lib/lp/soyuz/tests/test_publishing.py 2010-09-14 14:03:47 +0000
@@ -494,45 +494,47 @@
494494
495 return source495 return source
496496
497 def makeSourcePackageWithBinaryPackageRelease(self):497 def makeSourcePackageSummaryData(self, source_pub=None):
498 """Make test data for SourcePackage.summary.498 """Make test data for SourcePackage.summary.
499499
500 The distroseries that is returned from this method needs to be500 The distroseries that is returned from this method needs to be
501 passed into updateDistroseriesPackageCache() so that501 passed into updateDistroseriesPackageCache() so that
502 SourcePackage.summary can be populated.502 SourcePackage.summary can be populated.
503 """503 """
504 distribution = self.factory.makeDistribution(504 if source_pub is None:
505 name='youbuntu', displayname='Youbuntu')505 distribution = self.factory.makeDistribution(
506 distroseries = self.factory.makeDistroRelease(name='busy',506 name='youbuntu', displayname='Youbuntu')
507 distribution=distribution)507 distroseries = self.factory.makeDistroRelease(name='busy',
508 source_package_name = self.factory.makeSourcePackageName(508 distribution=distribution)
509 name='bonkers')509 source_package_name = self.factory.makeSourcePackageName(
510 source_package = self.factory.makeSourcePackage(510 name='bonkers')
511 sourcepackagename=source_package_name,511 source_package = self.factory.makeSourcePackage(
512 distroseries=distroseries)512 sourcepackagename=source_package_name,
513 component = self.factory.makeComponent('multiverse')513 distroseries=distroseries)
514 component = self.factory.makeComponent('multiverse')
515 source_pub = self.factory.makeSourcePackagePublishingHistory(
516 sourcepackagename=source_package_name,
517 distroseries=distroseries,
518 component=component)
519
514 das = self.factory.makeDistroArchSeries(520 das = self.factory.makeDistroArchSeries(
515 distroseries=distroseries)521 distroseries=source_pub.distroseries)
516 spph = self.factory.makeSourcePackagePublishingHistory(
517 sourcepackagename=source_package_name,
518 distroseries=distroseries,
519 component=component)
520522
521 for name in ('flubber-bin', 'flubber-lib'):523 for name in ('flubber-bin', 'flubber-lib'):
522 binary_package_name = self.factory.makeBinaryPackageName(name)524 binary_package_name = self.factory.makeBinaryPackageName(name)
523 build = self.factory.makeBinaryPackageBuild(525 build = self.factory.makeBinaryPackageBuild(
524 source_package_release=spph.sourcepackagerelease,526 source_package_release=source_pub.sourcepackagerelease,
525 archive=self.factory.makeArchive(),527 archive=self.factory.makeArchive(),
526 distroarchseries=das)528 distroarchseries=das)
527 bpr = self.factory.makeBinaryPackageRelease(529 bpr = self.factory.makeBinaryPackageRelease(
528 binarypackagename=binary_package_name,530 binarypackagename=binary_package_name,
529 summary='summary for %s' % name,531 summary='summary for %s' % name,
530 build=build, component=component)532 build=build, component=source_pub.component)
531 bpph = self.factory.makeBinaryPackagePublishingHistory(533 bpph = self.factory.makeBinaryPackagePublishingHistory(
532 binarypackagerelease=bpr, distroarchseries=das)534 binarypackagerelease=bpr, distroarchseries=das)
533 return dict(535 return dict(
534 distroseries=distroseries,536 distroseries=source_pub.distroseries,
535 source_package=source_package)537 source_package=source_pub.meta_sourcepackage)
536538
537 def updateDistroSeriesPackageCache(539 def updateDistroSeriesPackageCache(
538 self, distroseries, restore_db_connection='launchpad'):540 self, distroseries, restore_db_connection='launchpad'):
539541
=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py 2010-09-13 08:19:39 +0000
+++ lib/lp/testing/factory.py 2010-09-14 14:03:47 +0000
@@ -220,6 +220,7 @@
220 ArchivePurpose,220 ArchivePurpose,
221 BinaryPackageFileType,221 BinaryPackageFileType,
222 BinaryPackageFormat,222 BinaryPackageFormat,
223 PackageDiffStatus,
223 PackagePublishingPriority,224 PackagePublishingPriority,
224 PackagePublishingStatus,225 PackagePublishingStatus,
225 PackageUploadStatus,226 PackageUploadStatus,
@@ -1798,6 +1799,22 @@
1798 expires=expires, restricted=restricted)1799 expires=expires, restricted=restricted)
1799 return library_file_alias1800 return library_file_alias
18001801
1802 def makePackageDiff(self, from_spr=None, to_spr=None):
1803 """Make a completed package diff."""
1804 if from_spr is None:
1805 from_spr = self.makeSourcePackageRelease()
1806 if to_spr is None:
1807 to_spr = self.makeSourcePackageRelease()
1808
1809 diff = from_spr.requestDiffTo(
1810 from_spr.creator, to_spr)
1811
1812 naked_diff = removeSecurityProxy(diff)
1813 naked_diff.status = PackageDiffStatus.COMPLETED
1814 naked_diff.diff_content = self.makeLibraryFileAlias()
1815 naked_diff.date_fulfilled = UTC_NOW
1816 return diff
1817
1801 def makeDistribution(self, name=None, displayname=None, owner=None,1818 def makeDistribution(self, name=None, displayname=None, owner=None,
1802 members=None, title=None, aliases=None):1819 members=None, title=None, aliases=None):
1803 """Make a new distribution."""1820 """Make a new distribution."""

Subscribers

People subscribed via source and target branches

to status/vote changes: