from dataclasses import dataclass

from dataclasses_json import dataclass_json
from datetime import date
import dataclasses_json
import dataclasses_json.cfg


@dataclass_json
@dataclass
class Person:
    name: str


@dataclass_json
@dataclass
class PersonWithBirthday:
    name: str
    birthday: date


class TestGlobalConfig:
    def test_encoder_override(self):
        dataclasses_json.cfg.global_config.encoders[str] = lambda s: s[::-1]
        assert Person("Kobe Bryant").to_json() == '{"name": "tnayrB eboK"}'
        dataclasses_json.cfg.global_config.encoders = {}

    def test_encoder_extension(self):
        dataclasses_json.cfg.global_config.encoders[date] = date.isoformat
        assert PersonWithBirthday("Kobe Bryant", date(1978, 8, 23)).to_json() \
               == '{"name": "Kobe Bryant", "birthday": "1978-08-23"}'
        dataclasses_json.cfg.global_config.encoders = {}