// Copyright 2019 The Chromium 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_tools/src/base/platform.dart';
import 'package:flutter_tools/src/doctor.dart';
import 'package:flutter_tools/src/web/chrome.dart';
import 'package:flutter_tools/src/web/web_validator.dart';
import 'package:mockito/mockito.dart';
import 'package:process/process.dart';

import '../../src/common.dart';
import '../../src/testbed.dart';

void main() {
  group('WebValidator', () {
    Testbed testbed;
    WebValidator webValidator;
    MockPlatform mockPlatform;
    MockProcessManager mockProcessManager;

    setUp(() {
      mockProcessManager = MockProcessManager();
      testbed = Testbed(setup: () {
        when(mockProcessManager.canRun(kMacOSExecutable)).thenReturn(true);
        return null;
      }, overrides: <Type, Generator>{
        Platform: () => mockPlatform,
        ProcessManager: () => mockProcessManager,
      });
      webValidator = const WebValidator();
      mockPlatform = MockPlatform();
      when(mockPlatform.isMacOS).thenReturn(true);
      when(mockPlatform.isWindows).thenReturn(false);
      when(mockPlatform.isLinux).thenReturn(false);
    });

    test('Can find macOS executable ', () => testbed.run(() async {
      final ValidationResult result = await webValidator.validate();
      expect(result.type, ValidationType.installed);
    }));

    test('Can notice missing macOS executable ', () => testbed.run(() async {
      when(mockProcessManager.canRun(kMacOSExecutable)).thenReturn(false);
      final ValidationResult result = await webValidator.validate();
      expect(result.type, ValidationType.missing);
    }));

    test('Doesn\'t warn about CHROME_EXECUTABLE unless it cant find chrome ', () => testbed.run(() async {
      when(mockProcessManager.canRun(kMacOSExecutable)).thenReturn(false);
      final ValidationResult result = await webValidator.validate();
      expect(result.messages, <ValidationMessage>[
        ValidationMessage.hint('Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.'),
      ]);
      expect(result.type, ValidationType.missing);
    }));
  });
}

class MockPlatform extends Mock implements Platform  {
  @override
  Map<String, String> get environment => const <String, String>{};
}

class MockProcessManager extends Mock implements ProcessManager {}
