From b98e63f938215fa1294cd32539579aef73beb507 Mon Sep 17 00:00:00 2001 From: Chris Gregory Date: Sun, 29 Dec 2024 17:26:45 -0800 Subject: [PATCH] Add test for invalid version string --- src/myxa/models.py | 6 ++++++ tests/test_models.py | 10 ++++++++++ 2 files changed, 16 insertions(+) create mode 100644 tests/test_models.py diff --git a/src/myxa/models.py b/src/myxa/models.py index 5e330cc..e3e0a42 100644 --- a/src/myxa/models.py +++ b/src/myxa/models.py @@ -1,9 +1,12 @@ import logging +import re from enum import StrEnum from typing import Literal, Optional, Self, Union from pydantic import BaseModel, Field +from myxa.errors import UserError + logger = logging.getLogger(__name__) @@ -58,6 +61,9 @@ def to_str(self) -> str: @classmethod def from_str(cls, s: str) -> Self: + if not re.match(r"\d+\.\d+", s): + msg = f"Invalid version string: {s}" + raise UserError(msg) parts = s.split(".") major = int(parts[0]) minor = int(parts[1]) diff --git a/tests/test_models.py b/tests/test_models.py new file mode 100644 index 0000000..4b7ef25 --- /dev/null +++ b/tests/test_models.py @@ -0,0 +1,10 @@ +import pytest + +from myxa.errors import UserError +from myxa.models import Version + + +class TestModels: + def test_version_invalid_from_str_raises_user_error(self) -> None: + with pytest.raises(UserError, match="Invalid version string: 100"): + Version.from_str("100")