#include "ash/system/holding_space/holding_space_ash_test_base.h"
#include "ash/constants/ash_features.h"
#include "ash/public/cpp/holding_space/holding_space_controller.h"
#include "ash/public/cpp/holding_space/holding_space_file.h"
#include "ash/public/cpp/holding_space/holding_space_image.h"
#include "ash/public/cpp/holding_space/holding_space_prefs.h"
#include "ash/public/cpp/holding_space/holding_space_util.h"
#include "base/strings/strcat.h"
namespace ash {
namespace {
std::unique_ptr<HoldingSpaceImage> CreateStubHoldingSpaceImage(
HoldingSpaceItem::Type type,
const base::FilePath& file_path) {
return std::make_unique<HoldingSpaceImage>(
holding_space_util::GetMaxImageSizeForType(type), file_path,
base::DoNothing());
}
}
HoldingSpaceAshTestBase::HoldingSpaceAshTestBase() = default;
HoldingSpaceAshTestBase::~HoldingSpaceAshTestBase() = default;
HoldingSpaceItem* HoldingSpaceAshTestBase::AddItem(
HoldingSpaceItem::Type type,
const base::FilePath& file_path) {
std::unique_ptr<HoldingSpaceItem> item =
HoldingSpaceItem::CreateFileBackedItem(
type,
HoldingSpaceFile(file_path, HoldingSpaceFile::FileSystemType::kTest,
GURL(base::StrCat(
{"filesystem:", file_path.BaseName().value()}))),
base::BindOnce(&CreateStubHoldingSpaceImage));
auto* item_ptr = item.get();
DCHECK(model());
model()->AddItem(std::move(item));
return item_ptr;
}
HoldingSpaceItem* HoldingSpaceAshTestBase::AddPartiallyInitializedItem(
HoldingSpaceItem::Type type,
const base::FilePath& path) {
std::unique_ptr<HoldingSpaceItem> item =
HoldingSpaceItem::CreateFileBackedItem(
type,
HoldingSpaceFile(path, HoldingSpaceFile::FileSystemType::kTest,
GURL("filesystem:ignored")),
base::BindOnce(&CreateStubHoldingSpaceImage));
const base::Value::Dict serialized_holding_space_item = item->Serialize();
std::unique_ptr<HoldingSpaceItem> deserialized_item =
HoldingSpaceItem::Deserialize(
serialized_holding_space_item,
base::BindOnce(&CreateStubHoldingSpaceImage));
DCHECK(!deserialized_item->IsInitialized());
HoldingSpaceItem* deserialized_item_ptr = deserialized_item.get();
DCHECK(model());
model()->AddItem(std::move(deserialized_item));
return deserialized_item_ptr;
}
void HoldingSpaceAshTestBase::RemoveAllItems() {
ASSERT_TRUE(model());
model()->RemoveIf(
base::BindRepeating([](const HoldingSpaceItem* item) { return true; }));
}
void HoldingSpaceAshTestBase::MarkTimeOfFirstAdd(AccountId account_id) {
holding_space_prefs::MarkTimeOfFirstAdd(
GetSessionControllerClient()->GetUserPrefService(account_id));
}
void HoldingSpaceAshTestBase::SetUp() {
AshTestBase::SetUp();
AccountId account_id = SimulateUserLogin({kTestUser});
holding_space_prefs::MarkTimeOfFirstAvailability(
GetSessionControllerClient()->GetUserPrefService(account_id));
HoldingSpaceController::Get()->RegisterClientAndModelForUser(
account_id, &client_, &model_);
}
}