Beispiel #1
0
def test_read_if_already_a_member_renders_template(share_group_request,
                                                   renderers):
    """It should render the "Share this group" template."""
    views.read(share_group_request)

    assert renderers.render_to_response.call_args[1]['renderer_name'] == (
        'h:templates/groups/share.html.jinja2')
Beispiel #2
0
def test_read_decodes_hashid(hashids):
    request = _mock_request(matchdict={"hashid": "abc", "slug": "slug"})

    views.read(request)

    hashids.decode.assert_called_once_with(
        request, "h.groups", "abc")
Beispiel #3
0
def test_read_duplicate_documents_are_removed(Group, search, renderers, uri,
                                              presenters):
    """

    If the group has multiple annotations whose uris all normalize to the same
    uri, only the document_link of the first one of these annotations should be
    sent to the template.

    """
    presenters.AnnotationHTMLPresenter = MockAnnotationHTMLPresenter
    request = mock.Mock(matchdict=_matchdict())
    g = Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = request.authenticated_user = mock.Mock()
    user.groups = [g]  # The user is a member of the group.
    annotations = [{'uri': 'uri_1'}, {'uri': 'uri_2'}, {'uri': 'uri_3'}]
    search.search.return_value = {'rows': annotations, 'total': 3}

    def normalize(uri):
        # All annotations' URIs normalize to the same URI.
        return "normalized"
    uri.normalize.side_effect = normalize

    views.read(request)

    assert (
        renderers.render_to_response.call_args[1]['value']['document_links']
        == ["document_link_1"])
Beispiel #4
0
def test_read_if_not_logged_in_passes_group(Group, renderers):
    """It should pass the group to the template."""
    g = Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    request = _mock_request(authenticated_userid=None, matchdict=_matchdict())

    views.read(request)

    assert renderers.render_to_response.call_args[1]['value']['group'] == g
Beispiel #5
0
    def test_redirects_if_slug_incorrect(self, pyramid_request):
        group = FakeGroup('abc123', 'some-slug')
        pyramid_request.matchdict['slug'] = 'another-slug'

        with pytest.raises(HTTPMovedPermanently) as exc:
            views.read(group, pyramid_request)

        assert exc.value.location == '/g/abc123/some-slug'
Beispiel #6
0
def test_read_decodes_hashid(hashids):
    matchdict = _matchdict()
    request = _mock_request(matchdict=matchdict)

    views.read(request)

    hashids.decode.assert_called_once_with(
        request, "h.groups", matchdict["hashid"])
Beispiel #7
0
    def test_redirects_if_slug_incorrect(self, pyramid_request):
        group = FakeGroup('abc123', 'some-slug')
        pyramid_request.matchdict['slug'] = 'another-slug'

        with pytest.raises(HTTPMovedPermanently) as exc:
            views.read(group, pyramid_request)

        assert exc.value.location == '/g/abc123/some-slug'
Beispiel #8
0
def test_read_if_not_logged_in_renders_share_group_page(Group, renderers):
    """If not logged in should render the "Login to join this group" page."""
    Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    request = _mock_request(authenticated_userid=None, matchdict=_matchdict())

    views.read(request)

    assert renderers.render_to_response.call_args[1]["renderer_name"] == ("h:groups/templates/join.html.jinja2")
Beispiel #9
0
def test_read_if_already_a_member_passes_group_to_template(share_group_request,
                                                           Group,
                                                           renderers):
    """It passes the group to the template."""
    views.read(share_group_request)

    assert renderers.render_to_response.call_args[1]['value']['group'] == (
        Group.get_by_pubid.return_value)
Beispiel #10
0
def test_read_if_not_logged_in_renders_share_group_page(Group, renderers):
    """If not logged in should render the "Login to join this group" page."""
    Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    request = _mock_request(authenticated_userid=None, matchdict=_matchdict())

    views.read(request)

    assert renderers.render_to_response.call_args[1]['renderer_name'] == (
        'h:templates/groups/join.html.jinja2')
Beispiel #11
0
def test_read_if_already_a_member_gets_group_url(Group, share_group_request):
    share_group_request.route_url = mock.Mock()

    views.read(share_group_request)

    share_group_request.route_url.assert_called_once_with(
        'group_read',
        pubid=Group.get_by_pubid.return_value.pubid,
        slug=Group.get_by_pubid.return_value.slug)
Beispiel #12
0
def test_read_if_already_a_member_passes_group_url_to_template(
        share_group_request,
        renderers):
    share_group_request.route_url = mock.Mock()

    views.read(share_group_request)

    assert renderers.render_to_response.call_args[1]['value']['group_url'] == (
        share_group_request.route_url.return_value)
Beispiel #13
0
def test_read_if_already_a_member_renders_template(Group, renderers):
    """It should render the "Share this group" template."""
    request = _mock_request(matchdict=_matchdict())
    g = Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = request.authenticated_user = mock.Mock()
    user.groups = [g]  # The user is a member of the group.

    views.read(request)
    assert renderers.render_to_response.call_args[1]["renderer_name"] == ("h:groups/templates/share.html.jinja2")
Beispiel #14
0
def test_read_if_already_a_member_renders_template(Group, renderers):
    """It should render the "Share this group" template."""
    request = _mock_request(matchdict=_matchdict())
    g = Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = request.authenticated_user = mock.Mock()
    user.groups = [g]  # The user is a member of the group.

    views.read(request)
    assert renderers.render_to_response.call_args[1]['renderer_name'] == (
        'h:templates/groups/share.html.jinja2')
Beispiel #15
0
def test_read_if_already_a_member_passes_group(Group, renderers):
    """It passes the group to the template."""
    request = _mock_request(matchdict=_matchdict())
    g = Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = request.authenticated_user = mock.Mock()
    user.groups = [g]  # The user is a member of the group.

    views.read(request)

    assert renderers.render_to_response.call_args[1]['value']['group'] == g
Beispiel #16
0
def test_read_if_not_a_member_passes_group_to_template(Group, renderers):
    """It should get the join URL and pass it to the template."""
    request = _mock_request(matchdict=_matchdict())
    g = Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = request.authenticated_user = mock.Mock()
    user.groups = []  # The user isn't a member of the group.

    views.read(request)

    assert renderers.render_to_response.call_args[1]['value']['group'] == g
Beispiel #17
0
def test_read_if_not_a_member_renders_template(Group, renderers):
    """It should render the "Join this group" template."""
    request = _mock_request(matchdict=_matchdict())
    Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = request.authenticated_user = mock.Mock()
    user.groups = []  # The user isn't a member of the group.

    views.read(request)

    assert renderers.render_to_response.call_args[1]['renderer_name'] == (
        'h:templates/groups/join.html.jinja2')
Beispiel #18
0
def test_read_calls_search_correctly(Group, search, renderers):
    """It should call search() with the right args to get the annotations."""
    request = _mock_request(matchdict=_matchdict())
    g = Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = request.authenticated_user = mock.Mock()
    user.groups = [g]  # The user is a member of the group.
    renderers.render_to_response.return_value = mock.sentinel.response

    views.read(request)

    search.search.assert_called_once_with(request, private=False, params={"group": g.pubid, "limit": 1000})
Beispiel #19
0
def test_read_if_already_a_member_when_group_has_no_annotated_documents(
        Group,
        share_group_request,
        presenters,
        renderers):
    Group.get_by_pubid.return_value.documents.return_value = []

    views.read(share_group_request)

    assert not presenters.DocumentHTMLPresenter.called
    assert renderers.render_to_response.call_args[1]['value']['document_links'] == []
Beispiel #20
0
def test_read_calls_search_correctly(Group, search, renderers):
    """It should call search() with the right args to get the annotations."""
    request = _mock_request(matchdict=_matchdict())
    g = Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = request.authenticated_user = mock.Mock()
    user.groups = [g]  # The user is a member of the group.
    renderers.render_to_response.return_value = mock.sentinel.response

    views.read(request)

    search.search.assert_called_once_with(
            request, private=False, params={"group": g.pubid, "limit": 1000})
Beispiel #21
0
def test_read_if_not_a_member_renders_template(
        Group, User, renderers):
    """It should render the "Join this group" template."""
    request = _mock_request(matchdict=_matchdict())
    Group.get_by_id.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = User.get_by_userid.return_value = mock.Mock()
    user.groups = []  # The user isn't a member of the group.

    views.read(request)

    assert renderers.render_to_response.call_args[1]['renderer_name'] == (
        'h:groups/templates/join.html.jinja2')
Beispiel #22
0
def test_read_if_not_a_member_passes_join_url_to_template(
        Group, User, renderers):
    """It should get the join URL and pass it to the template."""
    request = _mock_request(matchdict=_matchdict())
    request.route_url.return_value = mock.sentinel.join_url
    Group.get_by_id.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = User.get_by_userid.return_value = mock.Mock()
    user.groups = []  # The user isn't a member of the group.

    views.read(request)

    assert renderers.render_to_response.call_args[1]['value']['join_url'] == (
        mock.sentinel.join_url)
Beispiel #23
0
def test_read_if_not_a_member_passes_join_url_to_template(
        Group, User, renderers):
    """It should get the join URL and pass it to the template."""
    request = _mock_request(matchdict=_matchdict())
    request.route_url.return_value = mock.sentinel.join_url
    Group.get_by_hashid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = User.get_by_userid.return_value = mock.Mock()
    user.groups = []  # The user isn't a member of the group.

    views.read(request)

    assert renderers.render_to_response.call_args[1]['value']['join_url'] == (
        mock.sentinel.join_url)
Beispiel #24
0
def test_read_if_already_a_member_passes_group_url(
        Group, User, logic, renderers):
    """It gets the url from url_for_group() and passes it to the template."""
    request = _mock_request(matchdict=_matchdict())
    group = Group.get_by_id.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = User.get_by_userid.return_value = mock.Mock()
    user.groups = [group]  # The user is a member of the group.
    logic.url_for_group.return_value = mock.sentinel.group_url

    views.read(request)

    logic.url_for_group.assert_called_once_with(request, group)
    assert renderers.render_to_response.call_args[1]['value']['group_url'] == (
        mock.sentinel.group_url)
Beispiel #25
0
def test_read_if_already_a_member_passes_document_links_to_template(
        Group,
        share_group_request,
        presenters,
        renderers):
    """It should pass the document links to the template."""
    document_1 = mock.Mock()
    document_2 = mock.Mock()
    document_3 = mock.Mock()
    Group.get_by_pubid.return_value.documents.return_value = [
        document_1, document_2, document_3]

    views.read(share_group_request)

    assert renderers.render_to_response.call_args[1]['value']['document_links'] == [
        'document_link_1', 'document_link_2', 'document_link_3']
Beispiel #26
0
def test_read_if_not_a_member_encodes_hashid_from_groupid(
        Group, User, hashids):
    """It should encode the hashid from the groupid.

    And use it to get the join URL from route_url().

    """
    request = _mock_request(matchdict=_matchdict())
    group = Group.get_by_id.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = User.get_by_userid.return_value = mock.Mock()
    user.groups = []  # The user isn't a member of the group.
    hashids.encode.return_value = mock.sentinel.hashid

    views.read(request)

    assert hashids.encode.call_args[1]['number'] == group.id
    assert request.route_url.call_args[1]['hashid'] == mock.sentinel.hashid
Beispiel #27
0
def test_read_returns_the_group(Group):
    group = Group.get_by_id.return_value
    group.slug = 'slug'

    template_data = views.read(_mock_request(
        matchdict={"hashid": "1", "slug": "slug"}))

    assert template_data["group"] == group
Beispiel #28
0
def test_read_returns_document_links(Group, search, renderers, uri,
                                     presenters):
    """It should return the list of document links."""
    presenters.AnnotationHTMLPresenter = MockAnnotationHTMLPresenter
    request = mock.Mock(matchdict=_matchdict())
    g = Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = request.authenticated_user = mock.Mock()
    user.groups = [g]  # The user is a member of the group.
    annotations = [{'uri': 'uri_1'}, {'uri': 'uri_2'}, {'uri': 'uri_3'}]
    search.search.return_value = {'rows': annotations, 'total': 3}
    def normalize(uri):
        return uri + "_normalized"
    uri.normalize.side_effect = normalize

    views.read(request)
    assert (renderers.render_to_response.call_args[1]['value']['document_links']
        == ["document_link_1", "document_link_2", "document_link_3"])
Beispiel #29
0
def test_read_if_already_a_member_presents_documents(Group,
                                                     share_group_request,
                                                     presenters):
    """It should call DocumentHTMLPresenter with each annotation."""

    document_1 = mock.Mock()
    document_2 = mock.Mock()
    document_3 = mock.Mock()
    Group.get_by_pubid.return_value.documents.return_value = [
        document_1, document_2, document_3]

    views.read(share_group_request)

    presenters.DocumentHTMLPresenter.assert_has_calls(
        [mock.call(document_1), mock.call(document_2), mock.call(document_3)],
        any_order=True
    )
Beispiel #30
0
def test_read_if_not_logged_in_returns_response(Group, renderers):
    """It should return the response from render_to_response()."""
    Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    request = _mock_request(authenticated_userid=None, matchdict=_matchdict())
    renderers.render_to_response.return_value = mock.sentinel.response

    response = views.read(request)

    assert response == mock.sentinel.response
Beispiel #31
0
def test_read_if_not_a_member_returns_response(Group, User, renderers):
    """It should return the response from render_to_response()."""
    request = _mock_request(matchdict=_matchdict())
    Group.get_by_id.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = User.get_by_userid.return_value = mock.Mock()
    user.groups = []  # The user isn't a member of the group.
    renderers.render_to_response.return_value = mock.sentinel.response

    assert views.read(request) == mock.sentinel.response
Beispiel #32
0
def test_read_with_wrong_slug_redirects(Group):
    """/groups/<pubid>/<wrong> should redirect to /groups/<pubid>/<slug>."""
    group = Group.get_by_pubid.return_value = mock.Mock(slug="my-group")
    matchdict = {"pubid": "1", "slug": "my-gro"}  # Wrong slug.
    request = _mock_request(matchdict=matchdict)

    result = views.read(request)

    assert isinstance(result, httpexceptions.HTTPRedirection)
Beispiel #33
0
def test_read_if_already_a_member_returns_response(Group, renderers):
    """It should return the response from render_to_response()."""
    request = _mock_request(matchdict=_matchdict())
    g = Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = request.authenticated_user = mock.Mock()
    user.groups = [g]  # The user is a member of the group.
    renderers.render_to_response.return_value = mock.sentinel.response

    assert views.read(request) == mock.sentinel.response
Beispiel #34
0
def test_read_if_not_a_member_returns_response(Group, User, renderers):
    """It should return the response from render_to_response()."""
    request = _mock_request(matchdict=_matchdict())
    Group.get_by_hashid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = User.get_by_userid.return_value = mock.Mock()
    user.groups = []  # The user isn't a member of the group.
    renderers.render_to_response.return_value = mock.sentinel.response

    assert views.read(request) == mock.sentinel.response
Beispiel #35
0
def test_read_without_slug_redirects(Group):
    """/groups/<hashid> should redirect to /groups/<hashid>/<slug>."""
    group = Group.get_by_hashid.return_value = mock.Mock()
    matchdict = {"hashid": "1"}  # No slug.
    request = _mock_request(matchdict=matchdict)

    result = views.read(request)

    assert isinstance(result, httpexceptions.HTTPRedirection)
Beispiel #36
0
def test_read_if_not_logged_in_returns_response(Group, renderers):
    """It should return the response from render_to_response()."""
    Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    request = _mock_request(authenticated_userid=None, matchdict=_matchdict())
    renderers.render_to_response.return_value = mock.sentinel.response

    response = views.read(request)

    assert response == mock.sentinel.response
Beispiel #37
0
def test_read_with_wrong_slug_redirects(Group, logic):
    """/groups/<hashid>/<wrong> should redirect to /groups/<hashid>/<slug>."""
    group = Group.get_by_id.return_value = mock.Mock(slug="my-group")
    matchdict = {"hashid": "1", "slug": "my-gro"}  # Wrong slug.
    request = _mock_request(matchdict=matchdict)
    logic.url_for_group.return_value = "/1/my-group"

    redirect = views.read(request)

    logic.url_for_group.assert_called_once_with(request, group)
    assert redirect.location == "/1/my-group"
Beispiel #38
0
    def test_renders_join_template_if_not_member(self,
                                                 pyramid_config,
                                                 pyramid_request):
        group = FakeGroup('abc123', 'some-slug')
        pyramid_config.testing_securitypolicy('bohus', permissive=False)
        pyramid_request.matchdict['slug'] = 'some-slug'

        result = views.read(group, pyramid_request)

        assert 'join.html' in pyramid_request.override_renderer
        assert result == {'group': group}
Beispiel #39
0
    def test_renders_join_template_if_not_member(self,
                                                 pyramid_config,
                                                 pyramid_request):
        group = FakeGroup('abc123', 'some-slug')
        pyramid_config.testing_securitypolicy('bohus', permissive=False)
        pyramid_request.matchdict['slug'] = 'some-slug'

        result = views.read(group, pyramid_request)

        assert 'join.html' in pyramid_request.override_renderer
        assert result == {'group': group}
Beispiel #40
0
def test_read_documents_are_truncated(Group, search, renderers, uri,
                                      presenters):
    """It should send at most 25 document links to the template."""
    presenters.AnnotationHTMLPresenter = MockAnnotationHTMLPresenter
    request = mock.Mock(matchdict=_matchdict())
    g = Group.get_by_pubid.return_value = mock.Mock(slug=mock.sentinel.slug)
    user = request.authenticated_user = mock.Mock()
    user.groups = [g]  # The user is a member of the group.
    annotations = [{'uri': 'uri_{n}'.format(n=n)} for n in range(50)]
    search.search.return_value = {'rows': annotations, 'total': 50}

    def normalize(uri):
        return uri + "_normalized"
    uri.normalize.side_effect = normalize

    views.read(request)

    assert (len(
        renderers.render_to_response.call_args[1]['value']['document_links'])
        == 25)
Beispiel #41
0
    def test_returns_template_context(self, patch, pyramid_request):
        group = FakeGroup('abc123', 'some-slug')
        group.documents = lambda: ['d1', 'd2']
        link = patch('h.presenters.DocumentHTMLPresenter.link',
                     autospec=None,
                     new_callable=mock.PropertyMock)
        link.side_effect = ['link1', 'link2']
        pyramid_request.matchdict['slug'] = 'some-slug'

        result = views.read(group, pyramid_request)

        assert result['group'] == group
        assert result['document_links'] == ['link1', 'link2']
Beispiel #42
0
def test_read_with_wrong_slug_redirects(Group):
    """/groups/<hashid>/<wrong> should redirect to /groups/<hashid>/<slug>."""
    Group.return_value = mock.Mock(slug="my-group")
    matchdict = {"hashid": "1", "slug": "my-gro"}
    request = _mock_request(
        matchdict=matchdict,
        route_url=mock.Mock(return_value="/1/my-group"))

    redirect = views.read(request)

    assert request.route_url.called_with(
        "group_read", hashid="1", slug="my-group")
    assert redirect.location == "/1/my-group"
Beispiel #43
0
def test_read_404s_if_groups_feature_is_off():
    with pytest.raises(httpexceptions.HTTPNotFound):
        views.read(_mock_request(feature=lambda feature: False))
Beispiel #44
0
def test_read_gets_group_by_id(Group, hashids):
    hashids.decode.return_value = 1

    views.read(_mock_request(matchdict=_matchdict()))

    Group.get_by_id.assert_called_once_with(1)
Beispiel #45
0
def test_read_gets_group_by_pubid(Group):
    views.read(_mock_request(matchdict={'pubid': 'abc', 'slug': 'snail'}))

    Group.get_by_pubid.assert_called_once_with('abc')
Beispiel #46
0
def test_read_404s_when_group_does_not_exist(Group):
    Group.get_by_pubid.return_value = None

    with pytest.raises(httpexceptions.HTTPNotFound):
        views.read(_mock_request(matchdict=_matchdict()))