blob: a1b79d7955413e0ef8aa5196e897cd571dccec3d [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_POLICY_SKYVAULT_TEST_SKYVAULT_TEST_UTILS_H_
#define CHROME_BROWSER_ASH_POLICY_SKYVAULT_TEST_SKYVAULT_TEST_UTILS_H_
#include "base/test/gmock_callback_support.h"
#include "chrome/browser/ash/policy/skyvault/local_files_migration_manager.h"
#include "chrome/browser/ash/policy/skyvault/migration_coordinator.h"
#include "chrome/browser/ash/policy/skyvault/migration_notification_manager.h"
#include "chrome/browser/ash/policy/skyvault/policy_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace policy::local_user_files {
namespace {
inline constexpr char kEmail[] = "stub-user@example.com";
}
// Matcher for `SetUserDataStorageWriteEnabledRequest`.
MATCHER_P(WithEnabled, enabled, "") {
return arg.account_id().account_id() == kEmail && arg.enabled() == enabled;
}
// GMock action that runs the callback (which is expected to be the second
// argument in the mocked function) with the given reply.
template <typename ReplyType>
auto ReplyWith(const ReplyType& reply) {
return base::test::RunOnceCallbackRepeatedly<1>(reply);
}
// Mock implementation of LocalFilesMigrationManager::Observer.
class MockMigrationObserver : public LocalFilesMigrationManager::Observer {
public:
MockMigrationObserver();
~MockMigrationObserver();
MOCK_METHOD(void, OnMigrationSucceeded, (), (override));
MOCK_METHOD(void, OnMigrationReset, (), (override));
};
// Mock implementation of MigrationNotificationManager.
class MockMigrationNotificationManager : public MigrationNotificationManager {
public:
explicit MockMigrationNotificationManager(content::BrowserContext* context);
~MockMigrationNotificationManager() override;
MOCK_METHOD(void,
ShowMigrationInfoDialog,
(MigrationDestination, base::Time, base::OnceClosure),
(override));
MOCK_METHOD(void,
ShowConfigurationErrorNotification,
(MigrationDestination),
(override));
MOCK_METHOD(void, ShowDeletionCompletedNotification, (), (override));
};
// Mock implementation of MigrationCoordinator, with the default behavior to
// succeed the upload with a small delay.
class MockMigrationCoordinator : public MigrationCoordinator {
public:
explicit MockMigrationCoordinator(Profile* profile);
~MockMigrationCoordinator() override;
// MigrationCoordinator overrides:
bool IsRunning() const override { return is_running_; }
void OnMigrationDone(MigrationDoneCallback callback,
std::map<base::FilePath, MigrationUploadError> errors,
base::FilePath upload_root_path,
base::FilePath error_log_path) override;
// By default waits some minutes and completes the upload successfully.
MOCK_METHOD(void,
Run,
(MigrationDestination,
std::vector<base::FilePath>,
const std::string&,
MigrationDoneCallback),
(override));
MOCK_METHOD(void, Cancel, (MigrationStoppedCallback callback), (override));
// Sets a callback to be invoked when Run() is called.
void SetRunCallback(base::RepeatingClosure run_cb);
private:
bool is_running_ = false;
// If set, invoked when Run() is.
base::RepeatingClosure run_cb_;
base::WeakPtrFactory<MockMigrationCoordinator> weak_ptr_factory_{this};
};
// Mock implementation of FilesCleanupHandler. By default, cleanup succeeds
// immediately.
class MockCleanupHandler : public chromeos::FilesCleanupHandler {
public:
MockCleanupHandler();
MockCleanupHandler(const MockCleanupHandler&) = delete;
MockCleanupHandler& operator=(const MockCleanupHandler&) = delete;
~MockCleanupHandler() override;
base::WeakPtr<MockCleanupHandler> GetWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
MOCK_METHOD(void, Cleanup, (CleanupHandlerCallback callback), (override));
private:
base::WeakPtrFactory<MockCleanupHandler> weak_ptr_factory_{this};
};
} // namespace policy::local_user_files
#endif // CHROME_BROWSER_ASH_POLICY_SKYVAULT_TEST_SKYVAULT_TEST_UTILS_H_