// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/printing/fake_cups_printers_manager.h"
#include <string>
#include <utility>
#include "base/observer_list.h"
#include "chrome/browser/ash/printing/printer_configurer.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace ash {
using ::chromeos::CupsPrinterStatus;
using ::chromeos::Printer;
using ::chromeos::PrinterClass;
FakeCupsPrintersManager::FakeCupsPrintersManager() = default;
FakeCupsPrintersManager::~FakeCupsPrintersManager() = default;
std::vector<Printer> FakeCupsPrintersManager::GetPrinters(
PrinterClass printer_class) const {
return printers_.Get(printer_class);
}
void FakeCupsPrintersManager::SavePrinter(const chromeos::Printer& printer) {
printers_.Insert(PrinterClass::kSaved, printer);
}
void FakeCupsPrintersManager::RemoveSavedPrinter(
const std::string& printer_id) {
installed_.erase(printer_id);
printers_.Remove(PrinterClass::kSaved, printer_id);
}
void FakeCupsPrintersManager::AddLocalPrintersObserver(
LocalPrintersObserver* observer) {
local_printers_observer_list_.AddObserver(observer);
}
void FakeCupsPrintersManager::RemoveLocalPrintersObserver(
LocalPrintersObserver* observer) {
local_printers_observer_list_.RemoveObserver(observer);
}
bool FakeCupsPrintersManager::IsPrinterInstalled(
const chromeos::Printer& printer) const {
return installed_.contains(printer.id());
}
void FakeCupsPrintersManager::SetUpPrinter(const chromeos::Printer& printer,
bool is_automatic_installation,
PrinterSetupCallback callback) {
auto it = assigned_results_.find(printer.id());
PrinterSetupResult result =
it != assigned_results_.end() ? it->second : PrinterSetupResult::kSuccess;
if (result == PrinterSetupResult::kSuccess) {
installed_.insert(printer.id());
}
std::move(callback).Run(result);
}
void FakeCupsPrintersManager::UninstallPrinter(const std::string& printer_id) {
installed_.erase(printer_id);
}
std::optional<Printer> FakeCupsPrintersManager::GetPrinter(
const std::string& id) const {
return printers_.Get(id);
}
void FakeCupsPrintersManager::FetchPrinterStatus(const std::string& printer_id,
PrinterStatusCallback cb) {
auto it = printer_status_map_.find(printer_id);
if (it == printer_status_map_.end()) {
FAIL() << "Printer status not found: " << printer_id;
}
std::move(cb).Run(std::move(it->second));
printer_status_map_.erase(it);
}
PrintServersManager* FakeCupsPrintersManager::GetPrintServersManager() const {
return nullptr;
}
void FakeCupsPrintersManager::AddPrinter(const chromeos::Printer& printer,
PrinterClass printer_class) {
printers_.Insert(printer_class, printer);
}
void FakeCupsPrintersManager::SetPrinterStatus(
const CupsPrinterStatus& status) {
printer_status_map_[status.GetPrinterId()] = status;
}
void FakeCupsPrintersManager::MarkInstalled(const std::string& printer_id) {
installed_.insert(printer_id);
}
void FakeCupsPrintersManager::MarkPrinterAsNotAutoconfigurable(
const std::string& printer_id) {
printers_marked_as_not_autoconf_.insert(printer_id);
}
void FakeCupsPrintersManager::SetPrinterSetupResult(
const std::string& printer_id,
PrinterSetupResult result) {
assigned_results_[printer_id] = result;
}
void FakeCupsPrintersManager::QueryPrinterForAutoConf(
const Printer& printer,
base::OnceCallback<void(bool)> callback) {
std::move(callback).Run(
!printers_marked_as_not_autoconf_.contains(printer.id()));
}
void FakeCupsPrintersManager::TriggerLocalPrintersObserver() {
for (auto& observer : local_printers_observer_list_) {
observer.OnLocalPrintersUpdated();
}
}
} // namespace ash