"""test example flows in docs"""
from glob import glob
from pathlib import Path
from typing import Callable

from django.test import TransactionTestCase

from passbook.flows.transfer.importer import FlowImporter


class TestTransferDocs(TransactionTestCase):
    """Empty class, test methods are added dynamically"""


def generic_view_tester(file_name: str) -> Callable:
    """This is used instead of subTest for better visibility"""

    def tester(self: TestTransferDocs):
        with open(file_name, "r") as flow_json:
            importer = FlowImporter(flow_json.read())
        self.assertTrue(importer.validate())
        self.assertTrue(importer.apply())

    return tester


for flow_file in glob("docs/flow/examples/*.json"):
    method_name = Path(flow_file).stem.replace("-", "_").replace(".", "_")
    setattr(
        TestTransferDocs, f"test_flow_{method_name}", generic_view_tester(flow_file)
    )