// 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 'package:pub/src/entrypoint.dart';
import 'package:pub/src/validator.dart';
import 'package:pub/src/validator/relative_version_numbering.dart';
import 'package:test/test.dart';

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

Validator validator(Entrypoint entrypoint) => RelativeVersionNumberingValidator(
      entrypoint,
      Uri.parse(globalPackageServer!.url),
    );

Future<void> setup({required String sdkConstraint}) async {
  await d.validPackage.create();
  await d.dir(appPath, [
    d.pubspec({
      'name': 'test_pkg',
      'version': '1.0.0',
      'environment': {'sdk': sdkConstraint},
    }),
  ]).create();

  await pubGet(environment: {'_PUB_TEST_SDK_VERSION': '2.12.0'});
}

void main() {
  group('should consider a package valid if it', () {
    test('is not opting in to null-safety with previous non-null-safe version',
        () async {
      await servePackages(
        (server) => server.serve(
          'test_pkg',
          '0.0.1',
          pubspec: {
            'environment': {'sdk': '>=2.9.0<3.0.0'}
          },
        ),
      );

      await setup(sdkConstraint: '>=2.9.0 <3.0.0');
      await expectValidation(validator);
    });

    test(
        'is not opting in to null-safety with previous non-null-safe version. '
        'Even with a later null-safe version', () async {
      await servePackages(
        (server) => server
          ..serve(
            'test_pkg',
            '0.0.1',
            pubspec: {
              'environment': {'sdk': '>=2.9.0<3.0.0'}
            },
          )
          ..serve(
            'test_pkg',
            '2.0.0',
            pubspec: {
              'environment': {'sdk': '>=2.12.0<3.0.0'}
            },
          ),
      );

      await setup(sdkConstraint: '>=2.9.0 <3.0.0');
      await expectValidation(validator);
    });

    test('is opting in to null-safety with previous null-safe version',
        () async {
      await servePackages(
        (server) => server.serve(
          'test_pkg',
          '0.0.1',
          pubspec: {
            'environment': {'sdk': '>=2.12.0<3.0.0'}
          },
        ),
      );

      await setup(sdkConstraint: '>=2.12.0 <3.0.0');
      await expectValidation(validator);
    });

    test(
        'is opting in to null-safety using a pre-release of 2.12.0 '
        'with previous null-safe version', () async {
      await servePackages(
        (server) => server.serve(
          'test_pkg',
          '0.0.1',
          pubspec: {
            'environment': {'sdk': '>=2.12.0<3.0.0'}
          },
        ),
      );

      await setup(sdkConstraint: '>=2.12.0-dev <3.0.0');
      await expectValidation(validator);
    });

    test(
        'is opting in to null-safety with previous null-safe version. '
        'Even with a later non-null-safe version', () async {
      await servePackages(
        (server) => server
          ..serve(
            'test_pkg',
            '0.0.1',
            pubspec: {
              'environment': {'sdk': '>=2.12.0<3.0.0'}
            },
          )
          ..serve(
            'test_pkg',
            '2.0.1',
            pubspec: {
              'environment': {'sdk': '>=2.9.0<3.0.0'}
            },
          ),
      );

      await setup(sdkConstraint: '>=2.12.0 <3.0.0');
      await expectValidation(validator);
    });

    test('is opting in to null-safety with no existing versions', () async {
      await setup(sdkConstraint: '>=2.12.0 <3.0.0');
      await servePackages((x) => x);
      await expectValidation(validator);
    });

    test('is not opting in to null-safety with no existing versions', () async {
      await setup(sdkConstraint: '>=2.9.0 <3.0.0');
      await servePackages((x) => x);

      await expectValidation(validator);
    });

    test(
        'is not opting in to null-safety with previous null-safe stable version. '
        'With an in-between not null-safe prerelease', () async {
      await servePackages(
        (server) => server
          ..serve(
            'test_pkg',
            '0.0.1',
            pubspec: {
              'environment': {'sdk': '>=2.12.0<3.0.0'}
            },
          )
          ..serve(
            'test_pkg',
            '0.0.2-dev',
            pubspec: {
              'environment': {'sdk': '>=2.9.0<3.0.0'}
            },
          ),
      );

      await setup(sdkConstraint: '>=2.9.0 <3.0.0');
      await expectValidation(validator);
    });

    test(
        'opts in to null-safety, with previous stable version not-null-safe. '
        'With an in-between non-null-safe prerelease', () async {
      await servePackages(
        (server) => server
          ..serve(
            'test_pkg',
            '0.0.1',
            pubspec: {
              'environment': {'sdk': '>=2.9.0<3.0.0'}
            },
          )
          ..serve(
            'test_pkg',
            '0.0.2-dev',
            pubspec: {
              'environment': {'sdk': '>=2.12.0<3.0.0'}
            },
          ),
      );

      await setup(sdkConstraint: '>=2.12.0 <3.0.0');
      await expectValidation(validator);
    });
  });

  group('should warn if ', () {
    test('opts in to null-safety, with previous version not-null-safe',
        () async {
      await servePackages(
        (server) => server.serve(
          'test_pkg',
          '0.0.1',
          pubspec: {
            'environment': {'sdk': '>=2.9.0<3.0.0'}
          },
        ),
      );

      await setup(sdkConstraint: '>=2.12.0 <3.0.0');
      await expectValidation(validator, hints: isNotEmpty);
    });

    test(
        'is not opting in to null-safety with no existing stable versions. '
        'With a previous in-between null-safe prerelease', () async {
      await setup(sdkConstraint: '>=2.9.0 <3.0.0');
      await servePackages(
        (server) => server.serve(
          'test_pkg',
          '0.0.2-dev',
          pubspec: {
            'environment': {'sdk': '>=2.12.0<3.0.0'}
          },
        ),
      );

      await expectValidation(validator, hints: isNotEmpty);
    });
    test(
        'is not opting in to null-safety with previous non-null-safe stable version. '
        'With an in-between null-safe prerelease', () async {
      await servePackages(
        (server) => server
          ..serve(
            'test_pkg',
            '0.0.1',
            pubspec: {
              'environment': {'sdk': '>=2.9.0<3.0.0'}
            },
          )
          ..serve(
            'test_pkg',
            '0.0.2-dev',
            pubspec: {
              'environment': {'sdk': '>=2.12.0<3.0.0'}
            },
          ),
      );

      await setup(sdkConstraint: '>=2.9.0 <3.0.0');
      await expectValidation(validator, hints: isNotEmpty);
    });

    test(
        'opts in to null-safety, with previous version not-null-safe. '
        'Even with a later null-safe version', () async {
      await servePackages(
        (server) => server
          ..serve(
            'test_pkg',
            '0.0.1',
            pubspec: {
              'environment': {'sdk': '>=2.9.0<3.0.0'}
            },
          )
          ..serve(
            'test_pkg',
            '2.0.0',
            pubspec: {
              'environment': {'sdk': '>=2.12.0<3.0.0'}
            },
          ),
      );

      await setup(sdkConstraint: '>=2.12.0 <3.0.0');
      await expectValidation(validator, hints: isNotEmpty);
    });

    test('is not opting in to null-safety with previous null-safe version',
        () async {
      await servePackages(
        (server) => server.serve(
          'test_pkg',
          '0.0.1',
          pubspec: {
            'environment': {'sdk': '>=2.12.0<3.0.0'}
          },
        ),
      );

      await setup(sdkConstraint: '>=2.9.0 <3.0.0');
      await expectValidation(validator, hints: isNotEmpty);
    });

    test(
        'is not opting in to null-safety with previous null-safe version. '
        'Even with a later non-null-safe version', () async {
      await servePackages(
        (server) => server
          ..serve(
            'test_pkg',
            '0.0.1',
            pubspec: {
              'environment': {'sdk': '>=2.12.0<3.0.0'}
            },
          )
          ..serve(
            'test_pkg',
            '2.0.0',
            pubspec: {
              'environment': {'sdk': '>=2.9.0<3.0.0'}
            },
          ),
      );

      await setup(sdkConstraint: '>=2.9.0 <3.0.0');
      await expectValidation(validator, hints: isNotEmpty);
    });

    test(
        'is opting in to null-safety with previous null-safe stable version. '
        'with an in-between non-null-safe prerelease', () async {
      await servePackages(
        (server) => server
          ..serve(
            'test_pkg',
            '0.0.1',
            pubspec: {
              'environment': {'sdk': '>=2.12.0<3.0.0'}
            },
          )
          ..serve(
            'test_pkg',
            '0.0.2-dev',
            pubspec: {
              'environment': {'sdk': '>=2.9.0<3.0.0'}
            },
          ),
      );

      await setup(sdkConstraint: '>=2.12.0 <3.0.0');
      await expectValidation(validator, hints: isNotEmpty);
    });

    test(
        'is opting in to null-safety with no existing stable versions. '
        'With a previous non-null-safe prerelease', () async {
      await setup(sdkConstraint: '>=2.12.0 <3.0.0');
      await servePackages(
        (server) => server.serve(
          'test_pkg',
          '0.0.2-dev',
          pubspec: {
            'environment': {'sdk': '>=2.9.0<3.0.0'}
          },
        ),
      );
      await expectValidation(validator, hints: isNotEmpty);
    });
  });
}
