@echo off
setlocal

REM ============================================================
REM  Integration tests runner (Navisworks plugin + HTTP 18777).
REM
REM  Usage:
REM    run-integration-tests.bat                    -> full integration set
REM    run-integration-tests.bat "<filter>"         -> subset (e.g. "FullyQualifiedName~RealObjectAnimation")
REM
REM  Prereq: main Navisworks instance loaded with plugin and
REM          test HTTP service ready at 127.0.0.1:18777.
REM          (start via start-navisworks.bat, or run build-and-deploy.bat
REM          which launches Navisworks after deploy)
REM ============================================================

set FILTER=%1
if "%FILTER%"=="" set FILTER=TestCategory=NavisworksIntegration

echo Building NavisworksTransport.UnitTests (integration filter: %FILTER%)...

set MSBUILD_PATH="C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe"
if not exist %MSBUILD_PATH% (
    set MSBUILD_PATH="C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\MSBuild.exe"
)
if not exist %MSBUILD_PATH% (
    echo MSBuild not found. Please install Visual Studio 2022 or Build Tools.
    exit /b 1
)

set VSTEST_PATH="C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\TestPlatform\vstest.console.exe"
if not exist %VSTEST_PATH% (
    set VSTEST_PATH="C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\Extensions\TestPlatform\vstest.console.exe"
)
if not exist %VSTEST_PATH% (
    echo vstest.console.exe not found. Please install Visual Studio 2022 test tools.
    exit /b 1
)

REM 动态查找 MSTest adapter（避免包版本升级后硬编码路径失效）
for /d %%d in ("packages\MSTest.TestAdapter.*") do set TEST_ADAPTER_BASE=%%~fd
if not defined TEST_ADAPTER_BASE (
    echo MSTest adapter package not found under packages\MSTest.TestAdapter.*
    exit /b 1
)
set "TEST_ADAPTER_PATH=%TEST_ADAPTER_BASE%\build\net462"
if not exist "%TEST_ADAPTER_PATH%" (
    echo MSTest adapter net462 dir not found: %TEST_ADAPTER_PATH%
    exit /b 1
)

set NAVISWORKS_PATH=C:\Program Files\Autodesk\Navisworks Manage 2026
if not exist "%NAVISWORKS_PATH%\Autodesk.Navisworks.Api.dll" (
    echo Navisworks API path not found: %NAVISWORKS_PATH%
    exit /b 1
)

set PATH=%NAVISWORKS_PATH%;%PATH%

%MSBUILD_PATH% "NavisworksTransport.UnitTests.csproj" /p:Configuration=Release /p:Platform=x64 /verbosity:minimal
if errorlevel 1 (
    echo Unit test build failed!
    exit /b 1
)

REM --- 主实例就绪检查（HTTP 18777）---
curl -s --max-time 3 http://127.0.0.1:18777/api/test/ping > "%TEMP%\nw_ping.json" 2>nul
if errorlevel 1 goto notready
findstr /C:"true" "%TEMP%\nw_ping.json" >nul
if errorlevel 1 goto notready

echo Main instance ready. Running integration tests (filter: %FILTER%)...

goto runtests

:notready
echo.
echo [ERROR] Main Navisworks test service not reachable at 127.0.0.1:18777.
echo         Start it first via start-navisworks.bat (or build-and-deploy.bat).
exit /b 1

:runtests
%VSTEST_PATH% "bin\x64\Release\NavisworksTransport.UnitTests.dll" /Platform:x64 /TestAdapterPath:%TEST_ADAPTER_PATH% /TestCaseFilter:"%FILTER%"
if errorlevel 1 (
    echo Integration tests failed!
    exit /b 1
)

echo Integration tests passed!
