Example #1
0
    def test_get_when_not_logged_in_404s_if_user_not_found(
            self, pyramid_request, user_model):
        pyramid_request.matchdict = {'id': '123', 'code': 'abc456'}
        user_model.get_by_activation.return_value = None

        with pytest.raises(httpexceptions.HTTPNotFound):
            views.ActivateController(pyramid_request).get_when_not_logged_in()
Example #2
0
    def test_get_when_not_logged_in_redirects_if_activation_not_found(
            self, activation_model, pyramid_request):
        """

        If the activation code doesn't match any activation then we redirect to
        the front page and flash a message suggesting that they may already be
        activated and can log in.

        This happens if a user clicks on an activation link from an email after
        they've already been activated, for example.

        (This also happens if users visit a bogus activation URL, but we're
        happy to do this same redirect in that edge case.)

        """
        pyramid_request.matchdict = {'id': '123', 'code': 'abc456'}
        activation_model.get_by_code.return_value = None

        result = views.ActivateController(
            pyramid_request).get_when_not_logged_in()
        error_flash = pyramid_request.session.peek_flash('error')

        assert isinstance(result, httpexceptions.HTTPFound)
        assert error_flash
        assert error_flash[0].startswith(
            "We didn't recognize that activation link.")
Example #3
0
    def test_get_when_not_logged_in_redirects_if_activation_not_found(
            self, activation_model, pyramid_request):
        """

        If the activation code doesn't match any activation then we redirect to
        the front page and flash a message suggesting that they may already be
        activated and can log in.

        This happens if a user clicks on an activation link from an email after
        they've already been activated, for example.

        (This also happens if users visit a bogus activation URL, but we're
        happy to do this same redirect in that edge case.)

        """
        pyramid_request.matchdict = {"id": "123", "code": "abc456"}
        activation_model.get_by_code.return_value = None

        result = views.ActivateController(
            pyramid_request).get_when_not_logged_in()

        assert isinstance(result, httpexceptions.HTTPFound)
        assert result.location == "http://example.com/login"
        assert pyramid_request.session.peek_flash("error") == [
            Any.string.containing(
                "We didn't recognize that activation link. Have you already activated "
            ),
        ]
Example #4
0
    def test_get_when_logged_in_already_logged_in_when_id_not_an_int(self, pyramid_request):
        pyramid_request.user = mock.Mock(id=123, spec=['id'])
        pyramid_request.matchdict = {'id': 'abc',  # Not an int.
                                     'code': 'abc456'}

        with pytest.raises(httpexceptions.HTTPNotFound):
            views.ActivateController(pyramid_request).get_when_logged_in()
Example #5
0
    def test_get_when_not_logged_in_404s_if_id_not_int(self, pyramid_request):
        pyramid_request.matchdict = {
            'id': 'abc',  # Not an int.
            'code': 'abc456'
        }

        with pytest.raises(httpexceptions.HTTPNotFound):
            views.ActivateController(pyramid_request).get_when_not_logged_in()
    def test_get_when_not_logged_in_404s_if_id_not_int(self, pyramid_request):
        pyramid_request.matchdict = {
            "id": "abc",
            "code": "abc456"
        }  # Not an int.

        with pytest.raises(httpexceptions.HTTPNotFound):
            views.ActivateController(pyramid_request).get_when_not_logged_in()
Example #7
0
    def test_get_when_not_logged_in_successful_notifies(
            self, notify, pyramid_request, user_model, ActivationEvent):
        pyramid_request.matchdict = {'id': '123', 'code': 'abc456'}
        user_model.get_by_activation.return_value.id = 123

        views.ActivateController(pyramid_request).get_when_not_logged_in()

        notify.assert_called_once_with(ActivationEvent.return_value)
Example #8
0
    def test_get_when_logged_in_already_logged_in_when_id_not_an_int(
        self, pyramid_request
    ):
        pyramid_request.user = mock.Mock(id=123, spec=["id"])
        pyramid_request.matchdict = {"id": "abc", "code": "abc456"}  # Not an int.

        with pytest.raises(httpexceptions.HTTPNotFound):
            views.ActivateController(pyramid_request).get_when_logged_in()
    def test_get_when_not_logged_in_successful_creates_ActivationEvent(
            self, pyramid_request, user_model, ActivationEvent):
        pyramid_request.matchdict = {"id": "123", "code": "abc456"}
        user_model.get_by_activation.return_value.id = 123

        views.ActivateController(pyramid_request).get_when_not_logged_in()

        ActivationEvent.assert_called_once_with(
            pyramid_request, user_model.get_by_activation.return_value)
    def test_get_when_not_logged_in_looks_up_activation_by_code(
            self, activation_model, pyramid_request, user_model):
        pyramid_request.matchdict = {"id": "123", "code": "abc456"}
        user_model.get_by_activation.return_value.id = 123

        views.ActivateController(pyramid_request).get_when_not_logged_in()

        activation_model.get_by_code.assert_called_with(
            pyramid_request.db, "abc456")
Example #11
0
    def test_get_when_not_logged_in_404s_if_user_id_does_not_match_hash(
            self, pyramid_request, user_model):
        # We don't want to let a user with a valid hash activate a different
        # user's account!
        pyramid_request.matchdict = {"id": "123", "code": "abc456"}
        user_model.get_by_activation.return_value.id = 2  # Not the same id.

        with pytest.raises(httpexceptions.HTTPNotFound):
            views.ActivateController(pyramid_request).get_when_not_logged_in()
Example #12
0
    def test_get_when_not_logged_in_looks_up_user_by_activation(
            self, activation_model, pyramid_request, user_model):
        pyramid_request.matchdict = {'id': '123', 'code': 'abc456'}
        user_model.get_by_activation.return_value.id = 123

        views.ActivateController(pyramid_request).get_when_not_logged_in()

        user_model.get_by_activation.assert_called_once_with(
            pyramid_request.db, activation_model.get_by_code.return_value)
Example #13
0
    def test_get_when_not_logged_in_successful_flashes_message(
            self, pyramid_request, user_model):
        pyramid_request.matchdict = {"id": "123", "code": "abc456"}
        user_model.get_by_activation.return_value.id = 123

        views.ActivateController(pyramid_request).get_when_not_logged_in()

        assert pyramid_request.session.peek_flash("success") == [
            Any.string.containing("Your account has been activated")
        ]
Example #14
0
    def test_get_when_not_logged_in_successful_flashes_message(
            self, pyramid_request, user_model):
        pyramid_request.matchdict = {'id': '123', 'code': 'abc456'}
        user_model.get_by_activation.return_value.id = 123

        views.ActivateController(pyramid_request).get_when_not_logged_in()
        success_flash = pyramid_request.session.peek_flash('success')

        assert success_flash
        assert success_flash[0].startswith("Your account has been activated")
Example #15
0
    def test_get_when_not_logged_in_successful_activates_user(
            self, pyramid_request, user_model):
        pyramid_request.matchdict = {'id': '123', 'code': 'abc456'}
        pyramid_request.db.delete = mock.create_autospec(
            pyramid_request.db.delete, return_value=None)
        user_model.get_by_activation.return_value.id = 123

        views.ActivateController(pyramid_request).get_when_not_logged_in()

        user_model.get_by_activation.return_value.activate.assert_called_once_with(
        )
Example #16
0
    def test_get_when_logged_in_already_logged_in_to_different_account(
            self, pyramid_request):
        pyramid_request.authenticated_user = mock.Mock(id=124, spec=['id'])
        pyramid_request.matchdict = {'id': '123', 'code': 'abc456'}

        result = views.ActivateController(pyramid_request).get_when_logged_in()
        error_flash = pyramid_request.session.peek_flash('error')

        assert isinstance(result, httpexceptions.HTTPFound)
        assert error_flash
        assert error_flash[0].startswith(
            "You're already logged in to a different account")
Example #17
0
    def test_get_when_logged_in_already_logged_in_to_same_account(
            self, pyramid_request):
        pyramid_request.authenticated_user = mock.Mock(id=123, spec=['id'])
        pyramid_request.matchdict = {'id': '123', 'code': 'abc456'}

        result = views.ActivateController(pyramid_request).get_when_logged_in()
        success_flash = pyramid_request.session.peek_flash('success')

        assert isinstance(result, httpexceptions.HTTPFound)
        assert success_flash
        assert success_flash[0].startswith(
            "Your account has been activated and you're logged in")
    def test_get_when_logged_in_already_logged_in_to_same_account(
            self, pyramid_request):
        pyramid_request.user = mock.Mock(id=123, spec=["id"])
        pyramid_request.matchdict = {"id": "123", "code": "abc456"}

        result = views.ActivateController(pyramid_request).get_when_logged_in()
        success_flash = pyramid_request.session.peek_flash("success")

        assert isinstance(result, httpexceptions.HTTPFound)
        assert success_flash
        assert success_flash[0].startswith(
            "Your account has been activated and you're logged in")
    def test_get_when_logged_in_already_logged_in_to_different_account(
            self, pyramid_request):
        pyramid_request.user = mock.Mock(id=124, spec=["id"])
        pyramid_request.matchdict = {"id": "123", "code": "abc456"}

        result = views.ActivateController(pyramid_request).get_when_logged_in()
        error_flash = pyramid_request.session.peek_flash("error")

        assert isinstance(result, httpexceptions.HTTPFound)
        assert error_flash
        assert error_flash[0].startswith(
            "You're already logged in to a different account")
Example #20
0
    def test_get_when_not_logged_in_successful_creates_ActivationEvent(  # noqa: N802, N803
            self,
            pyramid_request,
            user_model,
            ActivationEvent):
        pyramid_request.matchdict = {'id': '123', 'code': 'abc456'}
        user_model.get_by_activation.return_value.id = 123

        views.ActivateController(pyramid_request).get_when_not_logged_in()

        ActivationEvent.assert_called_once_with(
            pyramid_request, user_model.get_by_activation.return_value)