// Copyright 2013 The Flutter Authors. 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:flutter_test/flutter_test.dart';
import 'package:url_launcher/src/types.dart';
import 'package:url_launcher/src/url_launcher_string.dart';
import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart';

import '../mocks/mock_url_launcher_platform.dart';

void main() {
  final MockUrlLauncher mock = MockUrlLauncher();
  UrlLauncherPlatform.instance = mock;

  group('canLaunchUrlString', () {
    test('handles returning true', () async {
      const String urlString = 'https://flutter.dev';
      mock
        ..setCanLaunchExpectations(urlString)
        ..setResponse(true);

      final bool result = await canLaunchUrlString(urlString);

      expect(result, isTrue);
    });

    test('handles returning false', () async {
      const String urlString = 'https://flutter.dev';
      mock
        ..setCanLaunchExpectations(urlString)
        ..setResponse(false);

      final bool result = await canLaunchUrlString(urlString);

      expect(result, isFalse);
    });
  });

  group('launchUrlString', () {
    test('default behavior with web URL', () async {
      const String urlString = 'https://flutter.dev';
      mock
        ..setLaunchExpectations(
          url: urlString,
          useSafariVC: true,
          useWebView: true,
          enableJavaScript: true,
          enableDomStorage: true,
          universalLinksOnly: false,
          headers: <String, String>{},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(await launchUrlString(urlString), isTrue);
    });

    test('default behavior with non-web URL', () async {
      const String urlString = 'customscheme:foo';
      mock
        ..setLaunchExpectations(
          url: urlString,
          useSafariVC: false,
          useWebView: false,
          enableJavaScript: true,
          enableDomStorage: true,
          universalLinksOnly: false,
          headers: <String, String>{},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(await launchUrlString(urlString), isTrue);
    });

    test('explicit default launch mode with web URL', () async {
      const String urlString = 'https://flutter.dev';
      mock
        ..setLaunchExpectations(
          url: urlString,
          useSafariVC: true,
          useWebView: true,
          enableJavaScript: true,
          enableDomStorage: true,
          universalLinksOnly: false,
          headers: <String, String>{},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(await launchUrlString(urlString, mode: LaunchMode.platformDefault),
          isTrue);
    });

    test('explicit default launch mode with non-web URL', () async {
      const String urlString = 'customscheme:foo';
      mock
        ..setLaunchExpectations(
          url: urlString,
          useSafariVC: false,
          useWebView: false,
          enableJavaScript: true,
          enableDomStorage: true,
          universalLinksOnly: false,
          headers: <String, String>{},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(await launchUrlString(urlString, mode: LaunchMode.platformDefault),
          isTrue);
    });

    test('in-app webview', () async {
      const String urlString = 'https://flutter.dev';
      mock
        ..setLaunchExpectations(
          url: urlString,
          useSafariVC: true,
          useWebView: true,
          enableJavaScript: true,
          enableDomStorage: true,
          universalLinksOnly: false,
          headers: <String, String>{},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(await launchUrlString(urlString, mode: LaunchMode.inAppWebView),
          isTrue);
    });

    test('external browser', () async {
      const String urlString = 'https://flutter.dev';
      mock
        ..setLaunchExpectations(
          url: urlString,
          useSafariVC: false,
          useWebView: false,
          enableJavaScript: true,
          enableDomStorage: true,
          universalLinksOnly: false,
          headers: <String, String>{},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(
          await launchUrlString(urlString,
              mode: LaunchMode.externalApplication),
          isTrue);
    });

    test('external non-browser only', () async {
      const String urlString = 'https://flutter.dev';
      mock
        ..setLaunchExpectations(
          url: urlString,
          useSafariVC: false,
          useWebView: false,
          enableJavaScript: true,
          enableDomStorage: true,
          universalLinksOnly: true,
          headers: <String, String>{},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(
          await launchUrlString(urlString,
              mode: LaunchMode.externalNonBrowserApplication),
          isTrue);
    });

    test('in-app webview without javascript', () async {
      const String urlString = 'https://flutter.dev';
      mock
        ..setLaunchExpectations(
          url: urlString,
          useSafariVC: true,
          useWebView: true,
          enableJavaScript: false,
          enableDomStorage: true,
          universalLinksOnly: false,
          headers: <String, String>{},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(
          await launchUrlString(urlString,
              mode: LaunchMode.inAppWebView,
              webViewConfiguration:
                  const WebViewConfiguration(enableJavaScript: false)),
          isTrue);
    });

    test('in-app webview without DOM storage', () async {
      const String urlString = 'https://flutter.dev';
      mock
        ..setLaunchExpectations(
          url: urlString,
          useSafariVC: true,
          useWebView: true,
          enableJavaScript: true,
          enableDomStorage: false,
          universalLinksOnly: false,
          headers: <String, String>{},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(
          await launchUrlString(urlString,
              mode: LaunchMode.inAppWebView,
              webViewConfiguration:
                  const WebViewConfiguration(enableDomStorage: false)),
          isTrue);
    });

    test('in-app webview with headers', () async {
      const String urlString = 'https://flutter.dev';
      mock
        ..setLaunchExpectations(
          url: urlString,
          useSafariVC: true,
          useWebView: true,
          enableJavaScript: true,
          enableDomStorage: true,
          universalLinksOnly: false,
          headers: <String, String>{'key': 'value'},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(
          await launchUrlString(urlString,
              mode: LaunchMode.inAppWebView,
              webViewConfiguration: const WebViewConfiguration(
                  headers: <String, String>{'key': 'value'})),
          isTrue);
    });

    test('cannot launch a non-web URL in a webview', () async {
      expect(
          () async => await launchUrlString('tel:555-555-5555',
              mode: LaunchMode.inAppWebView),
          throwsA(isA<ArgumentError>()));
    });

    test('non-web URL with default options', () async {
      const String emailLaunchUrlString =
          'mailto:smith@example.com?subject=Hello';
      mock
        ..setLaunchExpectations(
          url: emailLaunchUrlString,
          useSafariVC: false,
          useWebView: false,
          enableJavaScript: true,
          enableDomStorage: true,
          universalLinksOnly: false,
          headers: <String, String>{},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(await launchUrlString(emailLaunchUrlString), isTrue);
    });

    test('allows non-parseable url', () async {
      // Not a valid Dart [Uri], but a valid URL on at least some platforms.
      const String urlString =
          'rdp://full%20address=s:mypc:3389&audiomode=i:2&disable%20themes=i:1';
      mock
        ..setLaunchExpectations(
          url: urlString,
          useSafariVC: false,
          useWebView: false,
          enableJavaScript: true,
          enableDomStorage: true,
          universalLinksOnly: false,
          headers: <String, String>{},
          webOnlyWindowName: null,
        )
        ..setResponse(true);
      expect(await launchUrlString(urlString), isTrue);
    });
  });
}
