示例#1
0
 def set_up_project_with_wiki_page(self):
     self.project_with_wikis = ProjectFactory(creator=self.user,
                                              is_public=True)
     self.wiki = NodeWikiFactory(node=self.project_with_wikis)
     self.current_wiki = NodeWikiFactory(node=self.project_with_wikis,
                                         version=2)
     return self.project_with_wikis
示例#2
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)
     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)
     self.public_url = '/{}comments/{}/'.format(API_BASE, self.public_comment._id)
     self.public_comment_payload = self._set_up_payload(self.public_comment._id)
示例#3
0
 def test_forked_project_wiki_pages_created_post_fork_do_not_get_cloned(self):
     fork_creator = AuthUserFactory()
     fork = self.project.fork_node(auth=Auth(fork_creator))
     wiki = NodeWikiFactory(node=fork)
     current_wiki = NodeWikiFactory(node=fork, version=2, is_current=True)
     main()
     assert_equal(fork.wiki_pages_versions, {wiki.page_name: [wiki._id, current_wiki._id]})
     assert_equal(fork.wiki_pages_current, {wiki.page_name: current_wiki._id})
 def test_valid_wiki_title(self):
     project = ProjectFactory()
     wiki = NodeWikiFactory(node=project)
     page_name = wiki.page_name
     main()
     wiki.reload()
     assert_equal(page_name, wiki.page_name)
     assert_in(page_name, project.wiki_pages_current)
     assert_in(page_name, project.wiki_pages_versions)
 def test_valid_wiki_title(self):
     project = ProjectFactory()
     wiki = NodeWikiFactory(node=project, is_current=True)
     page_name = wiki.page_name
     main()
     wiki.reload()
     assert_equal(page_name, wiki.page_name)
     assert_in(page_name, project.wiki_pages_current)
     assert_in(page_name, project.wiki_pages_versions)
示例#6
0
 def test_links(self):
     user = AuthUserFactory()
     project = ProjectFactory(creator=user)
     wiki = NodeWikiFactory(
         content='[[wiki2]]',
         user=user,
         node=project,
     )
     assert_in(
         project.web_url_for('project_wiki_page', wname='wiki2'),
         wiki.html(project),
     )
示例#7
0
 def test_links(self):
     user = AuthUserFactory()
     project = ProjectFactory(creator=user)
     wiki = NodeWikiFactory(
         content='[[wiki2]]',
         user=user,
         node=project,
     )
     assert_in(
         project.web_url_for('project_wiki_page', wname='wiki2'),
         wiki.html(project),
     )
示例#8
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), 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_forward_slash_is_removed_from_wiki_title(self):
        project = ProjectFactory()
        wiki = NodeWikiFactory(node=project)

        invalid_name = 'invalid/name'
        db.nodewikipage.update({'_id': wiki._id}, {'$set': {'page_name': invalid_name}})
        project.wiki_pages_current['invalid/name'] = project.wiki_pages_current[wiki.page_name]
        project.wiki_pages_versions['invalid/name'] = project.wiki_pages_versions[wiki.page_name]
        project.save()

        main()
        wiki.reload()

        assert_equal(wiki.page_name, 'invalidname')
        assert_in('invalidname', project.wiki_pages_current)
        assert_in('invalidname', project.wiki_pages_versions)
示例#10
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)
     self.wiki = NodeWikiFactory(node=self.project, user=self.user)
     self.date = self.wiki.date.strftime('%Y-%m-%dT%H:%M:%S.%f')
示例#11
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)
     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)
     self.public_url = '/{}comments/{}/'.format(API_BASE, self.public_comment._id)
     self.public_comment_payload = self._set_up_payload(self.public_comment._id)
示例#12
0
 def test_old_wiki_versions_not_returned(self):
     self._set_up_public_project_with_wiki_page()
     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)
示例#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), 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'])
示例#14
0
 def test_wiki_pages_that_do_not_exist_do_not_get_cloned(self):
     project = ProjectFactory(creator=self.user, is_public=True)
     wiki = NodeWikiFactory(node=project)
     NodeWikiPage.remove_one(wiki._id)
     # deleted wiki record in node.wiki_pages_versions
     assert_in(wiki._id, project.wiki_pages_versions[wiki.page_name])
     main()
     project.reload()
     # wiki_id gets removed from node.wiki_pages_versions
     assert_not_in(wiki._id, project.wiki_pages_versions[wiki.page_name])
示例#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('No wiki content', res)
     assert_in(wiki_content, res)
示例#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), 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_forward_slash_is_removed_from_wiki_title(self):
        project = ProjectFactory()
        wiki = NodeWikiFactory(node=project, is_current=True)

        invalid_name = 'invalid/name'
        db.nodewikipage.update({'_id': wiki._id},
                               {'$set': {
                                   'page_name': invalid_name
                               }})
        project.wiki_pages_current[
            'invalid/name'] = project.wiki_pages_current[wiki.page_name]
        project.wiki_pages_versions[
            'invalid/name'] = project.wiki_pages_versions[wiki.page_name]
        project.save()

        main()
        wiki.reload()

        assert_equal(wiki.page_name, 'invalidname')
        assert_in('invalidname', project.wiki_pages_current)
        assert_in('invalidname', project.wiki_pages_versions)
示例#18
0
 def _set_up_public_project_comment_reports(self):
     self.public_project = ProjectFactory.create(is_public=True, creator=self.user)
     self.public_project.add_contributor(contributor=self.contributor, save=True)
     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.user._id: {
         'category': 'spam',
         'text': 'This is spam',
         'date': datetime.utcnow(),
         'retracted': False,
     }}
     self.public_comment.save()
     self.public_url = '/{}comments/{}/reports/{}/'.format(API_BASE, self.public_comment._id, self.user._id)
示例#19
0
 def _set_up_registration_with_comment(self):
     self.registration = RegistrationFactory(creator=self.user,
                                             comment_level='private')
     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)
示例#20
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(category='hypothesis', creator=self.user)
     self.project.nodes.append(self.component)
     self.component.save()
     # 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)
示例#21
0
 def setUp(self):
     super(TestShortUrls, self).setUp()
     self.user = UserFactory()
     # Add an API key for quicker authentication
     api_key = ApiKeyFactory()
     self.user.api_keys.append(api_key)
     self.user.save()
     self.auth = ('test', api_key._primary_key)
     self.consolidate_auth = Auth(user=self.user, api_key=api_key)
     self.project = ProjectFactory(creator=self.user)
     # A non-project componenet
     self.component = NodeFactory(category='hypothesis', creator=self.user)
     self.project.nodes.append(self.component)
     self.component.save()
     # 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)
示例#22
0
    def test_wiki_pages_with_invalid_nodes_are_removed_after_cloning(self):
        project = ProjectFactory(creator=self.user, is_public=True)
        wiki = NodeWikiFactory(node=project)
        fork = project.fork_node(auth=Auth(self.user))
        fork.wiki_pages_versions = project.wiki_pages_versions
        fork.wiki_pages_current = project.wiki_pages_current
        fork.save()

        # Remove original node - wiki.node no longer points to an existing project
        Node.remove_one(project._id)

        # clone wiki page
        main()
        fork.reload()
        cloned_wiki_id = fork.wiki_pages_versions[wiki.page_name][0]
        cloned_wiki = NodeWikiPage.load(cloned_wiki_id)
        assert_equal(cloned_wiki.node._id, fork._id)

        # move original wiki page to unmigratedwikipages collection
        assert_false(db.nodewikipage.find_one({'_id': wiki._id}))
        assert_true(db.unmigratedwikipages.find_one({'_id': wiki._id}))
示例#23
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)
        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)
        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')
        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), 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), 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), 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)
示例#24
0
 def _add_project_wiki_page(self, node, user):
     from tests.factories import NodeWikiFactory
     # API will only return current wiki pages
     return NodeWikiFactory(node=node, user=user)
示例#25
0
 def test_bad_links(self):
     content = u'<span></span><iframe src="http://httpbin.org/"></iframe>'
     node = ProjectFactory()
     wiki = NodeWikiFactory(content=content, node=node)
     expected = render_content(content, node)
     assert_equal(expected, wiki.html(node))
示例#26
0
 def test_redirect_throws_501_for_non_implemented_views(self):
     wiki = NodeWikiFactory()
     url = '/{}guids/{}/'.format(API_BASE, wiki._id)
     res = self.app.get(url, auth=self.user.auth, expect_errors=True)
     assert_equal(res.status_code, 501)
示例#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)
        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)
        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)
        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')
        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),
                                 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),
                                 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),
                                 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)
示例#28
0
 def test_bad_links(self):
     content = u'<span></span><iframe src="http://httpbin.org/"></iframe>'
     node = ProjectFactory()
     wiki = NodeWikiFactory(content=content, node=node)
     expected = render_content(content, node)
     assert_equal(expected, wiki.html(node))