# Copyright 2016 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//peridot/build/tests_package.gni")

hermetic_tests_package("maxwell_integration_tests") {
  deps = [
    ":context_engine_test",
    ":suggestion_engine_test",
  ]
}

executable("context_engine_test") {
  testonly = true

  sources = [
    "context_engine_test.cc",
  ]

  deps = [
    ":context_common",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//peridot/bin/context_engine:scope_utils",
    "//peridot/lib/testing:entity_resolver_fake",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/context/cpp:context_helper",
    "//peridot/public/lib/context/cpp:context_metadata_builder",
    "//third_party/googletest:gtest_main",
  ]
}

executable("suggestion_engine_test") {
  testonly = true

  sources = [
    "suggestion_engine_test.cc",
  ]

  deps = [
    ":context_common",
    ":test_suggestion_listener",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//peridot/lib/rapidjson",
    "//peridot/lib/testing:story_provider_mock",
    "//peridot/lib/testing:wait_until_idle",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/context/cpp:context_helper",
    "//third_party/googletest:gtest_main",
  ]
}

# TODO(rosswang): move utils to a subdirectory

source_set("context_common") {
  testonly = true

  sources = [
    "context_engine_test_base.cc",
    "context_engine_test_base.h",
  ]

  deps = [
    ":common",
    "//peridot/lib/testing:wait_until_idle",
  ]

  public_deps = [
    "//peridot/public/fidl/fuchsia.modular",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

source_set("common") {
  testonly = true

  sources = [
    "test.cc",
    "test.h",
  ]

  deps = [
    "//peridot/bin/sessionmgr:agent_launcher",
    "//peridot/lib/environment_host",
    "//peridot/lib/testing:component_context_fake",
    "//peridot/lib/testing:entity_resolver_fake",
  ]

  public_deps = [
    "//garnet/public/lib/component/cpp",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

source_set("test_suggestion_listener") {
  testonly = true

  sources = [
    "test_suggestion_listener.cc",
    "test_suggestion_listener.h",
  ]

  deps = [
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/fostr/fidl/fuchsia.modular",
  ]

  public_deps = [
    "//third_party/googletest:gtest",
  ]
}
