# 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/test/test_package.gni")

group("bin") {
  testonly = true
  deps = [
    ":identity_bin_unittests",
    "account_handler",
    "account_manager",
    "dev_auth_provider",
    "dev_authenticator",
    "google_auth_provider",
    "token_manager_factory",
  ]
}

group("tests") {
  testonly = true
  deps = [ ":identity_bin_unittests" ]
}

test_package("identity_bin_unittests") {
  deps = [
    "account_handler:bin_test",
    "account_manager:bin_test",
    "dev_auth_provider:bin_test",
    "dev_authenticator:bin_test",
    "google_auth_provider:bin_test",
  ]

  tests = [
    {
      name = "account_handler_bin_test"
    },
    {
      name = "account_manager_bin_test"
    },
    {
      name = "dev_auth_provider_bin_test"
    },
    {
      name = "dev_authenticator_bin_test"
    },
    {
      name = "google_auth_provider_bin_test"
    },
  ]
}

# Tier 1 should be included in products that only require token management
# without support for platform-level accounts or authentication.
group("tier_1") {
  public_deps = [
    "google_auth_provider",
    "token_manager_factory",
  ]
}

# Tier 2 should be included in products that require platform-level accounts
# (i.e. representations of the people using the Fuchsia device). It provides
# authentication, data isolation, and token management for these accounts.
group("tier_2") {
  public_deps = [
    "account_handler",
    "account_manager",
    "account_manager:account_manager_auth_providers",
  ]
}
