class TestMigrateDeletedWikis(OsfTestCase): # Whenever wiki is deleted, increment this variable to account for # fact that NodeLog.WIKI_DELETED is added to each time times_wiki_deleted = 0 def setUp(self): super(TestMigrateDeletedWikis, self).setUp() self.user = UserFactory() self.auth = Auth(user=self.user) self.project = ProjectFactory(creator=self.user) # Update home wiki (which can't be deleted) an a second wiki self.project.update_node_wiki('home', 'Hello world', self.auth) self.project.update_node_wiki('second', 'Hola mundo', self.auth) self.project.update_node_wiki('second', 'Hola mundo 2', self.auth) self.versions = self.project.wiki_pages_versions self.current = self.project.wiki_pages_current def test_get_targets(self): # delete second wiki to add something to targets self.project.delete_node_wiki('second', self.auth) TestMigrateDeletedWikis.times_wiki_deleted += 1 # Initial targets should include: user2, user3, user4, user5, user6 (5 in total) logs = get_targets() # assert len is equal to number of time a wiki is deleted in entire test script assert_equal(len(logs), TestMigrateDeletedWikis.times_wiki_deleted) def test_delete_wiki_node(self): self.project.delete_node_wiki('second', self.auth) TestMigrateDeletedWikis.times_wiki_deleted += 1 self.versions = self.project.wiki_pages_versions assert_true('second' not in self.versions) def test_migrate(self): logs = get_targets() migrate(logs, dry_run=False) self.project.reload() # Ensure that wiki pages that were targeted are not in versions for log in logs: node = log.node assert_true(node.title not in self.project.wiki_pages_versions) def test_migration_does_not_affect_home(self): logs = get_targets() migrate(logs, dry_run=False) self.project.reload() # Assert that 'home' has same versions as before self.versions = self.project.wiki_pages_versions assert_equal(len(self.versions['home']), 1) def test_deleted_wiki_versions_not_restored(self): self.project.delete_node_wiki('second', self.auth) TestMigrateDeletedWikis.times_wiki_deleted += 1 # create another wiki with name 'second' self.project.update_node_wiki('second', 'Hola mundo 3', self.auth) # Make sure old versions not restored assert_equal(len(self.versions['second']), 1)
class TestWikiRename(OsfTestCase): def setUp(self): super(TestWikiRename, self).setUp() self.project = ProjectFactory(is_public=True) api_key = ApiKeyFactory() self.project.creator.api_keys.append(api_key) self.project.creator.save() self.consolidate_auth = Auth(user=self.project.creator, api_key=api_key) self.auth = ('test', api_key._primary_key) self.project.update_node_wiki('home', 'Hello world', self.consolidate_auth) self.page_name = 'page2' self.project.update_node_wiki(self.page_name, 'content', self.consolidate_auth) self.project.save() self.page = self.project.get_wiki_page(self.page_name) self.wiki = self.project.get_wiki_page('home') self.url = self.project.api_url_for( 'project_wiki_rename', wname=self.page_name, ) def test_rename_wiki_page_valid(self, new_name=u'away'): self.app.put_json(self.url, {'value': new_name}, auth=self.auth) self.project.reload() old_wiki = self.project.get_wiki_page(self.page_name) assert_false(old_wiki) new_wiki = self.project.get_wiki_page(new_name) assert_true(new_wiki) assert_equal(new_wiki._primary_key, self.page._primary_key) assert_equal(new_wiki.content, self.page.content) assert_equal(new_wiki.version, self.page.version) def test_rename_wiki_page_invalid(self, new_name=u'invalid/name'): res = self.app.put_json( self.url, {'value': new_name}, auth=self.auth, expect_errors=True, ) assert_equal(http.BAD_REQUEST, res.status_code) assert_equal(res.json['message_short'], 'Invalid name') assert_equal(res.json['message_long'], 'Page name cannot contain forward slashes.') self.project.reload() old_wiki = self.project.get_wiki_page(self.page_name) assert_true(old_wiki) def test_rename_wiki_page_duplicate(self): self.project.update_node_wiki('away', 'Hello world', self.consolidate_auth) new_name = 'away' res = self.app.put_json( self.url, {'value': new_name}, auth=self.auth, expect_errors=True, ) assert_equal(res.status_code, 409) def test_rename_wiki_name_not_found(self): url = self.project.api_url_for('project_wiki_rename', wname='not_found_page_name') res = self.app.put_json(url, {'value': 'new name'}, auth=self.auth, expect_errors=True) assert_equal(res.status_code, 404) def test_cannot_rename_wiki_page_to_home(self): user = AuthUserFactory() # A fresh project where the 'home' wiki page has no content project = ProjectFactory(creator=user) project.update_node_wiki('Hello', 'hello world', Auth(user=user)) url = project.api_url_for('project_wiki_rename', wname=to_mongo_key('Hello')) res = self.app.put_json(url, {'value': 'home'}, auth=user.auth, expect_errors=True) assert_equal(res.status_code, 409) def test_rename_wiki_name_with_value_missing(self): # value is missing res = self.app.put_json(self.url, {}, auth=self.auth, expect_errors=True) assert_equal(res.status_code, 400) def test_rename_wiki_page_duplicate_different_casing(self): # attempt to rename 'page2' from setup to different case of 'away'. old_name = 'away' new_name = 'AwAy' self.project.update_node_wiki(old_name, 'Hello world', self.consolidate_auth) res = self.app.put_json(self.url, {'value': new_name}, auth=self.auth, expect_errors=True) assert_equal(res.status_code, 409) def test_rename_wiki_page_same_name_different_casing(self): old_name = 'away' new_name = 'AWAY' self.project.update_node_wiki(old_name, 'Hello world', self.consolidate_auth) url = self.project.api_url_for('project_wiki_rename', wname=old_name) res = self.app.put_json(url, {'value': new_name}, auth=self.auth, expect_errors=False) assert_equal(res.status_code, 200) def test_cannot_rename_home_page(self): url = self.project.api_url_for('project_wiki_rename', wname='home') res = self.app.put_json(url, {'value': 'homelol'}, auth=self.auth, expect_errors=True) assert_equal(res.status_code, 400) def test_can_rename_to_a_deleted_page(self): self.project.delete_node_wiki(self.page_name, self.consolidate_auth) self.project.save() # Creates a new page self.project.update_node_wiki('page3', 'moarcontent', self.consolidate_auth) self.project.save() # Renames the wiki to the deleted page url = self.project.api_url_for('project_wiki_rename', wname='page3') res = self.app.put_json(url, {'value': self.page_name}, auth=self.auth) assert_equal(res.status_code, 200) def test_rename_wiki_page_with_valid_html(self): # script is not an issue since data is sanitized via bleach or mako before display. self.test_rename_wiki_page_valid(new_name=u'<html>hello<html>') def test_rename_wiki_page_with_invalid_html(self): # script is not an issue since data is sanitized via bleach or mako before display. # with that said routes still do not accept forward slashes self.test_rename_wiki_page_invalid(new_name=u'<html>hello</html>') def test_rename_wiki_page_with_non_ascii_title(self): self.test_rename_wiki_page_valid(new_name=u'øˆ∆´ƒøßå√ß') def test_rename_wiki_page_with_valid_special_character_title(self): self.test_rename_wiki_page_valid(new_name=SPECIAL_CHARACTERS_ALLOWED) def test_rename_wiki_page_with_invalid_special_character_title(self): self.test_rename_wiki_page_invalid(new_name=SPECIAL_CHARACTERS_ALL)
class TestWikiRename(OsfTestCase): def setUp(self): super(TestWikiRename, self).setUp() self.project = ProjectFactory(is_public=True) api_key = ApiKeyFactory() self.project.creator.api_keys.append(api_key) self.project.creator.save() self.consolidate_auth = Auth(user=self.project.creator, api_key=api_key) self.auth = ('test', api_key._primary_key) self.project.update_node_wiki('home', 'Hello world', self.consolidate_auth) self.page_name = 'page2' self.project.update_node_wiki(self.page_name, 'content', self.consolidate_auth) self.project.save() self.page = self.project.get_wiki_page(self.page_name) self.wiki = self.project.get_wiki_page('home') self.url = self.project.api_url_for( 'project_wiki_rename', wname=self.page_name, ) def test_rename_wiki_page_valid(self, new_name=u'away'): self.app.put_json( self.url, {'value': new_name}, auth=self.auth ) self.project.reload() old_wiki = self.project.get_wiki_page(self.page_name) assert_false(old_wiki) new_wiki = self.project.get_wiki_page(new_name) assert_true(new_wiki) assert_equal(new_wiki._primary_key, self.page._primary_key) assert_equal(new_wiki.content, self.page.content) assert_equal(new_wiki.version, self.page.version) def test_rename_wiki_page_invalid(self, new_name=u'invalid/name'): res = self.app.put_json( self.url, {'value': new_name}, auth=self.auth, expect_errors=True, ) assert_equal(http.BAD_REQUEST, res.status_code) assert_equal(res.json['message_short'], 'Invalid name') assert_equal(res.json['message_long'], 'Page name cannot contain forward slashes.') self.project.reload() old_wiki = self.project.get_wiki_page(self.page_name) assert_true(old_wiki) def test_rename_wiki_page_duplicate(self): self.project.update_node_wiki('away', 'Hello world', self.consolidate_auth) new_name = 'away' res = self.app.put_json( self.url, {'value': new_name}, auth=self.auth, expect_errors=True, ) assert_equal(res.status_code, 409) def test_rename_wiki_name_not_found(self): url = self.project.api_url_for('project_wiki_rename', wname='not_found_page_name') res = self.app.put_json(url, {'value': 'new name'}, auth=self.auth, expect_errors=True) assert_equal(res.status_code, 404) def test_cannot_rename_wiki_page_to_home(self): user = AuthUserFactory() # A fresh project where the 'home' wiki page has no content project = ProjectFactory(creator=user) project.update_node_wiki('Hello', 'hello world', Auth(user=user)) url = project.api_url_for('project_wiki_rename', wname=to_mongo_key('Hello')) res = self.app.put_json(url, {'value': 'home'}, auth=user.auth, expect_errors=True) assert_equal(res.status_code, 409) def test_rename_wiki_name_with_value_missing(self): # value is missing res = self.app.put_json(self.url, {}, auth=self.auth, expect_errors=True) assert_equal(res.status_code, 400) def test_rename_wiki_page_duplicate_different_casing(self): # attempt to rename 'page2' from setup to different case of 'away'. old_name = 'away' new_name = 'AwAy' self.project.update_node_wiki(old_name, 'Hello world', self.consolidate_auth) res = self.app.put_json( self.url, {'value': new_name}, auth=self.auth, expect_errors=True ) assert_equal(res.status_code, 409) def test_rename_wiki_page_same_name_different_casing(self): old_name = 'away' new_name = 'AWAY' self.project.update_node_wiki(old_name, 'Hello world', self.consolidate_auth) url = self.project.api_url_for('project_wiki_rename', wname=old_name) res = self.app.put_json( url, {'value': new_name}, auth=self.auth, expect_errors=False ) assert_equal(res.status_code, 200) def test_cannot_rename_home_page(self): url = self.project.api_url_for('project_wiki_rename', wname='home') res = self.app.put_json(url, {'value': 'homelol'}, auth=self.auth, expect_errors=True) assert_equal(res.status_code, 400) def test_can_rename_to_a_deleted_page(self): self.project.delete_node_wiki(self.page_name, self.consolidate_auth) self.project.save() # Creates a new page self.project.update_node_wiki('page3' ,'moarcontent', self.consolidate_auth) self.project.save() # Renames the wiki to the deleted page url = self.project.api_url_for('project_wiki_rename', wname='page3') res = self.app.put_json(url, {'value': self.page_name}, auth=self.auth) assert_equal(res.status_code, 200) def test_rename_wiki_page_with_valid_html(self): # script is not an issue since data is sanitized via bleach or mako before display. self.test_rename_wiki_page_valid(new_name=u'<html>hello<html>') def test_rename_wiki_page_with_invalid_html(self): # script is not an issue since data is sanitized via bleach or mako before display. # with that said routes still do not accept forward slashes self.test_rename_wiki_page_invalid(new_name=u'<html>hello</html>') def test_rename_wiki_page_with_non_ascii_title(self): self.test_rename_wiki_page_valid(new_name=u'øˆ∆´ƒøßå√ß') def test_rename_wiki_page_with_valid_special_character_title(self): self.test_rename_wiki_page_valid(new_name=SPECIAL_CHARACTERS_ALLOWED) def test_rename_wiki_page_with_invalid_special_character_title(self): self.test_rename_wiki_page_invalid(new_name=SPECIAL_CHARACTERS_ALL)