enable_language(CXX)

# Default to C++17
if(NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 17)
endif()

find_package(GTest REQUIRED)

add_test(NAME fixtures_cleanup COMMAND
  ${CMAKE_COMMAND} -E remove_directory
  "${CMAKE_CURRENT_BINARY_DIR}/fixtures")

set_tests_properties(fixtures_cleanup PROPERTIES
  FIXTURES_SETUP REPO_FIXTURES)

add_test(NAME fixtures_copy COMMAND
  ${CMAKE_COMMAND} -E copy_directory
  "${CMAKE_CURRENT_SOURCE_DIR}/fixtures"
  "${CMAKE_CURRENT_BINARY_DIR}/fixtures")

set_tests_properties(fixtures_copy PROPERTIES
  DEPENDS fixtures_cleanup
  FIXTURES_SETUP REPO_FIXTURES)

macro(add_cache_test NAME)
  add_executable(test_${NAME} "main.cpp" "test_${NAME}.cpp")
  target_link_libraries(test_${NAME}
    "$<$<AND:$<CXX_COMPILER_ID:GNU>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,9.0>>:-lstdc++fs>"
    createrepo-cache
    GTest::gtest)
  add_test(NAME ${NAME} COMMAND test_${NAME})
endmacro()

macro(add_integration_test NAME)
  add_executable(test_${NAME} "integration_main.cpp" "test_${NAME}.cpp")
  target_link_libraries(test_${NAME}
    "$<$<AND:$<CXX_COMPILER_ID:GNU>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,9.0>>:-lstdc++fs>"
    createrepo-agent-lib
    GTest::gtest)
  add_test(NAME ${NAME} COMMAND test_${NAME})
  set_tests_properties(${NAME} PROPERTIES
    FIXTURES_REQUIRED REPO_FIXTURES)
endmacro()

add_test(NAME agent_help COMMAND createrepo-agent --help)
add_test(NAME agent_version COMMAND createrepo-agent --version)

add_cache_test(coordinator)
add_cache_test(copy_file)
add_cache_test(repo_cache_flush)
add_cache_test(repo_cache_invalidate)
add_cache_test(repo_cache_modify)

add_integration_test(smoke)

if(WITH_PYTHON)
  add_test(
    NAME pytest
    COMMAND ${CMAKE_COMMAND} -E env
      "PYTHONPATH=$<TARGET_FILE_DIR:createrepo_agent>"
      "PYTHONDONTWRITEBYTECODE=1"
      ${Python_EXECUTABLE} -m pytest ${CMAKE_CURRENT_SOURCE_DIR}
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
endif()
