blob: 302356e4cf012fd0f1ca937e4a4861f12c73adbd [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "peridot/bin/sessionmgr/puppet_master/command_runners/remove_mod_command_runner.h"
#include "gtest/gtest.h"
#include "peridot/lib/testing/test_with_session_storage.h"
namespace modular {
namespace {
class RemoveModCommandRunnerTest : public testing::TestWithSessionStorage {
protected:
std::unique_ptr<RemoveModCommandRunner> MakeRunner() {
return std::make_unique<RemoveModCommandRunner>();
}
std::vector<std::string> MakeModulePath(std::string path) {
std::vector<std::string> module_path;
module_path.push_back(path);
return module_path;
}
void InitModuleData(StoryStorage* const story_storage,
std::vector<std::string> path) {
fuchsia::modular::ModuleData module_data;
module_data.module_path = std::move(path);
module_data.intent = fuchsia::modular::Intent::New();
module_data.module_deleted = false;
WriteModuleData(story_storage, std::move(module_data));
}
};
TEST_F(RemoveModCommandRunnerTest, Execute) {
auto storage = MakeSessionStorage("page");
auto runner = MakeRunner();
auto story_id = CreateStory(storage.get());
auto story_storage = GetStoryStorage(storage.get(), story_id);
auto mod_name = MakeModulePath("mod");
InitModuleData(story_storage.get(), mod_name);
fuchsia::modular::RemoveMod remove_mod;
remove_mod.mod_name = mod_name;
fuchsia::modular::StoryCommand command;
command.set_remove_mod(std::move(remove_mod));
bool done{};
runner->Execute(story_id, story_storage.get(), std::move(command),
[&](fuchsia::modular::ExecuteResult result) {
EXPECT_EQ(fuchsia::modular::ExecuteStatus::OK,
result.status);
done = true;
});
RunLoopUntil([&] { return done; });
done = false;
story_storage->ReadModuleData(std::move(mod_name))
->Then([&](fuchsia::modular::ModuleDataPtr module_data) {
EXPECT_TRUE(module_data->module_deleted);
done = true;
});
RunLoopUntil([&] { return done; });
}
TEST_F(RemoveModCommandRunnerTest, ExecuteNoModuleData) {
auto storage = MakeSessionStorage("page");
auto runner = MakeRunner();
auto story_id = CreateStory(storage.get());
auto story_storage = GetStoryStorage(storage.get(), story_id);
auto mod_name = MakeModulePath("mod");
fuchsia::modular::RemoveMod remove_mod;
remove_mod.mod_name = std::move(mod_name);
fuchsia::modular::StoryCommand command;
command.set_remove_mod(std::move(remove_mod));
bool done{};
runner->Execute(
story_id, story_storage.get(), std::move(command),
[&](fuchsia::modular::ExecuteResult result) {
EXPECT_EQ(fuchsia::modular::ExecuteStatus::INVALID_MOD, result.status);
EXPECT_EQ(result.error_message, "No module data for given name.");
done = true;
});
RunLoopUntil([&] { return done; });
}
} // namespace
} // namespace modular