Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
 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')
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
 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)
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
 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']
Exemplo n.º 10
0
 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)
Exemplo n.º 11
0
 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)
Exemplo n.º 12
0
 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)
Exemplo n.º 13
0
 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'])
Exemplo n.º 14
0
 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)
Exemplo n.º 15
0
 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)
Exemplo n.º 16
0
 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.')
Exemplo n.º 17
0
 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
Exemplo n.º 18
0
 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)
Exemplo n.º 20
0
 def add_page(node, user):
     with mock.patch('osf.models.AbstractNode.update_search'):
         return NodeWikiFactory(node=node, user=user)
Exemplo n.º 21
0
 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)
Exemplo n.º 22
0
 def registration_wiki(self, registration, user):
     with mock.patch('osf.models.AbstractNode.update_search'):
         return NodeWikiFactory(node=registration, user=user)
Exemplo n.º 23
0
 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
Exemplo n.º 24
0
 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
Exemplo n.º 25
0
 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
Exemplo n.º 26
0
 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)
Exemplo n.º 27
0
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)