# Copyright 2018 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("//build/testing/environments.gni")
import("//peridot/build/tests_package.gni")

group("systems") {
  testonly = true
  deps = [
    ":story_systems_unittests",
    ":story_visibility_system",
    ":story_visibility_system_unittest",
  ]
}

hermetic_tests_package("story_systems_unittests") {
  deps = [
    ":story_visibility_system_unittest",
  ]
  environments = basic_envs
}

source_set("story_visibility_system") {
  sources = [
    "story_visibility_system.cc",
    "story_visibility_system.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.modular",
  ]

  deps = [
    "//peridot/bin/sessionmgr/story:system",
    "//peridot/bin/sessionmgr/story/model",
    "//sdk/fidl/fuchsia.modular.storymodel",
  ]
}

executable("story_visibility_system_unittest") {
  testonly = true

  sources = [
    "story_visibility_system_unittest.cc",
  ]

  deps = [
    ":story_visibility_system",
    "//peridot/bin/sessionmgr/story/model",
    "//peridot/bin/sessionmgr/story/model/testing",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
    "//third_party/googletest:gtest_main",
  ]
}
