diff options
author | David Robertson <davidr@element.io> | 2022-09-15 18:36:02 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-15 18:36:02 +0100 |
commit | 742f9f9d78490f7f16bdb607a8f61ca258d520ef (patch) | |
tree | 5994c71ad2302aed93d385fb49d3a2716541baa0 /tests/rest | |
parent | Add a `MXCUri` class to make working with mxc uri's easier. (#13162) (diff) | |
download | synapse-742f9f9d78490f7f16bdb607a8f61ca258d520ef.tar.xz |
A third batch of Pydantic validation for rest/client/account.py (#13736)
Diffstat (limited to 'tests/rest')
-rw-r--r-- | tests/rest/client/test_models.py | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/tests/rest/client/test_models.py b/tests/rest/client/test_models.py index a9da00665e..0b8fcb0c47 100644 --- a/tests/rest/client/test_models.py +++ b/tests/rest/client/test_models.py @@ -11,14 +11,37 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import unittest +import unittest as stdlib_unittest -from pydantic import ValidationError +from pydantic import BaseModel, ValidationError +from typing_extensions import Literal from synapse.rest.client.models import EmailRequestTokenBody -class EmailRequestTokenBodyTestCase(unittest.TestCase): +class ThreepidMediumEnumTestCase(stdlib_unittest.TestCase): + class Model(BaseModel): + medium: Literal["email", "msisdn"] + + def test_accepts_valid_medium_string(self) -> None: + """Sanity check that Pydantic behaves sensibly with an enum-of-str + + This is arguably more of a test of a class that inherits from str and Enum + simultaneously. + """ + model = self.Model.parse_obj({"medium": "email"}) + self.assertEqual(model.medium, "email") + + def test_rejects_invalid_medium_value(self) -> None: + with self.assertRaises(ValidationError): + self.Model.parse_obj({"medium": "interpretive_dance"}) + + def test_rejects_invalid_medium_type(self) -> None: + with self.assertRaises(ValidationError): + self.Model.parse_obj({"medium": 123}) + + +class EmailRequestTokenBodyTestCase(stdlib_unittest.TestCase): base_request = { "client_secret": "hunter2", "email": "alice@wonderland.com", |