import 'dart:io';

import 'package:path/path.dart' as p;
import 'package:test/test.dart';

import '../descriptor.dart' as d;
import '../test_pub.dart';

void main() async {
  test('PUB_CACHE/README.md gets created by command downloading to pub cache',
      () async {
    final server = await servePackages();
    server.serve('foo', '1.0.0');
    await d.appDir().create();
    await pubGet();
    await d.nothing(cachePath).validate();

    await d.appDir(dependencies: {'foo': '1.0.0'}).create();
    await pubGet();
    await d.dir(cachePath, [
      d.file('README.md', contains('https://dart.dev/go/pub-cache')),
    ]).validate();
    File(pathInCache('README.md')).deleteSync();
    // No new download, so 'README.md' doesn't get updated.
    await pubGet();
    await d.dir(cachePath, [d.nothing('README.md')]).validate();
  });

  test('PUB_CACHE/README.md gets created by `dart pub cache clean`', () async {
    final server = await servePackages();
    server.serve('foo', '1.0.0');
    await d.appDir(dependencies: {'foo': '1.0.0'}).create();
    await pubGet();
    await d.dir(cachePath, [
      d.file('README.md', contains('https://dart.dev/go/pub-cache')),
    ]).validate();
  });

  test('PUB_CACHE/README.md gets created when compiling a snapshot', () async {
    final server = await servePackages();
    server.serve(
      'foo',
      '1.0.0',
      contents: [d.file('bin/foo.dart', "main() {print('Hello');}")],
    );
    await runPub(args: ['global', 'activate', 'foo']);
    File(p.join(d.sandbox, cachePath, 'README.md')).deleteSync();
    // Replace the created snapshot with one that really doesn't work with the
    // current dart.
    await d.dir(cachePath, [
      d.dir('global_packages', [
        d.dir('foo', [
          d.dir(
            'bin',
            [d.outOfDateSnapshot('foo.dart-3.1.2+3.snapshot')],
          ),
        ]),
      ]),
    ]).create();
    await runPub(args: ['global', 'run', 'foo'], output: contains('Hello'));
    await d.dir(cachePath, [
      d.file('README.md', contains('https://dart.dev/go/pub-cache')),
    ]).validate();
  });
}
