// Copyright (c) 2022, 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.

@TestOn('vm')
library;

import 'package:pub/src/language_version.dart';

import 'package:pub/src/source/git.dart';

import 'package:test/test.dart';

void main() {
  // These tests are not integration tests because it seems to be hard to
  // actually test this kind of urls locally. We would have to set up serving
  // git over ssh.
  //
  // We could set up a local cache, and only test the '--offline' part of this.
  // But for now we live with this.
  test(
    'Git description uris can be of the form git@github.com:dart-lang/pub.git',
    () {
      final description = GitDescription(
        url: 'git@github.com:dart-lang/pub.git',
        ref: 'main',
        path: 'abc/',
        containingDir: null,
        tagPattern: null,
      );
      expect(
        description.format(),
        'git@github.com:dart-lang/pub.git at main in abc/',
      );
      expect(
        description.format(),
        'git@github.com:dart-lang/pub.git at main in abc/',
      );
      expect(
        description.serializeForPubspec(
          containingDir: null,
          languageVersion: const LanguageVersion(2, 16),
        ),
        {
          'url': 'git@github.com:dart-lang/pub.git',
          'ref': 'main',
          'path': 'abc/',
        },
      );
      final resolvedDescription = ResolvedGitDescription(
        description,
        '7d48f902b0326fc2ce0615c20f1aab6c811fe55b',
      );

      expect(
        resolvedDescription.format(),
        'git@github.com:dart-lang/pub.git at 7d48f9 in abc/',
      );
      expect(resolvedDescription.serializeForLockfile(containingDir: null), {
        'url': 'git@github.com:dart-lang/pub.git',
        'ref': 'main',
        'path': 'abc/',
        'resolved-ref': '7d48f902b0326fc2ce0615c20f1aab6c811fe55b',
      });
    },
  );
}
