allura
リビジョン | 55898e56bde064bfd8a010ff11d3fb3c34eaf84b (tree) |
---|---|
日時 | 2012-03-22 06:07:36 |
作者 | Yaroslav Luzin <jardev@gmai...> |
コミッター | Yaroslav Luzin |
Merge branch 't31_testnbprivate'
@@ -2,11 +2,11 @@ from . import base | ||
2 | 2 | |
3 | 3 | from bson import ObjectId |
4 | 4 | from allura import model as M |
5 | -from allura.lib import plugin | |
5 | +from allura.lib import plugin, exceptions | |
6 | 6 | from ming.orm import session |
7 | 7 | |
8 | 8 | # Example usage: |
9 | -# paster set-neighborhood-private development.ini 4f50c898610b270c92000286 1 | |
9 | +# paster set-neighborhood-private development.ini <neighborhood_id> 1 | |
10 | 10 | class SetNeighborhoodPrivateCommand(base.Command): |
11 | 11 | min_args=3 |
12 | 12 | max_args=3 |
@@ -22,6 +22,14 @@ class SetNeighborhoodPrivateCommand(base.Command): | ||
22 | 22 | private_val = True |
23 | 23 | else: |
24 | 24 | private_val = False |
25 | - n = M.Neighborhood.query.get(_id = ObjectId(n_id)) | |
26 | - n.allow_private = private_val | |
27 | - session(M.Neighborhood).flush() | |
25 | + | |
26 | + n = M.Neighborhood.query.get(name=n_id) | |
27 | + if not n: | |
28 | + n = M.Neighborhood.query.get(_id=ObjectId(n_id)) | |
29 | + | |
30 | + if not n: | |
31 | + raise exceptions.NoSuchNeighborhoodError("The neighborhood %s "\ | |
32 | + "could not be found in the database" % n_id) | |
33 | + else: | |
34 | + n.allow_private = private_val | |
35 | + session(M.Neighborhood).flush() |
@@ -152,8 +152,6 @@ class NeighborhoodController(object): | ||
152 | 152 | def register(self, project_unixname=None, project_description=None, project_name=None, neighborhood=None, |
153 | 153 | private_project=None, tools=None, **kw): |
154 | 154 | require_access(self.neighborhood, 'register') |
155 | - if self.neighborhood.allow_private == False: | |
156 | - private_project = False | |
157 | 155 | if private_project: |
158 | 156 | require_access(self.neighborhood, 'admin') |
159 | 157 | neighborhood = M.Neighborhood.query.get(name=neighborhood) |
@@ -337,6 +337,10 @@ class ProjectRegistrationProvider(object): | ||
337 | 337 | ''' |
338 | 338 | from allura import model as M |
339 | 339 | |
340 | + # Check for private project rights | |
341 | + if neighborhood.allow_private == False and private_project: | |
342 | + raise ValueError("You can't create private projects for %s neighborhood" % neighborhood.name) | |
343 | + | |
340 | 344 | # Check for project limit creation |
341 | 345 | pq = M.Project.query.find(dict( |
342 | 346 | neighborhood_id=neighborhood._id, |
@@ -1,6 +1,7 @@ | ||
1 | 1 | import json |
2 | 2 | import os |
3 | 3 | from cStringIO import StringIO |
4 | +from nose.tools import assert_raises | |
4 | 5 | |
5 | 6 | import Image |
6 | 7 | from tg import config |
@@ -117,9 +118,9 @@ class TestNeighborhood(TestController): | ||
117 | 118 | assert 'Title bar, foreground' in r |
118 | 119 | |
119 | 120 | r = self.app.post('/adobe/_admin/update', |
120 | - params={'name': 'Adobe', | |
121 | - 'css': '', | |
122 | - 'homepage': '', | |
121 | + params={'name': 'Adobe', | |
122 | + 'css': '', | |
123 | + 'homepage': '', | |
123 | 124 | 'css-projecttitlefont': 'arial,sans-serif', |
124 | 125 | 'css-projecttitlecolor': 'green', |
125 | 126 | 'css-barontop': '#555555', |
@@ -273,7 +274,8 @@ class TestNeighborhood(TestController): | ||
273 | 274 | r = self.app.get('/p/add_project', extra_environ=dict(username='root')) |
274 | 275 | assert 'private_project' not in r |
275 | 276 | |
276 | - self.app.post( | |
277 | + assert_raises(ValueError, | |
278 | + self.app.post, | |
277 | 279 | '/p/register', |
278 | 280 | params=dict( |
279 | 281 | project_unixname='myprivate1', |
@@ -285,7 +287,7 @@ class TestNeighborhood(TestController): | ||
285 | 287 | extra_environ=dict(username='root')) |
286 | 288 | |
287 | 289 | proj = M.Project.query.get(shortname='myprivate1', neighborhood_id=neighborhood._id) |
288 | - assert not proj.private | |
290 | + assert proj is None | |
289 | 291 | |
290 | 292 | # Turn on private |
291 | 293 | neighborhood = M.Neighborhood.query.get(name='Projects') |
@@ -4,7 +4,7 @@ from datadiff.tools import assert_equal | ||
4 | 4 | import pylons |
5 | 5 | |
6 | 6 | from alluratest.controller import setup_basic_test, setup_global_objects |
7 | -from allura.command import script, set_neighborhood_level | |
7 | +from allura.command import script, set_neighborhood_level, set_neighborhood_private | |
8 | 8 | from allura import model as M |
9 | 9 | |
10 | 10 |
@@ -34,3 +34,19 @@ def test_set_neighborhood_level(): | ||
34 | 34 | |
35 | 35 | neighborhood = M.Neighborhood.query.get(_id=n_id) |
36 | 36 | assert neighborhood.level == 'gold' |
37 | + | |
38 | +def test_set_neighborhood_private(): | |
39 | + neighborhood = M.Neighborhood.query.find().first() | |
40 | + n_id = neighborhood._id | |
41 | + | |
42 | + cmd = set_neighborhood_private.SetNeighborhoodPrivateCommand('setnbprivate') | |
43 | + cmd.run([test_config, str(n_id), '1']) | |
44 | + cmd.command() | |
45 | + neighborhood = M.Neighborhood.query.get(_id=n_id) | |
46 | + assert neighborhood.allow_private | |
47 | + | |
48 | + cmd = set_neighborhood_private.SetNeighborhoodPrivateCommand('setnbprivate') | |
49 | + cmd.run([test_config, str(n_id), '0']) | |
50 | + cmd.command() | |
51 | + neighborhood = M.Neighborhood.query.get(_id=n_id) | |
52 | + assert not neighborhood.allow_private |