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

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

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

fuchsia_unittest_component("account_handler_test") {
  deps = [ "account_handler:bin_test" ]
  manifest = "meta/account_handler_bin_test.cmx"
}

fuchsia_unittest_component("account_manager_test") {
  deps = [ "account_manager:bin_test" ]
  manifest = "meta/account_manager_bin_test.cml"
}

fuchsia_unittest_component("dev_auth_provider_test") {
  deps = [ "dev_auth_provider:bin_test" ]
}

fuchsia_unittest_component("dev_authenticator_test") {
  deps = [ "dev_authenticator:bin_test" ]
}

fuchsia_unittest_component("google_auth_provider_test") {
  deps = [ "google_auth_provider:bin_test" ]
}

fuchsia_test_package("identity_bin_unittests") {
  test_components = [
    ":account_handler_test",
    ":account_manager_test",
    ":dev_auth_provider_test",
    ":dev_authenticator_test",
    ":google_auth_provider_test",
  ]
}

# Account system 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("account_system") {
  public_deps = [
    "account",
    "account_handler",
    "account_manager",
    "account_manager:account_manager_auth_providers",
    "credential_manager",
    "password_authenticator",
  ]
}

# This temporary group should be used in place of account_system until the
# account system is re-enabled following an extended lack of maintenance. It
# provides a minimal implementation of the account API supporting only one
# account with only one authentication mechanism.
group("minimal_auth") {
  public_deps = [
    "account",
    "credential_manager",
    "password_authenticator",
  ]
}
