set(KAZV_TEST_TEMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/test-temp)
configure_file(test-temp.hpp.in test-temp.hpp)

set(kazvtestlib_SRCS
  test-model.cpp
)

add_library(kazvtestlib STATIC ${kazvtestlib_SRCS})
target_include_directories(kazvtestlib PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries(kazvtestlib PUBLIC kazvprivlib libkazv::kazvtestfixtures)

add_executable(matrix-sdk-session-loader matrix-sdk-session-loader.cpp matrix-sdk-sessions-test.cpp)
target_compile_definitions(matrix-sdk-session-loader PRIVATE MATRIX_SDK_SESSIONS_TEST_NO_MAIN)
target_link_libraries(matrix-sdk-session-loader Qt${QT_MAJOR_VERSION}::Test kazvtestlib)

ecm_add_tests(
  qt-job-handler-test.cpp
  qt-promise-handler-test.cpp
  qt-json-test.cpp
  device-mgmt-test.cpp
  matrix-session-test.cpp
  matrix-session-controller-test.cpp
  matrix-sdk-sessions-test.cpp
  matrix-promise-test.cpp
  matrix-room-timeline-test.cpp
  matrix-room-pinned-events-timeline-test.cpp
  matrix-room-member-list-model-test.cpp
  matrix-room-list-test.cpp
  matrix-room-state-test.cpp
  kazv-markdown-test.cpp
  matrix-sticker-pack-test.cpp
  matrix-link-test.cpp
  matrix-user-given-attrs-map-test.cpp
  kazv-abstract-list-model-test.cpp
  matrix-event-list-test.cpp
  matrix-event-test.cpp
  kazv-file-test.cpp
  db-store-test.cpp
  sso-login-process-test.cpp
  kazv-config-test.cpp
  LINK_LIBRARIES Qt${QT_MAJOR_VERSION}::Test kazvtestlib
)

ecm_add_test(
  kazv-io-job-test.cpp
  LINK_LIBRARIES Qt${QT_MAJOR_VERSION}::Test Qt${QT_MAJOR_VERSION}::HttpServer kazvtestlib
)

ecm_add_test(
  kazv-io-manager-test.cpp
  LINK_LIBRARIES Qt${QT_MAJOR_VERSION}::Test Qt${QT_MAJOR_VERSION}::HttpServer kazvtestlib
)

add_executable(quicktest quick-test.cpp)

target_link_libraries(quicktest PRIVATE Qt${QT_MAJOR_VERSION}::QuickTest kazvtestlib)

if(KAZV_BUILD_BENCHMARKS)
  ecm_add_test(
    matrix-room-timeline-benchmark-test.cpp
    LINK_LIBRARIES Qt${QT_MAJOR_VERSION}::Test kazvtestlib
  )
endif()

set(quicktest_QMLS
  tst_About.qml
  tst_AddStickerPopup.qml
  tst_AvatarImageAdapters.qml
  tst_ConfirmUploadPopup.qml
  tst_CreateRoomPage.qml
  tst_DeviceList.qml
  tst_DevicePopup.qml
  tst_Device.qml
  tst_EventHistoryView.qml
  tst_EventReactions.qml
  tst_EventReadIndicator.qml
  tst_EventSourceView.qml
  tst_EventView.qml
  tst_EventViewRedacted.qml
  tst_EventViewVideo.qml
  tst_FileHandler.qml
  tst_JoinRoomPage.qml
  tst_KazvIOMenu.qml
  tst_kazvshortcutsActionItem.qml
  tst_LoginPage.qml
  tst_MatrixHelpers.qml
  tst_Notifications.qml
  tst_PageManager.qml
  tst_ReactToEventPopup.qml
  tst_RoomInvitePage.qml
  tst_RoomListViewItemDelegate.qml
  tst_RoomMemberListPage.qml
  tst_RoomNameProvider.qml
  tst_RoomPage.qml
  tst_RoomPinnedEventsPage.qml
  tst_RoomSettingsPage.qml
  tst_RoomStatePage.qml
  tst_RoomStickerPackItemDelegate.qml
  tst_RoomStickerPacksPage.qml
  tst_RoomTimelineView.qml
  tst_SendMessageBoxDrafts.qml
  tst_SendMessageBox.qml
  tst_StickerPackNameProvider.qml
  tst_StickerPicker.qml
  tst_TypingIndicator.qml
  tst_UserNameProvider.qml
  tst_UserPage.qml
)
foreach(testfilename ${quicktest_QMLS})
  message(STATUS "Adding quick test ${testfilename}")
  string(REPLACE .qml "" testname ${testfilename})
  add_test(NAME ${testname} COMMAND quicktest -input ${CMAKE_CURRENT_SOURCE_DIR}/quick-tests/${testfilename})
  set_property(TEST ${testname}
    PROPERTY LABELS "quicktest")
endforeach()

if(kazv_ENABLE_APPIUM_TESTS)
  qt_add_qml_module(kazvappiumcomponentqmlmodule
    STATIC
    URI moe.kazv.mxc.kazvappiumcomponent
    VERSION 0.0
  )

  kazv_add_qml_files(kazvappiumcomponentqmlmodule
    BASE_DIRECTORY run-appium-component-qml
    SOURCES
    Main.qml
  )

  add_executable(run-appium-component run-appium-component.cpp)
  target_link_libraries(run-appium-component
    PRIVATE
    kazvappiumcomponentqmlmodule
    kazvappiumcomponentqmlmoduleplugin
    kazvtestlib
    Qt::Quick
  )

  set(appium_tests_SOURCES
    TestStickerPicker.py
    TestEventViewUnavailable.py
    TestRoomTimelineView.py
  )
  foreach(testfilename ${appium_tests_SOURCES})
    message(STATUS "Adding appium test ${testfilename}")
    string(REPLACE .py "" testname ${testfilename})
    add_test(NAME ${testname}
      COMMAND
      ${SELENIUM_WEBDRIVER_AT_SPI_RUN_PATH}
      ${CMAKE_CURRENT_SOURCE_DIR}/appium-tests/${testfilename}
    )
    set_property(TEST ${testname}
      PROPERTY ENVIRONMENT "KAZV_APPIUM_TEST_BIN=$<TARGET_FILE:run-appium-component>;TEST_WITH_VIDEO_RECORDER=0")
    set_property(TEST ${testname}
      PROPERTY LABELS "appiumtest")
  endforeach()
endif()
