def test_registration_clones_project_wiki_pages(self, mock_signal, project, user): project = factories.ProjectFactory(creator=user, is_public=True) wiki = NodeWikiFactory(node=project) current_wiki = NodeWikiFactory(node=project, version=2) registration = project.register_node(get_default_metaschema(), Auth(user), '', None) assert registration.wiki_private_uuids == {} registration_wiki_current = NodeWikiPage.load(registration.wiki_pages_current[current_wiki.page_name]) assert registration_wiki_current.node == registration assert registration_wiki_current._id != current_wiki._id registration_wiki_version = NodeWikiPage.load(registration.wiki_pages_versions[wiki.page_name][0]) assert registration_wiki_version.node == registration assert registration_wiki_version._id != wiki._id
def test_update_wiki_updates_comments_and_user_comments_viewed_timestamp( self): project = ProjectFactory(creator=self.user, is_public=True) wiki = NodeWikiFactory(node=project, page_name='test') comment = CommentFactory(node=project, target=Guid.load(wiki._id), user=UserFactory()) # user views comments -- sets user.comments_viewed_timestamp url = project.api_url_for('update_comments_timestamp') res = self.app.put_json(url, { 'page': 'wiki', 'rootId': wiki._id }, auth=self.user.auth) assert res.status_code == 200 self.user.reload() assert wiki._id in self.user.comments_viewed_timestamp # user updates the wiki project.update_node_wiki('test', 'Updating wiki', self.auth) comment.reload() self.user.reload() new_version_id = project.wiki_pages_current['test'] assert new_version_id in self.user.comments_viewed_timestamp assert wiki._id not in self.user.comments_viewed_timestamp assert comment.target.referent._id == new_version_id
def test_factory(self): wiki = NodeWikiFactory() assert wiki.page_name == 'home' assert wiki.version == 1 assert wiki.content == 'Some content' assert bool(wiki.user) assert bool(wiki.node)
def setUp(self): super(TestFilterNodeWikiList, self).setUp() self.user = AuthUserFactory() self.project = ProjectFactory(creator=self.user) self.base_url = '/{}nodes/{}/wikis/'.format(API_BASE, self.project._id) # TODO: Remove mocking when StoredFileNode is implemented with mock.patch('osf.models.AbstractNode.update_search'): self.wiki = NodeWikiFactory(node=self.project, user=self.user) self.date = self.wiki.date.strftime('%Y-%m-%dT%H:%M:%S.%f')
def test_public_node_non_contributor_commenter_can_delete_wiki_comment( self): project = ProjectFactory(is_public=True, comment_level='public') test_wiki = NodeWikiFactory(node=project, user=self.user) comment = CommentFactory(node=project, target=Guid.load(test_wiki._id), user=self.non_contributor) url = '/{}comments/{}/'.format(API_BASE, comment._id) res = self.app.delete_json_api(url, auth=self.non_contributor.auth) assert_equal(res.status_code, 204)
def test_public_node_non_contrib_commenter_can_delete_wiki_comment( self, app, user, non_contrib): project = ProjectFactory(is_public=True, comment_level='public') test_wiki = NodeWikiFactory(node=project, user=user) comment = CommentFactory(node=project, target=Guid.load(test_wiki._id), user=non_contrib) url = '/{}comments/{}/'.format(API_BASE, comment._id) res = app.delete_json_api(url, auth=non_contrib.auth) assert res.status_code == 204
def _set_up_public_project_with_comment(self): self.public_project = ProjectFactory.create(is_public=True, creator=self.user, comment_level='private') self.public_project.add_contributor(self.contributor, save=True) with mock.patch('osf.models.AbstractNode.update_search'): self.public_wiki = NodeWikiFactory(node=self.public_project, user=self.user) self.public_comment = CommentFactory(node=self.public_project, target=Guid.load( self.public_wiki._id), user=self.user) reply_target = Guid.load(self.public_comment._id) self.public_comment_reply = CommentFactory(node=self.public_project, target=reply_target, user=self.user) self.public_url = '/{}comments/{}/'.format(API_BASE, self.public_comment._id) self.public_comment_payload = self._set_up_payload( self.public_comment._id)
def test_old_wiki_versions_not_returned(self): self._set_up_public_project_with_wiki_page() # TODO: Remove mocking when StoredFileNode is implemented with mock.patch('osf.models.AbstractNode.update_search'): current_wiki = NodeWikiFactory(node=self.public_project, user=self.user) old_version_id = self.public_project.wiki_pages_versions[ current_wiki.page_name][-2] old_version = NodeWikiPage.load(old_version_id) url = '/{}wikis/{}/'.format(API_BASE, old_version._id) res = self.app.get(url, expect_errors=True) assert_equal(res.status_code, 404)
def test_public_node_non_contrib_commenter_can_update_wiki_comment( self, app, user, non_contrib, set_up_payload): project = ProjectFactory(is_public=True) test_wiki = NodeWikiFactory(node=project, user=user) comment = CommentFactory(node=project, target=Guid.load(test_wiki._id), user=non_contrib) url = '/{}comments/{}/'.format(API_BASE, comment._id) payload = set_up_payload(comment._id) res = app.put_json_api(url, payload, auth=non_contrib.auth) assert res.status_code == 200 assert payload['data']['attributes']['content'] == res.json['data'][ 'attributes']['content']
def _set_up_public_project_comment_reports(self, comment_level='public'): self.public_project = ProjectFactory.create(is_public=True, creator=self.user, comment_level=comment_level) self.public_project.add_contributor(contributor=self.contributor, save=True) with mock.patch('osf.models.AbstractNode.update_search'): self.public_wiki = NodeWikiFactory(node=self.public_project, user=self.user) self.public_comment = CommentFactory.build(node=self.public_project, target=Guid.load(self.public_wiki._id), user=self.contributor) self.public_comment.reports = self.public_comment.reports or {} self.public_comment.reports[self.user._id] = { 'category': 'spam', 'text': 'This is spam', 'date': timezone.now(), 'retracted': False, } self.public_comment.save() self.public_url = '/{}comments/{}/reports/'.format(API_BASE, self.public_comment._id)
def _set_up_registration_with_comment(self): self.registration = RegistrationFactory(creator=self.user, comment_level='private') with mock.patch('osf.models.AbstractNode.update_search'): self.registration_wiki = NodeWikiFactory(node=self.registration, user=self.user) self.registration_comment = CommentFactory( node=self.registration, target=Guid.load(self.registration_wiki._id), user=self.user) self.comment_url = '/{}comments/{}/'.format( API_BASE, self.registration_comment._id) reply_target = Guid.load(self.registration_comment._id) self.registration_comment_reply = CommentFactory( node=self.registration, target=reply_target, user=self.user)
def setUp(self): super(TestShortUrls, self).setUp() self.user = AuthUserFactory() self.auth = self.user.auth self.consolidate_auth = Auth(user=self.user) self.project = ProjectFactory(creator=self.user) # A non-project componenet self.component = NodeFactory(parent=self.project, category='hypothesis', creator=self.user) # Hack: Add some logs to component; should be unnecessary pending # improvements to factories from @rliebz self.component.set_privacy('public', auth=self.consolidate_auth) self.component.set_privacy('private', auth=self.consolidate_auth) self.wiki = NodeWikiFactory(user=self.user, node=self.component)
def test_public_node_non_contributor_commenter_can_update_wiki_comment( self): project = ProjectFactory(is_public=True) test_wiki = NodeWikiFactory(node=project, user=self.user) comment = CommentFactory(node=project, target=Guid.load(test_wiki._id), user=self.non_contributor) url = '/{}comments/{}/'.format(API_BASE, comment._id) payload = self._set_up_payload(comment._id) res = self.app.put_json_api(url, payload, auth=self.non_contributor.auth) assert_equal(res.status_code, 200) assert_equal(payload['data']['attributes']['content'], res.json['data']['attributes']['content'])
def test_wiki_content(self): project = ProjectFactory(creator=self.user) wiki_page = 'home' wiki_content = 'Kittens' NodeWikiFactory(user=self.user, node=project, content=wiki_content, page_name=wiki_page) res = self.app.get('/{0}/wiki/{1}/'.format( project._primary_key, wiki_page, ), auth=self.auth) assert_not_in('No wiki content', res) assert_in(wiki_content, res) assert_in('panelsUsed: ["view", "menu"]', res)
def test_wiki_content(self): project = ProjectFactory(creator=self.user) wiki_page = 'home' wiki_content = 'Kittens' NodeWikiFactory(user=self.user, node=project, content=wiki_content, page_name=wiki_page) res = self.app.get('/{0}/wiki/{1}/'.format( project._primary_key, wiki_page, ), auth=self.auth) assert_not_in( 'Add important information, links, or images here to describe your project.', res) assert_in(wiki_content, res) assert_in('panelsUsed: ["view", "menu"]', res)
def test_public_node_non_contributor_commenter_cannot_update_own_wiki_comment_if_comment_level_private( self): project = ProjectFactory(is_public=True) test_wiki = NodeWikiFactory(node=project, user=self.user) comment = CommentFactory(node=project, target=Guid.load(test_wiki._id), user=self.non_contributor) project.comment_level = 'private' project.save() url = '/{}comments/{}/'.format(API_BASE, comment._id) payload = self._set_up_payload(comment._id) res = self.app.put_json_api(url, payload, auth=self.non_contributor.auth, expect_errors=True) assert_equal(res.status_code, 403) assert_equal(res.json['errors'][0]['detail'], 'You do not have permission to perform this action.')
def test_public_node_non_contrib_commenter_cannot_update_own_wiki_comment_if_comment_level_private( self, app, user, non_contrib, set_up_payload): project = ProjectFactory(is_public=True) test_wiki = NodeWikiFactory(node=project, user=user) comment = CommentFactory(node=project, target=Guid.load(test_wiki._id), user=non_contrib) project.comment_level = 'private' project.save() url = '/{}comments/{}/'.format(API_BASE, comment._id) payload = set_up_payload(comment._id) res = app.put_json_api(url, payload, auth=non_contrib.auth, expect_errors=True) assert res.status_code == 403 assert res.json['errors'][0][ 'detail'] == exceptions.PermissionDenied.default_detail
def setUp(self): super(TestNodeWikiPage, self).setUp() self.user = UserFactory() self.project = ProjectFactory(creator=self.user) self.wiki = NodeWikiFactory(user=self.user, node=self.project)
def public_wiki(self, user, public_project): with mock.patch('osf.models.AbstractNode.update_search'): return NodeWikiFactory(node=public_project, user=user)
def add_page(node, user): with mock.patch('osf.models.AbstractNode.update_search'): return NodeWikiFactory(node=node, user=user)
def wiki(self, user, private_project): # TODO: Remove mocking when StoredFileNode is implemented with mock.patch('osf.models.AbstractNode.update_search'): return NodeWikiFactory(node=private_project, user=user)
def registration_wiki(self, registration, user): with mock.patch('osf.models.AbstractNode.update_search'): return NodeWikiFactory(node=registration, user=user)
def test_url_for_wiki_page_name_with_special_characters(self): wiki = NodeWikiFactory(user=self.user, node=self.project) wiki.page_name = 'Wiki!@#$%^&*()+' wiki.save() url = '{}wiki/{}/'.format(self.project.url, wiki.page_name) assert wiki.url == url
def test_url_for_wiki_page_name_with_spaces(self): wiki = NodeWikiFactory(user=self.user, node=self.project, page_name='Test Wiki') url = '{}wiki/{}/'.format(self.project.url, wiki.page_name) assert wiki.url == url
def _add_project_wiki_page(self, node, user): from addons.wiki.tests.factories import NodeWikiFactory # API will only return current wiki pages # Mock out update_search. TODO: Remove when StoredFileNode is implemented with mock.patch('osf.models.AbstractNode.update_search'): return NodeWikiFactory(node=node, user=user)
class TestWikiCommentDetailView(CommentDetailMixin, ApiTestCase): def _set_up_private_project_with_comment(self): self.private_project = ProjectFactory.create(is_public=False, creator=self.user, comment_level='private') self.private_project.add_contributor(self.contributor, save=True) with mock.patch('osf.models.AbstractNode.update_search'): self.wiki = NodeWikiFactory(node=self.private_project, user=self.user) self.comment = CommentFactory(node=self.private_project, target=Guid.load(self.wiki._id), user=self.user) self.private_url = '/{}comments/{}/'.format(API_BASE, self.comment._id) self.payload = self._set_up_payload(self.comment._id) def _set_up_public_project_with_comment(self): self.public_project = ProjectFactory.create(is_public=True, creator=self.user, comment_level='private') self.public_project.add_contributor(self.contributor, save=True) with mock.patch('osf.models.AbstractNode.update_search'): self.public_wiki = NodeWikiFactory(node=self.public_project, user=self.user) self.public_comment = CommentFactory(node=self.public_project, target=Guid.load( self.public_wiki._id), user=self.user) reply_target = Guid.load(self.public_comment._id) self.public_comment_reply = CommentFactory(node=self.public_project, target=reply_target, user=self.user) self.public_url = '/{}comments/{}/'.format(API_BASE, self.public_comment._id) self.public_comment_payload = self._set_up_payload( self.public_comment._id) def _set_up_registration_with_comment(self): self.registration = RegistrationFactory(creator=self.user, comment_level='private') with mock.patch('osf.models.AbstractNode.update_search'): self.registration_wiki = NodeWikiFactory(node=self.registration, user=self.user) self.registration_comment = CommentFactory( node=self.registration, target=Guid.load(self.registration_wiki._id), user=self.user) self.comment_url = '/{}comments/{}/'.format( API_BASE, self.registration_comment._id) reply_target = Guid.load(self.registration_comment._id) self.registration_comment_reply = CommentFactory( node=self.registration, target=reply_target, user=self.user) def test_wiki_comment_has_target_link_with_correct_type(self): self._set_up_public_project_with_comment() res = self.app.get(self.public_url) url = res.json['data']['relationships']['target']['links']['related'][ 'href'] expected_url = self.public_wiki.get_absolute_url() target_type = res.json['data']['relationships']['target']['links'][ 'related']['meta']['type'] expected_type = 'wiki' assert_equal(res.status_code, 200) assert_equal(url, expected_url) assert_equal(target_type, expected_type) def test_public_node_non_contributor_commenter_can_update_wiki_comment( self): project = ProjectFactory(is_public=True) test_wiki = NodeWikiFactory(node=project, user=self.user) comment = CommentFactory(node=project, target=Guid.load(test_wiki._id), user=self.non_contributor) url = '/{}comments/{}/'.format(API_BASE, comment._id) payload = self._set_up_payload(comment._id) res = self.app.put_json_api(url, payload, auth=self.non_contributor.auth) assert_equal(res.status_code, 200) assert_equal(payload['data']['attributes']['content'], res.json['data']['attributes']['content']) def test_public_node_non_contributor_commenter_cannot_update_own_wiki_comment_if_comment_level_private( self): project = ProjectFactory(is_public=True) test_wiki = NodeWikiFactory(node=project, user=self.user) comment = CommentFactory(node=project, target=Guid.load(test_wiki._id), user=self.non_contributor) project.comment_level = 'private' project.save() url = '/{}comments/{}/'.format(API_BASE, comment._id) payload = self._set_up_payload(comment._id) res = self.app.put_json_api(url, payload, auth=self.non_contributor.auth, expect_errors=True) assert_equal(res.status_code, 403) assert_equal(res.json['errors'][0]['detail'], 'You do not have permission to perform this action.') def test_public_node_non_contributor_commenter_can_delete_wiki_comment( self): project = ProjectFactory(is_public=True, comment_level='public') test_wiki = NodeWikiFactory(node=project, user=self.user) comment = CommentFactory(node=project, target=Guid.load(test_wiki._id), user=self.non_contributor) url = '/{}comments/{}/'.format(API_BASE, comment._id) res = self.app.delete_json_api(url, auth=self.non_contributor.auth) assert_equal(res.status_code, 204) def test_comment_detail_for_deleted_wiki_is_not_returned(self): self._set_up_private_project_with_comment() # Delete commented wiki page self.private_project.delete_node_wiki(self.wiki.page_name, core.Auth(self.user)) res = self.app.get(self.private_url, auth=self.user.auth, expect_errors=True) assert_equal(res.status_code, 404)