test_forms.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. from datetime import date
  2. import pytest
  3. from werkzeug.datastructures import MultiDict
  4. from flaskbb.core.user.update import (
  5. EmailUpdate,
  6. PasswordUpdate,
  7. SettingsUpdate,
  8. UserDetailsChange,
  9. )
  10. from flaskbb.user import forms
  11. pytestmark = pytest.mark.usefixtures("post_request_context", "default_settings")
  12. class TestGeneralSettingsForm(object):
  13. def test_transforms_to_expected_change_object(self):
  14. data = MultiDict({"language": "python", "theme": "molokai", "submit": True})
  15. form = forms.GeneralSettingsForm(formdata=data)
  16. expected = SettingsUpdate(language="python", theme="molokai")
  17. assert form.as_change() == expected
  18. class TestChangeEmailForm(object):
  19. def test_transforms_to_expected_change_object(self, Fred):
  20. data = MultiDict(
  21. {
  22. "old_email": Fred.email,
  23. "new_email": "totally@real.email",
  24. "confirm_new_email": "totally@real.email",
  25. "submit": True,
  26. }
  27. )
  28. form = forms.ChangeEmailForm(Fred, formdata=data)
  29. expected = EmailUpdate(old_email=Fred.email, new_email="totally@real.email")
  30. assert form.as_change() == expected
  31. def test_valid_inputs(self, Fred):
  32. data = MultiDict(
  33. {
  34. "old_email": Fred.email,
  35. "new_email": "totally@real.email",
  36. "confirm_new_email": "totally@real.email",
  37. "submit": True,
  38. }
  39. )
  40. form = forms.ChangeEmailForm(Fred, formdata=data, meta={"csrf": False})
  41. assert form.validate_on_submit()
  42. @pytest.mark.parametrize(
  43. "formdata",
  44. [
  45. {"old_email": "notanemail"},
  46. {"old_email": ""},
  47. {"new_email": "notanemail", "confirm_new_email": "notanemail"},
  48. {"new_email": ""},
  49. {"new_email": "not@the.same"},
  50. {"confirm_new_email": ""},
  51. ],
  52. )
  53. def test_invalid_inputs(self, Fred, formdata):
  54. data = {
  55. "submit": True,
  56. "old_email": Fred.email,
  57. "new_email": "totally@real.email",
  58. "confirm_new_email": "totally@real.email",
  59. }
  60. data.update(formdata)
  61. form = forms.ChangeEmailForm(
  62. Fred, formdata=MultiDict(data), meta={"csrf": False}
  63. )
  64. assert not form.validate_on_submit()
  65. class TestChangePasswordForm(object):
  66. def test_transforms_to_expected_change_object(self):
  67. data = MultiDict(
  68. {
  69. "old_password": "old_password",
  70. "new_password": "password",
  71. "confirm_new_password": "password",
  72. "submit": True,
  73. }
  74. )
  75. form = forms.ChangePasswordForm(formdata=data)
  76. expected = PasswordUpdate(old_password="old_password", new_password="password")
  77. assert form.as_change() == expected
  78. def test_valid_inputs(self):
  79. data = MultiDict(
  80. {
  81. "submit": True,
  82. "old_password": "old_password",
  83. "new_password": "password",
  84. "confirm_new_password": "password",
  85. }
  86. )
  87. form = forms.ChangePasswordForm(formdata=data, meta={"csrf": False})
  88. assert form.validate_on_submit()
  89. @pytest.mark.parametrize(
  90. "formdata",
  91. [
  92. {"old_password": ""},
  93. {"new_password": ""},
  94. {"confirm_new_password": ""},
  95. {"new_password": "doesntmatch"},
  96. ],
  97. )
  98. def test_invalid_inputs(self, formdata):
  99. data = {
  100. "old_password": "old_password",
  101. "new_password": "password",
  102. "confirm_new_password": "password",
  103. "submit": True,
  104. }
  105. data.update(formdata)
  106. form = forms.ChangePasswordForm(formdata=MultiDict(data))
  107. assert not form.validate_on_submit()
  108. class TestChangeUserDetailsForm(object):
  109. def test_transforms_to_expected_change_object(self):
  110. data = MultiDict(
  111. dict(
  112. submit=True,
  113. birthday="25 06 2000",
  114. gender="awesome",
  115. location="here",
  116. website="http://flaskbb.org",
  117. avatar="https://totally.real/image.img",
  118. signature="test often",
  119. notes="testy mctest face",
  120. )
  121. )
  122. form = forms.ChangeUserDetailsForm(formdata=data)
  123. expected = UserDetailsChange(
  124. birthday=date(2000, 6, 25),
  125. gender="awesome",
  126. location="here",
  127. website="http://flaskbb.org",
  128. avatar="https://totally.real/image.img",
  129. signature="test often",
  130. notes="testy mctest face",
  131. )
  132. assert form.as_change() == expected
  133. @pytest.mark.parametrize(
  134. "formdata",
  135. [
  136. {},
  137. dict(
  138. birthday="",
  139. gender="",
  140. location="",
  141. website="",
  142. avatar="",
  143. signature="",
  144. notes="",
  145. ),
  146. ],
  147. )
  148. def test_valid_inputs(self, formdata):
  149. data = dict(
  150. submit=True,
  151. birthday="25 06 2000",
  152. gender="awesome",
  153. location="here",
  154. website="http://flaskbb.org",
  155. avatar="https://totally.real/image.img",
  156. signature="test often",
  157. notes="testy mctest face",
  158. )
  159. data.update(formdata)
  160. form = forms.ChangeUserDetailsForm(
  161. formdata=MultiDict(data), meta={"csrf": False}
  162. )
  163. assert form.validate_on_submit()
  164. @pytest.mark.parametrize(
  165. "formdata",
  166. [{"avatar": "notaurl"}, {"website": "notanemail"}, {"notes": "a" * 5001}],
  167. )
  168. def test_invalid_inputs(self, formdata):
  169. data = dict(
  170. submit=True,
  171. birthday="25 06 2000",
  172. gender="awesome",
  173. location="here",
  174. website="http://flaskbb.org",
  175. avatar="https://totally.real/image.img",
  176. signature="test often",
  177. notes="testy mctest face",
  178. )
  179. data.update(formdata)
  180. form = forms.ChangeUserDetailsForm(
  181. formdata=MultiDict(data), meta={"csrf": False}
  182. )
  183. assert not form.validate_on_submit()