rover: add non-negative coordinate validation
This commit is contained in:
parent
ce0241b3f4
commit
1fbf7ece7c
|
@ -2,13 +2,25 @@ import enum
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel, validator
|
||||||
|
|
||||||
|
|
||||||
class Vector(BaseModel):
|
class Vector(BaseModel):
|
||||||
x: int = 0
|
x: int = 0
|
||||||
y: int = 0
|
y: int = 0
|
||||||
|
|
||||||
|
@validator("x")
|
||||||
|
def _x_must_be_positive(x):
|
||||||
|
if x < 0:
|
||||||
|
raise ValueError("x must be positive")
|
||||||
|
return x
|
||||||
|
|
||||||
|
@validator("y")
|
||||||
|
def _y_must_be_positive(y):
|
||||||
|
if y < 0:
|
||||||
|
raise ValueError("y must be positive")
|
||||||
|
return y
|
||||||
|
|
||||||
|
|
||||||
class Direction(enum.Enum):
|
class Direction(enum.Enum):
|
||||||
NORTH = "N"
|
NORTH = "N"
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
from pydantic import ValidationError
|
||||||
|
|
||||||
from rover import Commander, Direction, ObstacleError, Rover, Vector
|
from rover import Commander, Direction, ObstacleError, Rover, Vector
|
||||||
|
|
||||||
|
|
||||||
|
@ -225,3 +227,13 @@ def test_commander_command_with_obstacles():
|
||||||
with pytest.raises(ObstacleError):
|
with pytest.raises(ObstacleError):
|
||||||
com.parse_execute("FFRF")
|
com.parse_execute("FFRF")
|
||||||
assert com.rover == Rover(pos=Vector(x=0, y=2), dir=Direction.EAST)
|
assert com.rover == Rover(pos=Vector(x=0, y=2), dir=Direction.EAST)
|
||||||
|
|
||||||
|
|
||||||
|
def test_rover_negative_x_construction():
|
||||||
|
with pytest.raises(ValidationError):
|
||||||
|
_ = Rover(pos=Vector(x=-1, y=0))
|
||||||
|
|
||||||
|
|
||||||
|
def test_rover_negative_y_construction():
|
||||||
|
with pytest.raises(ValidationError):
|
||||||
|
_ = Rover(pos=Vector(x=0, y=-1))
|
||||||
|
|
Loading…
Reference in a new issue