# 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.
"""Recipe for testing LUCI configs."""

from PB.recipes.fuchsia.luci_config import InputProperties

DEPS = [
    "fuchsia/git_checkout",
    "fuchsia/sso",
    "fuchsia/validate_lucicfg",
    "recipe_engine/properties",
]

PROPERTIES = InputProperties


def RunSteps(api, props):
    checkout_root, _ = api.git_checkout(api.sso.sso_to_https(props.remote))
    api.validate_lucicfg(checkout_root, props.validate_lucicfg_options)


def GenTests(api):
    yield api.test("basic") + api.properties(
        remote="https://fuchsia.googlesource.com/integration",
        validate_lucicfg_options=api.validate_lucicfg.options(),
    )
