#!/bin/bash
# Copyright 2020 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.
#
# Tests for fpublish.

set -e

# Constants.
readonly PACKAGE_NAME=placeholder.far

# Paths.
SCRIPT_SRC_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"

# Verifies that the correct pm serve command is run by fpublish.
TEST_fpublish() {
  # Run command.
  BT_EXPECT "${BT_TEMP_DIR}/scripts/sdk/gn/base/bin/fpublish.sh" "${PACKAGE_NAME}"

  # Verify that pm serve was run correctly.
  source "${BT_TEMP_DIR}/scripts/sdk/gn/base/tools/pm.mock_state"
  local PM_ARGS=("${BT_MOCK_ARGS[@]:1}")

  # Expected commands to be run by fpublish.sh.
  local EXPECTED_PM_PUBLISH_ARGS=(
    publish
    -a
    -r "${BT_TEMP_DIR}/scripts/sdk/gn/base/images/packages/amber-files"
    -f "${PACKAGE_NAME}"
  )

  BT_EXPECT_EQ ${#EXPECTED_PM_PUBLISH_ARGS[@]} ${#PM_ARGS[@]}
  for i in "${!EXPECTED_PM_PUBLISH_ARGS[@]}"; do
    if [[ "$i" == "0" ]]; then
      # The path to pm isn't relevant. The fact that the pm mock state is
      # available is sufficient verification that pm was called.
      continue
    fi
    BT_EXPECT_EQ "${EXPECTED_PM_PUBLISH_ARGS[$i]}" "${PM_ARGS[$i]}"
  done

  # Verify that pm was only run once.
  BT_EXPECT_FILE_DOES_NOT_EXIST "${BT_TEMP_DIR}/scripts/sdk/gn/base/sdk/tools/pm.mock_state.1"
}

# Test initialization.
BT_FILE_DEPS=(
  scripts/sdk/gn/base/bin/fpublish.sh
  scripts/sdk/gn/base/bin/fuchsia-common.sh
)
BT_MOCKED_TOOLS=(
  scripts/sdk/gn/base/tools/pm
)

BT_RUN_TESTS "$@"
