Adding, Editing, Moving and Deleting a Document =============================================== Does what the title says, really. Plus some assertions. >>> from Testing.testbrowser import Browser >>> browser = Browser() >>> browser.open('http://nohost/plone/login_form') First, we need to log in. >>> browser.getControl('Login Name').value = 'test_user_1_' >>> browser.getControl('Password').value = 'secret' >>> browser.getControl('Log in').click() We need to allow multiple languages to see the result of our changes: >>> self.portal.portal_languages.supported_langs = ['de', 'en'] Add Document ------------ What we do next is we - go to our home folder, - add a new page, - edit some values, - save the page, - and along the way we check that everything works as expected. Note that this is slightly different to how the testrecorder result looks like because we're navigating the page with a JavaScript- less browser. >>> browser.open('http://nohost/plone/Members/test_user_1_') >>> browser.getLink('Add new').click() >>> 'Add new item' in browser.contents True >>> browser.getControl('Page').click() >>> browser.getControl('Add').click() >>> #'Edit Page' in browser.contents # ouch, Plone has around 'Page' >>> browser.url 'http://nohost/plone/Members/test_user_1_/portal_factory/Document/.../edit?_authenticator=...' Now that the document has been added, we can edit it, but we pretend we don't know better and forget to type in a Title: >>> browser.getControl('Body Text').value = 'About test_user_1_' >>> browser.getControl('Save').click() >>> 'Title is required, please correct.' in browser.contents True Oops, let's fill that in quickly: >>> browser.getControl('Title').value = 'My Page' >>> browser.getControl('Save').click() >>> 'Changes saved.' in browser.contents True >>> 'My Page' in browser.contents True We edit the document a second time: >>> browser.getLink('Edit').click() >>> browser.getControl('Title').value = 'Ons Bier' >>> browser.getControl('Save').click() >>> 'Ons Bier' in browser.contents True We go now to the document absolute url: >>> browser.open('http://nohost/plone/Members/test_user_1_/my-page') Editing the document and clicking the Cancel button doesn't modify it: >>> browser.getLink('Edit').click() >>> browser.getControl('Title').value = 'Min sida' >>> browser.getControl('Cancel').click() >>> 'Min sida' not in browser.contents True We are now at the document absolute url: >>> browser.url 'http://nohost/plone/Members/test_user_1_/my-page' If we click the Edit link twice and then Cancel, we end at the canonical view of the document: >>> browser.getLink('Edit').click() >>> browser.getLink('Edit').click() >>> browser.getControl('Cancel').click() >>> browser.url 'http://nohost/plone/Members/test_user_1_/my-page/view' Editing Properties ------------------ We edit the document properties: >>> browser.getLink('Edit').click() >>> browser.url 'http://nohost/plone/Members/test_user_1_/my-page/edit' We make sure the language is English at the beginning: >>> browser.getControl(name='language').displayValue ['English'] And the content language is set to the default: >>> browser.headers.dict['content-language'] 'en' Now set the language to German: >>> browser.getControl(name='language').value = ['de'] >>> browser.getControl(name='language').displayValue ['German'] >>> browser.getControl('Save').click() >>> 'Changes saved.' in browser.contents True Make sure the content language was updated: >>> browser.headers.dict['content-language'] 'de' Cut and paste Document ---------------------- We'll first cut our Document. Then we'll create folder where we paste the Document into. >>> browser.getLink('Actions').click() First off, we'll cut our document: >>> browser.getControl('Ons Bier').click() >>> browser.getControl('Cut').click() Before doing the actual paste, we create a folder to paste into. >>> browser.getLink('Add new').click() >>> 'Add new item' in browser.contents True >>> browser.getControl('Folder').click() >>> browser.getControl('Add').click() >>> #'Edit Folder' in browser.contents # empty again True >>> browser.getControl('Title').value = 'My Folder' >>> browser.getControl('Save').click() >>> 'Changes saved.' in browser.contents True The Folder has been created, now we can paste the Document in our copy buffer here: >>> browser.getLink('Actions').click() >>> browser.getControl('Paste').click() >>> 'Item(s) pasted.' in browser.contents True >>> 'Ons Bier' in browser.contents True Delete Document --------------- Again, also deleting a Document without JavaScript involves visiting the ``folder_contents`` page and clicking a checkbox. >>> browser.open('http://nohost/plone/Members/test_user_1_/my-folder/') >>> browser.getLink('Actions').click() >>> browser.url 'http://nohost/plone/Members/test_user_1_/my-folder/folder_contents' This is how we click the checkbox. There's a nicer way to do this, I'm sure: >>> browser.getControl('Ons Bier').click() >>> browser.getControl('Delete').click() >>> 'Item(s) deleted.' in browser.contents True Paste deleted document ---------------------- When the document has been moved or deleted by someone else in the time between cut and paste, the page should say so and not give a stacktrace. (https://dev.plone.org/ticket/13577) >>> browser.open('http://nohost/plone/Members/test_user_1_') >>> browser.getLink('Add new').click() >>> browser.getControl('Page').click() >>> browser.getControl('Add').click() >>> browser.getControl('Body Text').value = '' >>> browser.getControl('Title').value = 'Op een dag' >>> browser.getControl('Save').click() >>> 'Op een dag' in browser.contents True We go now to the document absolute url: >>> browser.open('http://nohost/plone/Members/test_user_1_/op-een-dag') We'll first cut our Document. >>> browser.getLink('Actions').click() >>> browser.getControl('Op een dag').click() >>> browser.getControl('Cut').click() Login another user: >>> browser2 = Browser() >>> browser2.open('http://nohost/plone/login_form') >>> browser2.getControl('Login Name').value = 'test_user_1_' >>> browser2.getControl('Password').value = 'secret' >>> browser2.getControl('Log in').click() Other user removes document: (It's good enough to log in as the same user on a different Browser, the main thing is that Plone's session is unable to remove the cut content from its clipboard.) >>> browser2.open('http://nohost/plone/Members/test_user_1_/op-een-dag') >>> browser2.getLink('Actions').click() >>> browser2.getControl('Op een dag').click() >>> browser2.getControl('Delete').click() This should fail graciously, that is: - Not give a server error - Not give a traceback - Show a message that says what's wrong >>> browser.open('http://nohost/plone/Members/test_user_1_/my-folder') >>> browser.getLink('Actions').click() >>> browser.getControl('Paste').click() >>> browser.url 'http://nohost/plone/Members/test_user_1_/my-folder/folder_contents' >>> 'Traceback' not in browser.contents True >>> 'may have been moved or deleted after you copied' in browser.contents True