package aceboot::orm.tests

import aceboot::orm.common.*

import std.unittest.*
import std.unittest.testmacro.*

// 探针仓储基类型(实现 RepositoryBase),验证工厂注册表。
class _ProbeRepo <: RepositoryBase {
    public func createTable(): Unit {}
    public func entityTable(): String {
        "probe_table"
    }
}

@Test
func test_repository_factory_registry() {
    let before = repositoryFactoryCount()
    registerRepositoryFactory("ProbeRepo", {=> _ProbeRepo()})
    @Expect(repositoryFactoryCount(), before + 1)
    // 工厂可被消费:取出、调用、拿到 RepositoryBase
    var found = false
    for ((name, factory) in repositoryFactories()) {
        if (name == "ProbeRepo") {
            found = true
            @Expect(factory().entityTable(), "probe_table") // 工厂惰性创建并返回 RepositoryBase
        }
    }
    @Expect(found, true)
}