from app.schemas.common import ScreenRequest, ScreenFilter
from pydantic import ValidationError

def accept(label, fn):
    fn()
    print("PASS:", label)

def reject(label, fn):
    try:
        fn()
    except ValidationError:
        print("PASS:", label)
        return
    raise AssertionError(label + " unexpectedly accepted")

accept(
    "16 filters accepted",
    lambda: ScreenRequest(
        filters=[
            ScreenFilter(metric="roe", op="gt", value=0.1)
            for _ in range(16)
        ]
    ),
)

accept(
    "20 filters accepted",
    lambda: ScreenRequest(
        filters=[
            ScreenFilter(metric="roe", op="gt", value=0.1)
            for _ in range(20)
        ]
    ),
)

reject(
    "21 filters rejected",
    lambda: ScreenRequest(
        filters=[
            ScreenFilter(metric="roe", op="gt", value=0.1)
            for _ in range(21)
        ]
    ),
)

accept(
    "48-character metric accepted",
    lambda: ScreenFilter(
        metric="a" * 48,
        op="gt",
        value=1,
    ),
)

reject(
    "49-character metric rejected",
    lambda: ScreenFilter(
        metric="a" * 49,
        op="gt",
        value=1,
    ),
)

print("SL-015 RUNTIME VALIDATION PASS")
