Merge lp:~rvb/launchpad/initseries-bug-795537 into lp:launchpad

Proposed by Raphaël Badin
Status: Merged
Approved by: Raphaël Badin
Approved revision: no longer in the source branch.
Merged at revision: 13216
Proposed branch: lp:~rvb/launchpad/initseries-bug-795537
Merge into: lp:launchpad
Diff against target: 128 lines (+89/-0)
3 files modified
lib/lp/registry/browser/distroseries.py (+10/-0)
lib/lp/registry/browser/tests/test_distroseries.py (+76/-0)
lib/lp/registry/templates/distroseries-index.pt (+3/-0)
To merge this branch: bzr merge lp:~rvb/launchpad/initseries-bug-795537
Reviewer Review Type Date Requested Status
Benji York (community) code Approve
Review via email: mp+64231@code.launchpad.net

Commit message

[r=benji][bug=795537] Add the link +initseries to a distroseries' index page.

Description of the change

This branch adds the link +initseries to the home page of a distroseries.
This link is only displayed:
- if the feature flag (soyuz.derived_series_ui.enabled) is enabled;
- to users with lp.Admin;
- if the series is not already initialized or currently initializing.

= Tests =

./bin/test -cvv test_distroseries test_differences_init_link_no_feature
./bin/test -cvv test_distroseries test_differences_init_link_admin
./bin/test -cvv test_distroseries test_differences_init_link_not_admin
./bin/test -cvv test_distroseries test_differences_init_link_initialized
./bin/test -cvv test_distroseries test_differences_init_link_series_initializing

= Q/A =

On DF:
- as admin: make sure that the link is present on a series homepage.
- as non admin: make sure that the link is not present on a series homepage.
- as admin: the link should not be present for a series already initialized, or a series initializing.

To post a comment you must log in.
Revision history for this message
Benji York (benji) wrote :

This looks good.

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/registry/browser/distroseries.py'
2--- lib/lp/registry/browser/distroseries.py 2011-06-09 13:11:57 +0000
3+++ lib/lp/registry/browser/distroseries.py 2011-06-13 09:27:22 +0000
4@@ -218,6 +218,7 @@
5 'queue',
6 'add_port',
7 'create_milestone',
8+ 'initseries',
9 ]
10 add_subscribe_link(links)
11 links.append('admin')
12@@ -275,6 +276,15 @@
13 text = 'Show uploads'
14 return Link('+queue', text, icon='info')
15
16+ @enabled_with_permission('launchpad.Admin')
17+ def initseries(self):
18+ enabled = (
19+ getFeatureFlag('soyuz.derived_series_ui.enabled') is not None and
20+ not self.context.isInitializing() and
21+ not self.context.isInitialized())
22+ text = 'Initialize series'
23+ return Link('+initseries', text, icon='edit', enabled=enabled)
24+
25
26 class DistroSeriesBugsMenu(ApplicationMenu, StructuralSubscriptionMenuMixin):
27
28
29=== modified file 'lib/lp/registry/browser/tests/test_distroseries.py'
30--- lib/lp/registry/browser/tests/test_distroseries.py 2011-06-09 13:11:57 +0000
31+++ lib/lp/registry/browser/tests/test_distroseries.py 2011-06-13 09:27:22 +0000
32@@ -328,6 +328,82 @@
33 self.assertTrue(derived_series.isInitializing())
34 self.assertThat(html_content, portlet_display)
35
36+ def assertInitSeriesLinkPresent(self, series, person):
37+ self._assertInitSeriesLink(series, person, True)
38+
39+ def assertInitSeriesLinkNotPresent(self, series, person):
40+ self._assertInitSeriesLink(series, person, False)
41+
42+ def _assertInitSeriesLink(self, series, person, present=True):
43+ # Helper method to check the presence/absence of the link to
44+ # +iniseries.
45+ if person == 'admin':
46+ person = getUtility(ILaunchpadCelebrities).admin.teamowner
47+
48+ init_link_matcher = soupmatchers.HTMLContains(
49+ soupmatchers.Tag(
50+ 'Initialize series', 'a',
51+ text='Initialize series',
52+ attrs={'href': '%s/+initseries' % canonical_url(series)}))
53+
54+ with person_logged_in(person):
55+ view = create_initialized_view(
56+ series,
57+ '+index',
58+ principal=person)
59+ html_content = view()
60+
61+ if present:
62+ self.assertThat(html_content, init_link_matcher)
63+ else:
64+ self.assertThat(html_content, Not(init_link_matcher))
65+
66+ def test_differences_init_link_no_feature(self):
67+ # The link to +initseries is not displayed if the feature flag
68+ # is not enabled.
69+ series = self.factory.makeDistroSeries()
70+
71+ self.assertInitSeriesLinkNotPresent(series, 'admin')
72+
73+ def test_differences_init_link_admin(self):
74+ # The link to +initseries is displayed to admin users if the
75+ # feature flag is enabled.
76+ set_derived_series_ui_feature_flag(self)
77+ series = self.factory.makeDistroSeries()
78+
79+ self.assertInitSeriesLinkPresent(series, 'admin')
80+
81+ def test_differences_init_link_not_admin(self):
82+ # The link to +initseries is not displayed to not admin users if the
83+ # feature flag is enabled.
84+ set_derived_series_ui_feature_flag(self)
85+ series = self.factory.makeDistroSeries()
86+ person = self.factory.makePerson()
87+
88+ self.assertInitSeriesLinkNotPresent(series, person)
89+
90+ def test_differences_init_link_initialized(self):
91+ # The link to +initseries is not displayed if the series is
92+ # already initialized (i.e. has any published package).
93+ set_derived_series_ui_feature_flag(self)
94+ series = self.factory.makeDistroSeries()
95+ self.factory.makeSourcePackagePublishingHistory(
96+ archive=series.main_archive,
97+ distroseries=series)
98+
99+ self.assertInitSeriesLinkNotPresent(series, 'admin')
100+
101+ def test_differences_init_link_series_initializing(self):
102+ # The link to +initseries is not displayed if the series is
103+ # initializing.
104+ set_derived_series_ui_feature_flag(self)
105+ series = self.factory.makeDistroSeries()
106+ parent_series = self.factory.makeDistroSeries()
107+ job_source = getUtility(IInitialiseDistroSeriesJobSource)
108+ job_source.create(series, [parent_series.id])
109+
110+ self.assertInitSeriesLinkNotPresent(series, 'admin')
111+
112
113 class TestMilestoneBatchNavigatorAttribute(TestCaseWithFactory):
114 """Test the series.milestone_batch_navigator attribute."""
115
116=== modified file 'lib/lp/registry/templates/distroseries-index.pt'
117--- lib/lp/registry/templates/distroseries-index.pt 2011-06-09 12:00:48 +0000
118+++ lib/lp/registry/templates/distroseries-index.pt 2011-06-13 09:27:22 +0000
119@@ -147,6 +147,9 @@
120 <li tal:condition="overview_menu/admin/enabled">
121 <a tal:replace="structure overview_menu/admin/fmt:link" />
122 </li>
123+ <li tal:condition="overview_menu/initseries/enabled|nothing">
124+ <a tal:replace="structure overview_menu/initseries/fmt:link" />
125+ </li>
126 <li tal:condition="overview_menu/subscribe/enabled|nothing">
127 <a tal:replace="structure overview_menu/subscribe/fmt:link" />
128 </li>