// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SERVICES_DEVICE_DEVICE_SERVICE_TEST_BASE_H_
#define SERVICES_DEVICE_DEVICE_SERVICE_TEST_BASE_H_

#include "base/task/single_thread_task_runner.h"
#include "base/test/task_environment.h"
#include "build/build_config.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/device/public/mojom/device_service.mojom.h"
#include "services/network/test/test_network_connection_tracker.h"
#include "services/network/test/test_url_loader_factory.h"
#include "testing/gtest/include/gtest/gtest.h"

#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_CHROMEOS)
#include "services/device/public/cpp/test/fake_geolocation_manager.h"
#endif

namespace device {

class DeviceService;

const char kTestGeolocationApiKey[] = "FakeApiKeyForTest";

// Base class responsible to setup Device Service for test.
class DeviceServiceTestBase : public testing::Test {
 public:
  DeviceServiceTestBase();

  DeviceServiceTestBase(const DeviceServiceTestBase&) = delete;
  DeviceServiceTestBase& operator=(const DeviceServiceTestBase&) = delete;

  ~DeviceServiceTestBase() override;

  // NOTE: It's important to do service instantiation within SetUp instead of
  // the constructor, as subclasses of this fixture may need to initialize some
  // global state before the service is constructed.
  void SetUp() override;

 protected:
  mojom::DeviceService* device_service() { return service_remote_.get(); }
  DeviceService* device_service_impl() { return service_.get(); }

  // Can optionally be called to destroy the service before a child test fixture
  // shuts down, in case the DeviceService has dependencies on objects created
  // by the child test fixture.
  void DestroyDeviceService();

  base::test::TaskEnvironment task_environment_;

  // Both of these task runners should be deprecated in favor of individual
  // components of the device service creating their own.
  scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
  scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;

#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_CHROMEOS)
  raw_ptr<FakeGeolocationManager> fake_geolocation_manager_;
#endif

  network::TestURLLoaderFactory test_url_loader_factory_;

 private:
  std::unique_ptr<network::TestNetworkConnectionTracker>
      network_connection_tracker_;
  std::unique_ptr<DeviceService> service_;
  mojo::Remote<mojom::DeviceService> service_remote_;
};

}  // namespace device

#endif  // SERVICES_DEVICE_DEVICE_SERVICE_TEST_BASE_H_
