You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by di...@apache.org on 2022/09/30 01:17:51 UTC
[allura] 02/05: fixup! fixup! fixup! fixup! [#8455] remove @with_setup
This is an automated email from the ASF dual-hosted git repository.
dill0wn pushed a commit to branch dw/8455-part2
in repository https://gitbox.apache.org/repos/asf/allura.git
commit 98462a4435f0f58717a1e42eadce2079403d9e94
Author: Dillon Walls <di...@slashdotmedia.com>
AuthorDate: Fri Sep 30 00:36:09 2022 +0000
fixup! fixup! fixup! fixup! [#8455] remove @with_setup
---
Allura/allura/tests/model/test_project.py | 325 +++++++++++++++---------------
1 file changed, 157 insertions(+), 168 deletions(-)
diff --git a/Allura/allura/tests/model/test_project.py b/Allura/allura/tests/model/test_project.py
index 524754bc3..6a1d44a8a 100644
--- a/Allura/allura/tests/model/test_project.py
+++ b/Allura/allura/tests/model/test_project.py
@@ -31,172 +31,161 @@ from allura.lib.exceptions import ToolError, Invalid
from mock import MagicMock, patch
-def setup_method():
- setup_basic_test()
- setup_with_tools()
-
-
-@td.with_wiki
-def setup_with_tools():
- setup_global_objects()
-
-
-@with_setup(setup_method)
-def test_project():
- assert type(c.project.sidebar_menu()) == list
- assert c.project.script_name in c.project.url()
- old_proj = c.project
- h.set_context('test/sub1', neighborhood='Projects')
- assert type(c.project.sidebar_menu()) == list
- assert type(c.project.sitemap()) == list
- assert c.project.sitemap()[1].label == 'Admin'
- assert old_proj in list(c.project.parent_iter())
- h.set_context('test', 'wiki', neighborhood='Projects')
- adobe_nbhd = M.Neighborhood.query.get(name='Adobe')
- p = M.Project.query.get(
- shortname='adobe-1', neighborhood_id=adobe_nbhd._id)
- # assert 'http' in p.url() # We moved adobe into /adobe/, not
- # http://adobe....
- assert p.script_name in p.url()
- assert c.project.shortname == 'test'
- assert '<p>' in c.project.description_html
- c.project.uninstall_app('hello-test-mount-point')
- ThreadLocalORMSession.flush_all()
-
- c.project.install_app('Wiki', 'hello-test-mount-point')
- c.project.support_page = 'hello-test-mount-point'
- assert c.project.app_config('wiki').tool_name == 'wiki'
- ThreadLocalORMSession.flush_all()
- with td.raises(ToolError):
- # already installed
+class TestProjectModel:
+
+ def setup_method(self):
+ setup_basic_test()
+ self.setup_with_tools()
+
+ @td.with_wiki
+ def setup_with_tools(self):
+ setup_global_objects()
+
+ def test_project(self):
+ assert type(c.project.sidebar_menu()) == list
+ assert c.project.script_name in c.project.url()
+ old_proj = c.project
+ h.set_context('test/sub1', neighborhood='Projects')
+ assert type(c.project.sidebar_menu()) == list
+ assert type(c.project.sitemap()) == list
+ assert c.project.sitemap()[1].label == 'Admin'
+ assert old_proj in list(c.project.parent_iter())
+ h.set_context('test', 'wiki', neighborhood='Projects')
+ adobe_nbhd = M.Neighborhood.query.get(name='Adobe')
+ p = M.Project.query.get(
+ shortname='adobe-1', neighborhood_id=adobe_nbhd._id)
+ # assert 'http' in p.url() # We moved adobe into /adobe/, not
+ # http://adobe....
+ assert p.script_name in p.url()
+ assert c.project.shortname == 'test'
+ assert '<p>' in c.project.description_html
+ c.project.uninstall_app('hello-test-mount-point')
+ ThreadLocalORMSession.flush_all()
+
c.project.install_app('Wiki', 'hello-test-mount-point')
- ThreadLocalORMSession.flush_all()
- c.project.uninstall_app('hello-test-mount-point')
- ThreadLocalORMSession.flush_all()
- with td.raises(ToolError):
- # mount point reserved
- c.project.install_app('Wiki', 'feed')
- with td.raises(ToolError):
- # mount point too long
- c.project.install_app('Wiki', 'a' * 64)
- with td.raises(ToolError):
- # mount point must begin with letter
- c.project.install_app('Wiki', '1')
- # single letter mount points are allowed
- c.project.install_app('Wiki', 'a')
- # Make sure the project support page is reset if the tool it was pointing
- # to is uninstalled.
- assert c.project.support_page == ''
- app_config = c.project.app_config('hello')
- app_inst = c.project.app_instance(app_config)
- app_inst = c.project.app_instance('hello')
- app_inst = c.project.app_instance('hello2123')
- c.project.breadcrumbs()
- c.app.config.breadcrumbs()
-
-
-@with_setup(setup_method)
-def test_install_app_validates_options():
- from forgetracker.tracker_main import ForgeTrackerApp
- name = 'TicketMonitoringEmail'
- opt = [o for o in ForgeTrackerApp.config_options if o.name == name][0]
- opt.validator = fev.Email(not_empty=True)
- with patch.object(ForgeTrackerApp, 'config_on_install', new=[opt.name]):
- for v in [None, '', 'bad@email']:
- with td.raises(ToolError):
- c.project.install_app('Tickets', 'test-tickets', **{name: v})
- assert c.project.app_instance('test-tickets') == None
- c.project.install_app('Tickets', 'test-tickets', **{name: 'e@e.com'})
- app = c.project.app_instance('test-tickets')
- assert app.config.options[name] == 'e@e.com'
-
-
-def test_project_index():
- project, idx = c.project, c.project.index()
- assert 'id' in idx
- assert idx['id'] == project.index_id()
- assert 'title' in idx
- assert 'type_s' in idx
- assert 'deleted_b' in idx
- assert 'private_b' in idx
- assert 'neighborhood_id_s' in idx
- assert 'short_description_t' in idx
- assert 'url_s' in idx
-
-
-def test_subproject():
- project = M.Project.query.get(shortname='test')
- with td.raises(ToolError):
- with patch('allura.lib.plugin.ProjectRegistrationProvider') as Provider:
- Provider.get().shortname_validator.to_python.side_effect = Invalid(
- 'name', 'value', {})
- # name doesn't validate
- sp = project.new_subproject('test-proj-nose')
- sp = project.new_subproject('test-proj-nose')
- spp = sp.new_subproject('spp')
- ThreadLocalORMSession.flush_all()
- sp.delete()
- ThreadLocalORMSession.flush_all()
-
-
-@td.with_wiki
-def test_anchored_tools():
- c.project.neighborhood.anchored_tools = 'wiki:Wiki, tickets:Ticket'
- c.project.install_app = MagicMock()
- assert c.project.sitemap()[0].label == 'Wiki'
- assert c.project.install_app.call_args[0][0] == 'tickets'
- assert c.project.ordered_mounts()[0]['ac'].tool_name == 'wiki'
-
-
-def test_set_ordinal_to_admin_tool():
- with h.push_config(c,
- user=M.User.by_username('test-admin'),
- project=M.Project.query.get(shortname='test')):
- sm = c.project.sitemap()
- assert sm[-1].tool_name == 'admin'
-
-
-@with_setup(setup_method)
-def test_users_and_roles():
- p = M.Project.query.get(shortname='test')
- sub = p.direct_subprojects[0]
- u = M.User.by_username('test-admin')
- assert p.users_with_role('Admin') == [u]
- assert p.users_with_role('Admin') == sub.users_with_role('Admin')
- assert p.users_with_role('Admin') == p.admins()
-
- user = p.admins()[0]
- user.disabled = True
- ThreadLocalORMSession.flush_all()
- assert p.users_with_role('Admin') == []
- assert p.users_with_role('Admin') == p.admins()
-
-
-@with_setup(setup_method)
-def test_project_disabled_users():
- p = M.Project.query.get(shortname='test')
- users = p.users()
- assert users[0].username == 'test-admin'
- user = M.User.by_username('test-admin')
- user.disabled = True
- ThreadLocalORMSession.flush_all()
- users = p.users()
- assert users == []
-
-def test_screenshot_unicode_serialization():
- p = M.Project.query.get(shortname='test')
- screenshot_unicode = M.ProjectFile(project_id=p._id, category='screenshot', caption="ConSelección", filename='ConSelección.jpg')
- screenshot_ascii = M.ProjectFile(project_id=p._id, category='screenshot', caption='test-screenshot', filename='test_file.jpg')
- ThreadLocalORMSession.flush_all()
-
- serialized = p.__json__()
- screenshots = sorted(serialized['screenshots'], key=lambda k: k['caption'])
-
- assert len(screenshots) == 2
- assert screenshots[0]['url'] == 'http://localhost/p/test/screenshot/ConSelecci%C3%B3n.jpg'
- assert screenshots[0]['caption'] == "ConSelección"
- assert screenshots[0]['thumbnail_url'] == 'http://localhost/p/test/screenshot/ConSelecci%C3%B3n.jpg/thumb'
-
- assert screenshots[1]['url'] == 'http://localhost/p/test/screenshot/test_file.jpg'
- assert screenshots[1]['caption'] == 'test-screenshot'
- assert screenshots[1]['thumbnail_url'] == 'http://localhost/p/test/screenshot/test_file.jpg/thumb'
+ c.project.support_page = 'hello-test-mount-point'
+ assert c.project.app_config('wiki').tool_name == 'wiki'
+ ThreadLocalORMSession.flush_all()
+ with td.raises(ToolError):
+ # already installed
+ c.project.install_app('Wiki', 'hello-test-mount-point')
+ ThreadLocalORMSession.flush_all()
+ c.project.uninstall_app('hello-test-mount-point')
+ ThreadLocalORMSession.flush_all()
+ with td.raises(ToolError):
+ # mount point reserved
+ c.project.install_app('Wiki', 'feed')
+ with td.raises(ToolError):
+ # mount point too long
+ c.project.install_app('Wiki', 'a' * 64)
+ with td.raises(ToolError):
+ # mount point must begin with letter
+ c.project.install_app('Wiki', '1')
+ # single letter mount points are allowed
+ c.project.install_app('Wiki', 'a')
+ # Make sure the project support page is reset if the tool it was pointing
+ # to is uninstalled.
+ assert c.project.support_page == ''
+ app_config = c.project.app_config('hello')
+ app_inst = c.project.app_instance(app_config)
+ app_inst = c.project.app_instance('hello')
+ app_inst = c.project.app_instance('hello2123')
+ c.project.breadcrumbs()
+ c.app.config.breadcrumbs()
+
+ def test_install_app_validates_options(self):
+ from forgetracker.tracker_main import ForgeTrackerApp
+ name = 'TicketMonitoringEmail'
+ opt = [o for o in ForgeTrackerApp.config_options if o.name == name][0]
+ opt.validator = fev.Email(not_empty=True)
+ with patch.object(ForgeTrackerApp, 'config_on_install', new=[opt.name]):
+ for v in [None, '', 'bad@email']:
+ with td.raises(ToolError):
+ c.project.install_app('Tickets', 'test-tickets', **{name: v})
+ assert c.project.app_instance('test-tickets') == None
+ c.project.install_app('Tickets', 'test-tickets', **{name: 'e@e.com'})
+ app = c.project.app_instance('test-tickets')
+ assert app.config.options[name] == 'e@e.com'
+
+ def test_project_index(self):
+ project, idx = c.project, c.project.index()
+ assert 'id' in idx
+ assert idx['id'] == project.index_id()
+ assert 'title' in idx
+ assert 'type_s' in idx
+ assert 'deleted_b' in idx
+ assert 'private_b' in idx
+ assert 'neighborhood_id_s' in idx
+ assert 'short_description_t' in idx
+ assert 'url_s' in idx
+
+ def test_subproject(self):
+ project = M.Project.query.get(shortname='test')
+ with td.raises(ToolError):
+ with patch('allura.lib.plugin.ProjectRegistrationProvider') as Provider:
+ Provider.get().shortname_validator.to_python.side_effect = Invalid(
+ 'name', 'value', {})
+ # name doesn't validate
+ sp = project.new_subproject('test-proj-nose')
+ sp = project.new_subproject('test-proj-nose')
+ spp = sp.new_subproject('spp')
+ ThreadLocalORMSession.flush_all()
+ sp.delete()
+ ThreadLocalORMSession.flush_all()
+
+ @td.with_wiki
+ def test_anchored_tools(self):
+ c.project.neighborhood.anchored_tools = 'wiki:Wiki, tickets:Ticket'
+ c.project.install_app = MagicMock()
+ assert c.project.sitemap()[0].label == 'Wiki'
+ assert c.project.install_app.call_args[0][0] == 'tickets'
+ assert c.project.ordered_mounts()[0]['ac'].tool_name == 'wiki'
+
+ def test_set_ordinal_to_admin_tool(self):
+ with h.push_config(c,
+ user=M.User.by_username('test-admin'),
+ project=M.Project.query.get(shortname='test')):
+ sm = c.project.sitemap()
+ assert sm[-1].tool_name == 'admin'
+
+ def test_users_and_roles(self):
+ p = M.Project.query.get(shortname='test')
+ sub = p.direct_subprojects[0]
+ u = M.User.by_username('test-admin')
+ assert p.users_with_role('Admin') == [u]
+ assert p.users_with_role('Admin') == sub.users_with_role('Admin')
+ assert p.users_with_role('Admin') == p.admins()
+
+ user = p.admins()[0]
+ user.disabled = True
+ ThreadLocalORMSession.flush_all()
+ assert p.users_with_role('Admin') == []
+ assert p.users_with_role('Admin') == p.admins()
+
+ def test_project_disabled_users(self):
+ p = M.Project.query.get(shortname='test')
+ users = p.users()
+ assert users[0].username == 'test-admin'
+ user = M.User.by_username('test-admin')
+ user.disabled = True
+ ThreadLocalORMSession.flush_all()
+ users = p.users()
+ assert users == []
+
+ def test_screenshot_unicode_serialization(self):
+ p = M.Project.query.get(shortname='test')
+ screenshot_unicode = M.ProjectFile(project_id=p._id, category='screenshot', caption="ConSelección", filename='ConSelección.jpg')
+ screenshot_ascii = M.ProjectFile(project_id=p._id, category='screenshot', caption='test-screenshot', filename='test_file.jpg')
+ ThreadLocalORMSession.flush_all()
+
+ serialized = p.__json__()
+ screenshots = sorted(serialized['screenshots'], key=lambda k: k['caption'])
+
+ assert len(screenshots) == 2
+ assert screenshots[0]['url'] == 'http://localhost/p/test/screenshot/ConSelecci%C3%B3n.jpg'
+ assert screenshots[0]['caption'] == "ConSelección"
+ assert screenshots[0]['thumbnail_url'] == 'http://localhost/p/test/screenshot/ConSelecci%C3%B3n.jpg/thumb'
+
+ assert screenshots[1]['url'] == 'http://localhost/p/test/screenshot/test_file.jpg'
+ assert screenshots[1]['caption'] == 'test-screenshot'
+ assert screenshots[1]['thumbnail_url'] == 'http://localhost/p/test/screenshot/test_file.jpg/thumb'