|
@@ -5,26 +5,14 @@ from flask import get_flashed_messages, url_for
|
|
|
from flask_login import current_user, login_user
|
|
|
from werkzeug.datastructures import MultiDict
|
|
|
|
|
|
-from flaskbb.core.exceptions import PersistenceError, StopValidation
|
|
|
from flaskbb.core.changesets import ChangeSetHandler
|
|
|
-from flaskbb.core.user.update import (
|
|
|
- EmailUpdate,
|
|
|
- PasswordUpdate,
|
|
|
- SettingsUpdate,
|
|
|
- UserDetailsChange,
|
|
|
-)
|
|
|
-from flaskbb.user.forms import (
|
|
|
- ChangeEmailForm,
|
|
|
- ChangePasswordForm,
|
|
|
- ChangeUserDetailsForm,
|
|
|
- GeneralSettingsForm,
|
|
|
-)
|
|
|
-from flaskbb.user.views import (
|
|
|
- ChangeEmail,
|
|
|
- ChangePassword,
|
|
|
- ChangeUserDetails,
|
|
|
- UserSettings,
|
|
|
-)
|
|
|
+from flaskbb.core.exceptions import PersistenceError, StopValidation
|
|
|
+from flaskbb.core.user.update import (EmailUpdate, PasswordUpdate,
|
|
|
+ SettingsUpdate, UserDetailsChange)
|
|
|
+from flaskbb.user.forms import (ChangeEmailForm, ChangePasswordForm,
|
|
|
+ ChangeUserDetailsForm, GeneralSettingsForm)
|
|
|
+from flaskbb.user.views import (ChangeEmail, ChangePassword, ChangeUserDetails,
|
|
|
+ UserSettings)
|
|
|
|
|
|
|
|
|
@pytest.fixture(scope="function", autouse=True)
|
|
@@ -33,16 +21,18 @@ def setup_request(user, default_settings, post_request_context):
|
|
|
|
|
|
|
|
|
class TestUserSettingsView(object):
|
|
|
- def test_renders_get_okay(self, mock):
|
|
|
+ def test_renders_get_okay(self, mocker):
|
|
|
form = self.produce_form({})
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
handler = UserSettings(form=form, settings_update_handler=handler)
|
|
|
|
|
|
handler.get()
|
|
|
|
|
|
- def test_update_user_settings_successfully(self, user, mock):
|
|
|
- form = self.produce_form(data={"language": "python", "theme": "solarized"})
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ def test_update_user_settings_successfully(self, user, mocker):
|
|
|
+ form = self.produce_form(
|
|
|
+ data={"language": "python", "theme": "solarized"}
|
|
|
+ )
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
view = UserSettings(form=form, settings_update_handler=handler)
|
|
|
|
|
|
result = view.post()
|
|
@@ -56,9 +46,11 @@ class TestUserSettingsView(object):
|
|
|
user, SettingsUpdate(language="python", theme="solarized")
|
|
|
)
|
|
|
|
|
|
- def test_update_user_settings_fail_with_not_valid(self, mock):
|
|
|
- form = self.produce_form(data={"language": "ruby", "theme": "solarized"})
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ def test_update_user_settings_fail_with_not_valid(self, mocker):
|
|
|
+ form = self.produce_form(
|
|
|
+ data={"language": "ruby", "theme": "solarized"}
|
|
|
+ )
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
view = UserSettings(form=form, settings_update_handler=handler)
|
|
|
|
|
|
view.post()
|
|
@@ -68,9 +60,11 @@ class TestUserSettingsView(object):
|
|
|
handler.apply_changeset.assert_not_called()
|
|
|
assert form.errors
|
|
|
|
|
|
- def test_update_user_settings_fail_with_stopvalidation_error(self, mock):
|
|
|
- form = self.produce_form(data={"language": "python", "theme": "molokai"})
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ def test_update_user_settings_fail_with_stopvalidation_error(self, mocker):
|
|
|
+ form = self.produce_form(
|
|
|
+ data={"language": "python", "theme": "molokai"}
|
|
|
+ )
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
handler.apply_changeset.side_effect = StopValidation(
|
|
|
[("theme", "Solarized is better")]
|
|
|
)
|
|
@@ -82,9 +76,11 @@ class TestUserSettingsView(object):
|
|
|
assert not (len(flashed))
|
|
|
assert form.errors["theme"] == ["Solarized is better"]
|
|
|
|
|
|
- def test_update_user_settings_fails_with_persistence_error(self, mock):
|
|
|
- form = self.produce_form(data={"language": "python", "theme": "molokai"})
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ def test_update_user_settings_fails_with_persistence_error(self, mocker):
|
|
|
+ form = self.produce_form(
|
|
|
+ data={"language": "python", "theme": "molokai"}
|
|
|
+ )
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
handler.apply_changeset.side_effect = PersistenceError("Nope")
|
|
|
view = UserSettings(form=form, settings_update_handler=handler)
|
|
|
|
|
@@ -97,27 +93,35 @@ class TestUserSettingsView(object):
|
|
|
assert result.headers["Location"] == url_for("user.settings")
|
|
|
|
|
|
def produce_form(self, data):
|
|
|
- form = GeneralSettingsForm(formdata=MultiDict(data), meta={"csrf": False})
|
|
|
- form.language.choices = [("python", "python"), ("ecmascript", "ecmascript")]
|
|
|
- form.theme.choices = [("molokai", "molokai"), ("solarized", "solarized")]
|
|
|
+ form = GeneralSettingsForm(
|
|
|
+ formdata=MultiDict(data), meta={"csrf": False}
|
|
|
+ )
|
|
|
+ form.language.choices = [
|
|
|
+ ("python", "python"),
|
|
|
+ ("ecmascript", "ecmascript"),
|
|
|
+ ]
|
|
|
+ form.theme.choices = [
|
|
|
+ ("molokai", "molokai"),
|
|
|
+ ("solarized", "solarized"),
|
|
|
+ ]
|
|
|
return form
|
|
|
|
|
|
|
|
|
class TestChangePasswordView(object):
|
|
|
- def test_renders_get_okay(self, mock):
|
|
|
+ def test_renders_get_okay(self, mocker):
|
|
|
form = self.produce_form()
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
view = ChangePassword(form=form, password_update_handler=handler)
|
|
|
|
|
|
view.get()
|
|
|
|
|
|
- def test_updates_user_password_okay(self, user, mock):
|
|
|
+ def test_updates_user_password_okay(self, user, mocker):
|
|
|
form = self.produce_form(
|
|
|
old_password="password",
|
|
|
new_password="newpassword",
|
|
|
confirm_new_password="newpassword",
|
|
|
)
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
view = ChangePassword(form=form, password_update_handler=handler)
|
|
|
|
|
|
result = view.post()
|
|
@@ -128,16 +132,17 @@ class TestChangePasswordView(object):
|
|
|
assert result.status_code == 302
|
|
|
assert result.headers["Location"] == url_for("user.change_password")
|
|
|
handler.apply_changeset.assert_called_once_with(
|
|
|
- user, PasswordUpdate(old_password="password", new_password="newpassword")
|
|
|
+ user,
|
|
|
+ PasswordUpdate(old_password="password", new_password="newpassword"),
|
|
|
)
|
|
|
|
|
|
- def test_updates_user_password_fails_with_invalid_inpit(self, mock, user):
|
|
|
+ def test_updates_user_password_fails_with_invalid_inpit(self, mocker, user):
|
|
|
form = self.produce_form(
|
|
|
old_password="password",
|
|
|
new_password="newpassword",
|
|
|
confirm_new_password="whoops",
|
|
|
)
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
view = ChangePassword(form=form, password_update_handler=handler)
|
|
|
|
|
|
view.post()
|
|
@@ -145,13 +150,13 @@ class TestChangePasswordView(object):
|
|
|
handler.apply_changeset.assert_not_called()
|
|
|
assert "new_password" in form.errors
|
|
|
|
|
|
- def test_update_user_password_fails_with_stopvalidation_error(self, mock):
|
|
|
+ def test_update_user_password_fails_with_stopvalidation_error(self, mocker):
|
|
|
form = self.produce_form(
|
|
|
old_password="password",
|
|
|
new_password="newpassword",
|
|
|
confirm_new_password="newpassword",
|
|
|
)
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
handler.apply_changeset.side_effect = StopValidation(
|
|
|
[("new_password", "That's not a very strong password")]
|
|
|
)
|
|
@@ -159,15 +164,17 @@ class TestChangePasswordView(object):
|
|
|
|
|
|
view.post()
|
|
|
|
|
|
- assert form.errors["new_password"] == ["That's not a very strong password"]
|
|
|
+ assert form.errors["new_password"] == [
|
|
|
+ "That's not a very strong password"
|
|
|
+ ]
|
|
|
|
|
|
- def test_update_user_password_fails_with_persistence_error(self, mock):
|
|
|
+ def test_update_user_password_fails_with_persistence_error(self, mocker):
|
|
|
form = self.produce_form(
|
|
|
old_password="password",
|
|
|
new_password="newpassword",
|
|
|
confirm_new_password="newpassword",
|
|
|
)
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
handler.apply_changeset.side_effect = PersistenceError("no")
|
|
|
view = ChangePassword(form=form, password_update_handler=handler)
|
|
|
|
|
@@ -185,20 +192,20 @@ class TestChangePasswordView(object):
|
|
|
|
|
|
|
|
|
class TestChangeEmailView(object):
|
|
|
- def test_renders_get_okay(self, mock):
|
|
|
+ def test_renders_get_okay(self, mocker):
|
|
|
form = self.produce_form()
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
view = ChangeEmail(form=form, update_email_handler=handler)
|
|
|
|
|
|
view.get()
|
|
|
|
|
|
- def test_update_user_email_successfully(self, user, mock):
|
|
|
+ def test_update_user_email_successfully(self, user, mocker):
|
|
|
form = self.produce_form(
|
|
|
old_email=user.email,
|
|
|
new_email="new@email.mail",
|
|
|
confirm_new_email="new@email.mail",
|
|
|
)
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
view = ChangeEmail(form=form, update_email_handler=handler)
|
|
|
|
|
|
result = view.post()
|
|
@@ -211,9 +218,9 @@ class TestChangeEmailView(object):
|
|
|
assert result.status_code == 302
|
|
|
assert result.headers["Location"] == url_for("user.change_email")
|
|
|
|
|
|
- def test_update_user_email_fails_with_invalid_input(self, user, mock):
|
|
|
+ def test_update_user_email_fails_with_invalid_input(self, user, mocker):
|
|
|
form = self.produce_form(old_email=user.email, new_email="new@e.mail")
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
view = ChangeEmail(form=form, update_email_handler=handler)
|
|
|
|
|
|
view.post()
|
|
@@ -221,11 +228,13 @@ class TestChangeEmailView(object):
|
|
|
assert form.errors
|
|
|
handler.apply_changeset.assert_not_called()
|
|
|
|
|
|
- def test_update_user_email_fails_with_stopvalidation(self, user, mock):
|
|
|
+ def test_update_user_email_fails_with_stopvalidation(self, user, mocker):
|
|
|
form = self.produce_form(
|
|
|
- old_email=user.email, new_email="new@e.mail", confirm_new_email="new@e.mail"
|
|
|
+ old_email=user.email,
|
|
|
+ new_email="new@e.mail",
|
|
|
+ confirm_new_email="new@e.mail",
|
|
|
)
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
handler.apply_changeset.side_effect = StopValidation(
|
|
|
[("new_email", "bad email")]
|
|
|
)
|
|
@@ -235,11 +244,13 @@ class TestChangeEmailView(object):
|
|
|
|
|
|
assert form.errors == {"new_email": ["bad email"]}
|
|
|
|
|
|
- def test_update_email_fails_with_persistence_error(self, user, mock):
|
|
|
+ def test_update_email_fails_with_persistence_error(self, user, mocker):
|
|
|
form = self.produce_form(
|
|
|
- old_email=user.email, new_email="new@e.mail", confirm_new_email="new@e.mail"
|
|
|
+ old_email=user.email,
|
|
|
+ new_email="new@e.mail",
|
|
|
+ confirm_new_email="new@e.mail",
|
|
|
)
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
handler.apply_changeset.side_effect = PersistenceError("nope")
|
|
|
view = ChangeEmail(form=form, update_email_handler=handler)
|
|
|
|
|
@@ -257,14 +268,14 @@ class TestChangeEmailView(object):
|
|
|
|
|
|
|
|
|
class TestChangeUserDetailsView(object):
|
|
|
- def test_renders_get_okay(self, mock):
|
|
|
+ def test_renders_get_okay(self, mocker):
|
|
|
form = self.produce_form()
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
view = ChangeUserDetails(form=form, details_update_handler=handler)
|
|
|
|
|
|
view.get()
|
|
|
|
|
|
- def test_update_user_details_successfully_updates(self, user, mock):
|
|
|
+ def test_update_user_details_successfully_updates(self, user, mocker):
|
|
|
form = self.produce_form(
|
|
|
birthday="25 04 2000",
|
|
|
gender="awesome",
|
|
@@ -274,7 +285,7 @@ class TestChangeUserDetailsView(object):
|
|
|
signature="use a cursive font",
|
|
|
notes="got 'em",
|
|
|
)
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
view = ChangeUserDetails(form=form, details_update_handler=handler)
|
|
|
|
|
|
result = view.post()
|
|
@@ -296,18 +307,18 @@ class TestChangeUserDetailsView(object):
|
|
|
),
|
|
|
)
|
|
|
|
|
|
- def test_update_user_fails_with_invalid_input(self, mock):
|
|
|
+ def test_update_user_fails_with_invalid_input(self, mocker):
|
|
|
form = self.produce_form(birthday="99 99 999999")
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
view = ChangeUserDetails(form=form, details_update_handler=handler)
|
|
|
|
|
|
view.post()
|
|
|
|
|
|
assert form.errors == {"birthday": ["Not a valid date value"]}
|
|
|
|
|
|
- def test_update_user_fails_with_stopvalidation(self, mock):
|
|
|
+ def test_update_user_fails_with_stopvalidation(self, mocker):
|
|
|
form = self.produce_form(birthday="25 04 2000")
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
handler.apply_changeset.side_effect = StopValidation(
|
|
|
[("birthday", "I just want you to know that's a great birthday")]
|
|
|
)
|
|
@@ -319,9 +330,9 @@ class TestChangeUserDetailsView(object):
|
|
|
"birthday": ["I just want you to know that's a great birthday"]
|
|
|
}
|
|
|
|
|
|
- def test_update_user_fails_with_persistence_error(self, mock):
|
|
|
+ def test_update_user_fails_with_persistence_error(self, mocker):
|
|
|
form = self.produce_form(birthday="25 04 2000")
|
|
|
- handler = mock.Mock(spec=ChangeSetHandler)
|
|
|
+ handler = mocker.Mock(spec=ChangeSetHandler)
|
|
|
handler.apply_changeset.side_effect = PersistenceError("no")
|
|
|
view = ChangeUserDetails(form=form, details_update_handler=handler)
|
|
|
|