def test_multi_rename(self, root): from kotti.resources import Document from kotti.views.edit.actions import NodeActions self.setUp() root['child1'] = Document(title="Child 1") root['child2'] = Document(title="Child 2") request = DummyRequest() request.POST = MultiDict() id1 = str(root['child1'].id) id2 = str(root['child2'].id) request.POST.add('children-to-rename', id1) request.POST.add('children-to-rename', id2) request.POST.add(id1 + '-name', '') request.POST.add(id1 + '-title', 'Unhappy Child') request.POST.add(id2 + '-name', 'happy-child') request.POST.add(id2 + '-title', '') request.POST.add('rename_nodes', 'rename_nodes') NodeActions(root, request).rename_nodes() assert request.session.pop_flash('error') ==\ ['Name and title are required.'] request.POST.add(id1 + '-name', 'unhappy-child') request.POST.add(id1 + '-title', 'Unhappy Child') request.POST.add(id2 + '-name', 'happy-child') request.POST.add(id2 + '-title', 'Happy Child') request.POST.add('rename_nodes', 'rename_nodes') NodeActions(root, request).rename_nodes() assert request.session.pop_flash('success') ==\ ['Your changes have been saved.']
def test_multi_delete(self, root): from kotti.resources import Document from kotti.resources import File from kotti.views.edit.actions import NodeActions root['child1'] = Document(title="Child 1") root['child2'] = Document(title="Child 2") root['file1'] = File(title="File 1") request = DummyRequest() request.POST = MultiDict() id1 = str(root['child1'].id) id2 = str(root['child2'].id) id3 = str(root['file1'].id) request.POST.add('delete_nodes', 'delete_nodes') NodeActions(root, request).delete_nodes() assert request.session.pop_flash('info') ==\ ['Nothing was deleted.'] request.POST.add('children-to-delete', id1) request.POST.add('children-to-delete', id2) request.POST.add('children-to-delete', id3) NodeActions(root, request).delete_nodes() assert request.session.pop_flash('success') == \ ['${title} was deleted.', '${title} was deleted.', '${title} was deleted.']
def test_multi_rename(self, root): from kotti.resources import Document from kotti.views.edit.actions import NodeActions self.setUp() root["child1"] = Document(title="Child 1") root["child2"] = Document(title="Child 2") request = DummyRequest() request.POST = MultiDict() id1 = str(root["child1"].id) id2 = str(root["child2"].id) request.POST.add("children-to-rename", id1) request.POST.add("children-to-rename", id2) request.POST.add(id1 + "-name", "") request.POST.add(id1 + "-title", "Unhappy Child") request.POST.add(id2 + "-name", "happy-child") request.POST.add(id2 + "-title", "") request.POST.add("rename_nodes", "rename_nodes") NodeActions(root, request).rename_nodes() assert request.session.pop_flash("error") == ["Name and title are required."] request.POST.add(id1 + "-name", "unhappy-child") request.POST.add(id1 + "-title", "Unhappy Child") request.POST.add(id2 + "-name", "happy-child") request.POST.add(id2 + "-title", "Happy Child") request.POST.add("rename_nodes", "rename_nodes") NodeActions(root, request).rename_nodes() assert request.session.pop_flash("success") == ["Your changes have been saved."]
def test_multi_delete(self, root): from kotti.resources import Document from kotti.resources import File from kotti.views.edit.actions import NodeActions root["child1"] = Document(title="Child 1") root["child2"] = Document(title="Child 2") root["file1"] = File(title="File 1") request = DummyRequest() request.POST = MultiDict() id1 = str(root["child1"].id) id2 = str(root["child2"].id) id3 = str(root["file1"].id) request.POST.add("delete_nodes", "delete_nodes") NodeActions(root, request).delete_nodes() assert request.session.pop_flash("info") == ["Nothing was deleted."] request.POST.add("children-to-delete", id1) request.POST.add("children-to-delete", id2) request.POST.add("children-to-delete", id3) NodeActions(root, request).delete_nodes() assert request.session.pop_flash("success") == [ "${title} was deleted.", "${title} was deleted.", "${title} was deleted.", ]
def test_paste_without_edit_permission(self, config, root): from kotti.views.edit.actions import NodeActions request = DummyRequest() request.params['paste'] = 'on' config.testing_securitypolicy(permissive=False) # We need to have the 'edit' permission on the original object # to be able to cut and paste: request.session['kotti.paste'] = ([1], 'cut') view = NodeActions(root, request) with raises(Forbidden): view.paste_nodes() # We don't need 'edit' permission if we're just copying: request.session['kotti.paste'] = ([1], 'copy') response = NodeActions(root, request).paste_nodes() assert response.status == '302 Found'
def test_paste_without_edit_permission(self, config, root): from kotti.views.edit.actions import NodeActions request = DummyRequest() request.params["paste"] = "on" config.testing_securitypolicy(permissive=False) # We need to have the 'edit' permission on the original object # to be able to cut and paste: request.session["kotti.paste"] = ([1], "cut") view = NodeActions(root, request) with raises(Forbidden): view.paste_nodes() # We don't need 'edit' permission if we're just copying: request.session["kotti.paste"] = ([1], "copy") response = NodeActions(root, request).paste_nodes() assert response.status == "302 Found"
def test_paste_non_existing_node(self, root): from kotti.views.edit.actions import NodeActions request = DummyRequest() for index, action in enumerate(['copy', 'cut']): request.session['kotti.paste'] = ([1701], 'copy') response = NodeActions(root, request).paste_nodes() assert response.status == '302 Found' assert len(request.session['_f_error']) == index + 1
def test_show_hide(self, root): from kotti.resources import Document from kotti.views.edit.actions import NodeActions root['child1'] = Document(title="Child 1") assert root['child1'].in_navigation is True request = DummyRequest() request.session['kotti.selected-children'] = [str(root['child1'].id)] NodeActions(root, request).hide() assert request.session.pop_flash('success') ==\ ['${title} is no longer visible in the navigation.'] assert root['child1'].in_navigation is False request.session['kotti.selected-children'] = [str(root['child1'].id)] NodeActions(root, request).show() assert request.session.pop_flash('success') ==\ ['${title} is now visible in the navigation.'] assert root['child1'].in_navigation is True
def test_paste_non_existing_node(self, root): from kotti.views.edit.actions import NodeActions request = DummyRequest() for index, action in enumerate(["copy", "cut"]): request.session["kotti.paste"] = ([1701], "copy") response = NodeActions(root, request).paste_nodes() assert response.status == "302 Found" assert len(request.session["_f_error"]) == index + 1
def test_rename_to_empty_name(self, root): from kotti.resources import Document from kotti.views.edit.actions import NodeActions child = root["child"] = Document(title="Child") request = DummyRequest() request.params["rename"] = "on" request.params["name"] = "" request.params["title"] = "foo" NodeActions(child, request).rename_node() assert request.session.pop_flash("error") == ["Name and title are required."]
def test_paste_without_edit_permission(self, config, db_session): from kotti import DBSession from kotti.resources import Node from kotti.views.edit.actions import NodeActions root = DBSession.query(Node).get(1) request = DummyRequest() request.params['paste'] = u'on' config.testing_securitypolicy(permissive=False) # We need to have the 'edit' permission on the original object # to be able to cut and paste: request.session['kotti.paste'] = ([1], 'cut') view = NodeActions(root, request) with raises(Forbidden): view.paste_nodes() # We don't need 'edit' permission if we're just copying: request.session['kotti.paste'] = ([1], 'copy') response = NodeActions(root, request).paste_nodes() assert response.status == '302 Found'
def test_rename_to_empty_name(self, root): from kotti.resources import Document from kotti.views.edit.actions import NodeActions child = root['child'] = Document(title="Child") request = DummyRequest() request.params['rename'] = 'on' request.params['name'] = '' request.params['title'] = 'foo' NodeActions(child, request).rename_node() assert (request.session.pop_flash('error') == [ 'Name and title are required.' ])
def test_move_up(self, root): from kotti.resources import Document from kotti.views.edit.actions import NodeActions root["child1"] = Document(title="Child 1") root["child2"] = Document(title="Child 2") assert root["child1"].position < root["child2"].position request = DummyRequest() request.session["kotti.selected-children"] = [str(root["child2"].id)] NodeActions(root, request).up() assert request.session.pop_flash("success") == ["${title} was moved."] assert root["child1"].position > root["child2"].position
def test_move_up(self, root): from kotti.resources import Document from kotti.views.edit.actions import NodeActions root['child1'] = Document(title=u"Child 1") root['child2'] = Document(title=u"Child 2") assert root['child1'].position < root['child2'].position request = DummyRequest() request.session['kotti.selected-children'] = [str(root['child2'].id)] NodeActions(root, request).up() assert request.session.pop_flash('success') ==\ [u'${title} was moved.'] assert root['child1'].position > root['child2'].position
def test_multi_delete(self): from kotti import DBSession from kotti.resources import Node from kotti.resources import Document from kotti.views.edit.actions import NodeActions root = DBSession.query(Node).get(1) root['child1'] = Document(title=u"Child 1") root['child2'] = Document(title=u"Child 2") request = DummyRequest() request.POST = MultiDict() id1 = str(root['child1'].id) id2 = str(root['child2'].id) request.POST.add('delete_nodes', u'delete_nodes') NodeActions(root, request).delete_nodes() assert request.session.pop_flash('info') ==\ [u'Nothing deleted.'] request.POST.add('children-to-delete', id1) request.POST.add('children-to-delete', id2) NodeActions(root, request).delete_nodes() assert request.session.pop_flash('success') ==\ [u'${title} deleted.', u'${title} deleted.']
def test_cut_and_paste_content_copy_tags(self, root): from kotti.resources import Tag, TagsToContents, Content from kotti.views.edit.actions import NodeActions root[u'folder_1'] = Content() root[u'content_1'] = Content() root[u'content_1'].tags = [u'my tag'] assert Tag.query.count() == 1 assert TagsToContents.query.count() == 1 request = DummyRequest() request.params['paste'] = u'on' request.session['kotti.paste'] = ([root[u'content_1'].id], 'cut') NodeActions(root[u'folder_1'], request).paste_nodes() assert root[u'folder_1'][u'content_1'].tags == [u'my tag'] assert Tag.query.count() == 1 assert TagsToContents.query.count() == 1
def test_cut_and_paste_content_copy_tags(self, root): from kotti.resources import Tag, TagsToContents, Content from kotti.views.edit.actions import NodeActions root["folder_1"] = Content() root["content_1"] = Content() root["content_1"].tags = ["my tag"] assert Tag.query.count() == 1 assert TagsToContents.query.count() == 1 request = DummyRequest() request.params["paste"] = "on" request.session["kotti.paste"] = ([root["content_1"].id], "cut") NodeActions(root["folder_1"], request).paste_nodes() assert root["folder_1"]["content_1"].tags == ["my tag"] assert Tag.query.count() == 1 assert TagsToContents.query.count() == 1
def test_delete_content_delete_tags_and_assignments(self, root, events): from kotti.resources import Tag, TagsToContents, Content from kotti.views.edit.actions import NodeActions root["folder_1"] = Content() root["folder_1"].tags = ["first tag"] root["folder_1"]["content_1"] = Content() root["folder_1"]["content_1"].tags = ["second tag"] root["folder_1"]["content_2"] = Content() root["folder_1"]["content_2"].tags = ["third tag"] assert Tag.query.count() == 3 assert TagsToContents.query.count() == 3 request = DummyRequest() request.POST["delete"] = "delete" NodeActions(root["folder_1"], request).delete_node() assert Tag.query.count() == 0 assert TagsToContents.query.count() == 0
def test_delete_content_delete_tags_and_assignments(self, root, events): from kotti.resources import Tag, TagsToContents, Content from kotti.views.edit.actions import NodeActions root[u'folder_1'] = Content() root[u'folder_1'].tags = [u'first tag'] root[u'folder_1'][u'content_1'] = Content() root[u'folder_1'][u'content_1'].tags = [u'second tag'] root[u'folder_1'][u'content_2'] = Content() root[u'folder_1'][u'content_2'].tags = [u'third tag'] assert Tag.query.count() == 3 assert TagsToContents.query.count() == 3 request = DummyRequest() request.POST['delete'] = 'delete' NodeActions(root[u'folder_1'], request).delete_node() assert Tag.query.count() == 0 assert TagsToContents.query.count() == 0
def test_move_down(self, db_session): from kotti.resources import get_root from kotti.resources import Document from kotti.views.edit.actions import NodeActions root = get_root() root['child1'] = Document(title=u"Child 1") root['child2'] = Document(title=u"Child 2") root['child3'] = Document(title=u"Child 3") assert root['child1'].position < root['child3'].position assert root['child2'].position < root['child3'].position request = DummyRequest() ids = [str(root['child1'].id), str(root['child2'].id)] request.session['kotti.selected-children'] = ids NodeActions(root, request).down() assert request.session.pop_flash('success') ==\ [u'${title} moved.', u'${title} moved.'] assert root['child1'].position > root['child3'].position assert root['child2'].position > root['child3'].position
def test_copy_and_paste_content_copy_tags(self, db_session, events): from kotti import DBSession from kotti.resources import get_root from kotti.resources import Tag, TagsToContents, Content from kotti.views.edit.actions import NodeActions ses = DBSession root = get_root() root[u'folder_1'] = Content() root[u'content_1'] = Content() root[u'content_1'].tags = [u'my tag'] assert ses.query(Tag).count() == 1 assert ses.query(TagsToContents).count() == 1 request = DummyRequest() request.params['paste'] = u'on' request.session['kotti.paste'] = ([root[u'content_1'].id], 'copy') NodeActions(root[u'folder_1'], request).paste_nodes() assert root[u'content_1'].tags == [u'my tag'] assert root[u'folder_1'][u'content_1'].tags == [u'my tag'] assert ses.query(Tag).count() == 1 assert ses.query(TagsToContents).count() == 2
def test_delete_content_delete_tags_and_assignments(self, db_session, events): from kotti import DBSession from kotti.resources import get_root from kotti.resources import Tag, TagsToContents, Content from kotti.views.edit.actions import NodeActions ses = DBSession root = get_root() root[u'folder_1'] = Content() root[u'folder_1'].tags = [u'first tag'] root[u'folder_1'][u'content_1'] = Content() root[u'folder_1'][u'content_1'].tags = [u'second tag'] root[u'folder_1'][u'content_2'] = Content() root[u'folder_1'][u'content_2'].tags = [u'third tag'] assert ses.query(Tag).count() == 3 assert ses.query(TagsToContents).count() == 3 request = DummyRequest() request.POST['delete'] = 'on' NodeActions(root[u'folder_1'], request).delete_node() assert ses.query(Tag).count() == 0 assert ses.query(TagsToContents).count() == 0