// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:io' show File;

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

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

void main() {
  test('removes a package from dependencies', () async {
    final server = await servePackages();
    server.serve('foo', '1.2.3');

    await d.appDir(dependencies: {'foo': '1.2.3'}).create();
    await pubGet();

    await pubRemove(args: ['foo']);

    await d.cacheDir({}).validate();
    await d.appPackageConfigFile([]).validate();
    await d.appDir().validate();
  });

  test('removing a package from dependencies does not affect dev_dependencies',
      () async {
    await servePackages()
      ..serve('foo', '1.2.3')
      ..serve('foo', '1.2.2')
      ..serve('bar', '2.0.0');

    await d.dir(appPath, [
      d.file('pubspec.yaml', '''
name: myapp
dependencies:
  foo: 1.2.3

dev_dependencies:
  bar: 2.0.0

environment:
  sdk: '$defaultSdkConstraint'
'''),
    ]).create();

    await pubRemove(args: ['foo']);

    await d.cacheDir({'bar': '2.0.0'}).validate();
    await d.appPackageConfigFile([
      d.packageConfigEntry(name: 'bar', version: '2.0.0'),
    ]).validate();

    await d.dir(appPath, [
      d.pubspec({
        'name': 'myapp',
        'dev_dependencies': {'bar': '2.0.0'},
      }),
    ]).validate();
  });

  test('dry-run does not actually remove dependency', () async {
    final server = await servePackages();
    server.serve('foo', '1.2.3');

    await d.appDir(dependencies: {'foo': '1.2.3'}).create();
    await pubGet();

    await pubRemove(
      args: ['foo', '--dry-run'],
      output: allOf([
        contains('These packages are no longer being depended on:'),
        contains('- foo 1.2.3'),
      ]),
    );

    await d.appDir(dependencies: {'foo': '1.2.3'}).validate();
  });

  test('prints a warning if package does not exist', () async {
    await d.appDir().create();
    await pubRemove(
      args: ['foo'],
      warning: contains('Package "foo" was not found in pubspec.yaml!'),
    );

    await d.appDir().validate();
  });

  test('prints a warning if the dependencies map does not exist', () async {
    await d.dir(appPath, [
      d.pubspec({'name': 'myapp'}),
    ]).create();
    await pubRemove(
      args: ['foo'],
      warning: contains('Package "foo" was not found in pubspec.yaml!'),
    );

    await d.dir(appPath, [
      d.pubspec({'name': 'myapp'}),
    ]).validate();
  });

  test('removes a package from dev_dependencies', () async {
    final server = await servePackages();
    server.serve('foo', '1.2.3');

    await d.dir(appPath, [
      d.pubspec({
        'name': 'myapp',
        'dev_dependencies': {'foo': '1.2.3'},
      }),
    ]).create();
    await pubGet();

    await pubRemove(args: ['foo']);

    await d.cacheDir({}).validate();
    await d.appPackageConfigFile([]).validate();

    await d.dir(appPath, [
      d.pubspec({'name': 'myapp'}),
    ]).validate();
  });

  test('removes multiple packages from dependencies and dev_dependencies',
      () async {
    await servePackages()
      ..serve('foo', '1.2.3')
      ..serve('bar', '2.3.4')
      ..serve('baz', '3.2.1')
      ..serve('jfj', '0.2.1');

    await d.dir(appPath, [
      d.pubspec({
        'name': 'myapp',
        'dependencies': {'bar': '>=2.3.4', 'jfj': '0.2.1'},
        'dev_dependencies': {'foo': '^1.2.3', 'baz': '3.2.1'},
      }),
    ]).create();
    await pubGet();

    await pubRemove(args: ['foo', 'bar', 'baz']);

    await d.cacheDir({'jfj': '0.2.1'}).validate();

    await d.appPackageConfigFile([
      d.packageConfigEntry(name: 'jfj', version: '0.2.1'),
    ]).validate();

    await d.dir(appPath, [
      d.pubspec({
        'name': 'myapp',
        'dependencies': {'jfj': '0.2.1'},
      }),
    ]).validate();
  });

  test('removes git dependencies', () async {
    final server = await servePackages();
    server.serve('bar', '1.2.3');

    ensureGit();
    final repo = d.git('foo.git', [
      d.dir('subdir', [d.libPubspec('foo', '1.0.0'), d.libDir('foo', '1.0.0')]),
    ]);
    await repo.create();

    await d.appDir(
      dependencies: {
        'foo': {
          'git': {'url': '../foo.git', 'path': 'subdir'},
        },
        'bar': '1.2.3',
      },
    ).create();

    await pubGet();

    await pubRemove(args: ['foo']);

    await d.appPackageConfigFile([
      d.packageConfigEntry(name: 'bar', version: '1.2.3'),
    ]).validate();
    await d.appDir(dependencies: {'bar': '1.2.3'}).validate();
  });

  test('removes path dependencies', () async {
    final server = await servePackages();
    server.serve('bar', '1.2.3');
    await d
        .dir('foo', [d.libDir('foo'), d.libPubspec('foo', '0.0.1')]).create();

    await d.appDir(
      dependencies: {
        'foo': {'path': '../foo'},
        'bar': '1.2.3',
      },
    ).create();

    await pubGet();

    await pubRemove(args: ['foo']);
    await d.appPackageConfigFile([
      d.packageConfigEntry(name: 'bar', version: '1.2.3'),
    ]).validate();
    await d.appDir(dependencies: {'bar': '1.2.3'}).validate();
  });

  test('removes hosted dependencies', () async {
    final server = await servePackages();
    server.serve('bar', '2.0.1');

    final custom = await startPackageServer();
    custom.serve('foo', '1.2.3');

    await d.appDir(
      dependencies: {
        'foo': {
          'version': '1.2.3',
          'hosted': {'name': 'foo', 'url': 'http://localhost:${custom.port}'},
        },
        'bar': '2.0.1',
      },
    ).create();

    await pubGet();

    await pubRemove(args: ['foo']);
    await d.appPackageConfigFile([
      d.packageConfigEntry(name: 'bar', version: '2.0.1'),
    ]).validate();
    await d.appDir(dependencies: {'bar': '2.0.1'}).validate();
  });

  test('removes overrides', () async {
    final server = await servePackages();
    server.serve('foo', '1.0.0', deps: {'bar': '1.0.0'});
    server.serve('bar', '1.0.0');
    server.serve('bar', '2.0.0');

    await d.dir(appPath, [
      d.pubspec({
        'name': 'myapp',
        'dependencies': {'foo': '^1.0.0'},
        'dev_dependencies': {'bar': '^2.0.0'},
        'dependency_overrides': {'bar': '1.0.0'},
      }),
    ]).create();

    await pubGet();

    // Cannot remove the constraint on bar, would create conflict.
    await pubRemove(
      args: ['override:bar'],
      error: contains('version solving failed.'),
      exitCode: 1,
    );
    await pubRemove(args: ['override:bar', 'foo']);
    await d.appPackageConfigFile([
      d.packageConfigEntry(name: 'bar', version: '2.0.0'),
    ]).validate();
  });

  test('preserves comments', () async {
    await servePackages()
      ..serve('bar', '1.0.0')
      ..serve('foo', '1.0.0');

    await d.dir(appPath, [
      d.file('pubspec.yaml', '''
        name: myapp
        dependencies: # comment A
            # comment B
            bar: 1.0.0 
            # comment C
            foo: 1.0.0 # comment D
          # comment E
        environment:
          sdk: '$defaultSdkConstraint'
    '''),
    ]).create();

    await pubGet();

    await pubRemove(args: ['bar']);

    await d.appDir(dependencies: {'foo': '1.0.0'}).validate();
    final fullPath = p.join(d.sandbox, appPath, 'pubspec.yaml');
    expect(File(fullPath).existsSync(), true);
    final contents = File(fullPath).readAsStringSync();
    expect(
      contents,
      allOf([
        contains('# comment A'),
        contains('# comment B'),
        contains('# comment C'),
        contains('# comment D'),
        contains('# comment E'),
      ]),
    );
  });
  test('removes dependencies or dev_dependencies key if empty', () async {
    await servePackages()
      ..serve('foo', '1.2.3')
      ..serve('bar', '2.3.4');

    await d.dir(appPath, [
      d.pubspec({
        'name': 'myapp',
        'dependencies': {'bar': '>=2.3.4'},
        'dev_dependencies': {'foo': '^1.2.3'},
      }),
    ]).create();
    await pubGet();

    await pubRemove(args: ['foo', 'bar']);

    await d.appPackageConfigFile([]).validate();

    await d.dir(appPath, [
      d.pubspec({
        'name': 'myapp',
      }),
    ]).validate();
  });
}
