list(APPEND CMAKE_MODULE_PATH ${catch2_SOURCE_DIR}/extras)
include(CTest)
include(Catch)

# ── Unit tests ───────────────────────────────────────────────────────────────
add_executable(bridgehead_unit_tests
    unit/test_varint.cpp
    unit/test_nmf_framing.cpp
    unit/test_nbfse_codec.cpp
    unit/test_soap_fault.cpp
    unit/test_search_scope.cpp
    unit/test_binary_attrs.cpp
    unit/test_resource_endpoint.cpp
    unit/test_security_descriptor.cpp
    unit/test_client_pool.cpp
    unit/test_async.cpp
    unit/test_exceptions.cpp
)
target_link_libraries(bridgehead_unit_tests PRIVATE
    bridgehead
    Catch2::Catch2WithMain
)
if(MSVC)
    target_compile_definitions(bridgehead_unit_tests PRIVATE
        _CRT_SECURE_NO_WARNINGS NOMINMAX WIN32_LEAN_AND_MEAN)
endif()
catch_discover_tests(bridgehead_unit_tests)

# ── Integration tests (opt-in, require live AD) ──────────────────────────────
if(BRIDGEHEAD_INTEGRATION_TESTS)
    add_executable(bridgehead_integration_tests
        integration/test_adws_enumerate_users.cpp
    )
    target_link_libraries(bridgehead_integration_tests PRIVATE bridgehead)
    if(MSVC)
        target_compile_definitions(bridgehead_integration_tests PRIVATE
            _CRT_SECURE_NO_WARNINGS NOMINMAX WIN32_LEAN_AND_MEAN)
    endif()
    # Not registered with ctest by default -- run manually

    add_executable(bridgehead_integration_tests_write
        integration/test_adws_write_ops.cpp
    )
    target_link_libraries(bridgehead_integration_tests_write PRIVATE bridgehead)
    if(MSVC)
        target_compile_definitions(bridgehead_integration_tests_write PRIVATE
            _CRT_SECURE_NO_WARNINGS NOMINMAX WIN32_LEAN_AND_MEAN)
    endif()
    # Not registered with ctest by default -- run manually
endif()
