Skip to content

Instantly share code, notes, and snippets.

@gidgid
Created December 15, 2020 15:11
Show Gist options
  • Save gidgid/13e7c4dbd39d8bf391dd6273f889735c to your computer and use it in GitHub Desktop.
Save gidgid/13e7c4dbd39d8bf391dd6273f889735c to your computer and use it in GitHub Desktop.
from typing import Dict, Generic, TypeVar
import pytest
from adt import Case, adt
T = TypeVar("T")
@adt
class Option(Generic[T]):
SOME: Case[T]
NONE: Case
def parse_name(request: Dict[str, str]) -> Option[str]:
name = request.get("name")
return Option.SOME(name) if name else Option.NONE()
@pytest.mark.parametrize(
"key,value,expected_result",
[
("name", "john", "john"),
("not-a-name", "jaqen h'ghar", "No value"),
],
)
def test_parse(key, value, expected_result):
parsed_name = parse_name({key: value})
actual_value = parsed_name.match(some=lambda v: v, none=lambda: "No value")
assert actual_value == expected_result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment