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

DEPS = [
    'flutter/cache',
    'recipe_engine/assertions',
    'recipe_engine/json',
    'recipe_engine/path',
]


def RunSteps(api):
  result = api.cache.requires_refresh('builder')
  api.assertions.assertTrue(result)
  paths = [
      api.path.cache_dir / 'builder',
      api.path.cache_dir / 'git',
  ]
  api.cache.write('builder', paths, 60)
  api.cache.mount_cache('builder', api.path.cache_dir)
  api.cache.should_force_mount(api.path.cache_dir / 'builder')


def GenTests(api):
  metadata = {'hashes': {'builder': 'hash1', 'git': 'hash2'}}
  yield api.test(
      'basic', api.step_data(
          'gsutil cat',
          stdout=api.json.output({}),
      ),
      api.step_data(
          'Mount caches.gsutil cat',
          stdout=api.json.output(metadata),
      )
  )
  yield api.test(
      'no_cache_file',
      api.step_data('builder exists', stdout=api.json.output({}), retcode=1),
      api.step_data(
          'Mount caches.gsutil cat',
          stdout=api.json.output(metadata),
      )
  )
