# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.


DEPS = [
  "gitiles",
  "recipe_engine/json",
  "recipe_engine/step",
  "recipe_engine/path",
  "recipe_engine/properties",
]


def RunSteps(api):
  url = "https://chromium.googlesource.com/chromium/src"
  for ref in api.gitiles.refs(url):
    _, cursor = api.gitiles.log(url, ref)
    if cursor:
      api.gitiles.log(url, ref, limit=10, cursor=cursor)
  api.gitiles.commit_log(url, api.properties["commit_log_hash"])

  data = api.gitiles.download_file(url, "OWNERS", attempts=5)
  assert data == "foobar"

  data = api.gitiles.download_file(url, "BYTES", attempts=5)
  assert data == b"\xab"

  data = api.gitiles.download_file(
    url, "NONEXISTENT", attempts=1, accept_statuses=[404]
  )

  api.gitiles.download_archive(url, api.path.start_dir / "archive")

  try:
    api.gitiles.download_archive(url, api.path.start_dir / "archive2")
    assert False  # pragma: no cover
  except api.step.StepFailure as ex:
    assert "/root" in ex.gitiles_skipped_files


def GenTests(api):
  yield (
    api.test("basic")
    + api.properties(
      commit_log_hash=api.gitiles.make_hash("commit"),
    )
    + api.step_data(
      "refs",
      api.gitiles.make_refs_test_data(
        "HEAD",
        "refs/heads/A",
        "refs/tags/B",
      ),
    )
    + api.step_data(
      "gitiles log: HEAD",
      api.gitiles.make_log_test_data("HEAD", cursor="deadbeaf"),
    )
    + api.step_data(
      "gitiles log: HEAD from deadbeaf",
      api.gitiles.make_log_test_data("HEAD"),
    )
    + api.step_data(
      "gitiles log: refs/heads/A",
      api.gitiles.make_log_test_data("A"),
    )
    + api.step_data(
      "gitiles log: refs/tags/B", api.gitiles.make_log_test_data("B")
    )
    + api.step_data(
      "commit log: %s" % (api.gitiles.make_hash("commit")),
      api.gitiles.make_commit_test_data(
        "commit",
        "C",
        new_files=[
          "foo/bar",
          "baz/qux",
        ],
      ),
    )
    + api.step_data(
      "fetch main:OWNERS", api.gitiles.make_encoded_file("foobar")
    )
    + api.step_data(
      "fetch main:BYTES", api.gitiles.make_encoded_file_from_bytes(b"\xab")
    )
    + api.step_data("fetch main:NONEXISTENT", api.json.output({"value": None}))
    + api.step_data(
      (
        "download https://chromium.googlesource.com/chromium/src @ "
        "refs/heads/main (2)"
      ),
      api.json.output(
        {
          "extracted": {
            "filecount": 10,
            "bytes": 14925,
          },
          "skipped": {
            "filecount": 4,
            "bytes": 7192345,
            "names": ["/root", "../relative", "sneaky/../../relative"],
          },
        }
      ),
    )
  )
