[sessionmgr][storymodel] Provide StoryModel.name when constructing StoryModelOwner.
StoryModel.name is required and immutable.
TEST=fx run-test story_model_owner_unittest
MF-85 #comment [sessionmgr][storymodel] Provide StoryModel.name when constructing StoryModelOwner.
Change-Id: I1419e1af1ee1a56fbb280b171c72a477f55fd660
diff --git a/bin/sessionmgr/story/model/story_model_owner.cc b/bin/sessionmgr/story/model/story_model_owner.cc
index 6fe687d..7c65780 100644
--- a/bin/sessionmgr/story/model/story_model_owner.cc
+++ b/bin/sessionmgr/story/model/story_model_owner.cc
@@ -87,12 +87,14 @@
};
StoryModelOwner::StoryModelOwner(
+ const std::string& story_name,
fit::executor* executor,
std::unique_ptr<StoryModelStorage> model_storage)
: model_storage_(std::move(model_storage)),
weak_ptr_factory_(this),
executor_(executor) {
FXL_CHECK(model_storage_ != nullptr);
+ model_.mutable_name()->reset(story_name);
InitializeModelDefaults(&model_);
model_storage_->SetObserveCallback(
[this](std::vector<StoryModelMutation> commands) {
diff --git a/bin/sessionmgr/story/model/story_model_owner.h b/bin/sessionmgr/story/model/story_model_owner.h
index 2286a4b..ae9dd85 100644
--- a/bin/sessionmgr/story/model/story_model_owner.h
+++ b/bin/sessionmgr/story/model/story_model_owner.h
@@ -34,10 +34,13 @@
// This class is not thread-safe.
class StoryModelOwner {
public:
+ // |story_name| is applied to StoryModel.name.
+ //
// Uses |executor| to schedule internal mutation tasks. Delegates mutation
// commands to and reacts to observation of applied mutations from
// |model_storage|.
- explicit StoryModelOwner(fit::executor* executor,
+ explicit StoryModelOwner(const std::string& story_name,
+ fit::executor* executor,
std::unique_ptr<StoryModelStorage> model_storage);
~StoryModelOwner();
diff --git a/bin/sessionmgr/story/model/story_model_owner_unittest.cc b/bin/sessionmgr/story/model/story_model_owner_unittest.cc
index c71b6da..5da2a85 100644
--- a/bin/sessionmgr/story/model/story_model_owner_unittest.cc
+++ b/bin/sessionmgr/story/model/story_model_owner_unittest.cc
@@ -35,7 +35,7 @@
// Store the arguments we got.
ExecuteCall call{.commands = std::move(commands),
- .completer = std::move(bridge.completer)};
+ .completer = std::move(bridge.completer)};
calls.push_back(std::move(call));
return bridge.consumer.promise();
@@ -48,11 +48,11 @@
public:
StoryModelOwnerTest() : TestLoopFixture() { ResetExecutor(); }
- std::unique_ptr<StoryModelOwner> Create() {
+ std::unique_ptr<StoryModelOwner> Create(const std::string& story_name) {
auto model_storage = std::make_unique<TestPersistenceSystem>();
model_storage_ = model_storage.get();
- auto owner = std::make_unique<StoryModelOwner>(executor_.get(),
+ auto owner = std::make_unique<StoryModelOwner>(story_name, executor_.get(),
std::move(model_storage));
return owner;
}
@@ -69,7 +69,7 @@
TEST_F(StoryModelOwnerTest, SuccessfulMutate) {
// Show that a single mutation flows through the StoryModelOwner to
// StoryModelStorage, and then applies the resulting commands.
- auto owner = Create();
+ auto owner = Create("test_name");
auto mutator = owner->NewMutator();
bool done{false};
@@ -84,10 +84,8 @@
ASSERT_EQ(1lu, model_storage()->calls.size());
ASSERT_EQ(1lu, model_storage()->calls[0].commands.size());
EXPECT_TRUE(model_storage()->calls[0].commands[0].is_set_visibility_state());
- EXPECT_EQ(StoryVisibilityState::IMMERSIVE, model_storage()
- ->calls[0]
- .commands[0]
- .set_visibility_state());
+ EXPECT_EQ(StoryVisibilityState::IMMERSIVE,
+ model_storage()->calls[0].commands[0].set_visibility_state());
// Complete the pending persistence call.
model_storage()->calls[0].completer.complete_ok();
@@ -98,12 +96,13 @@
// The existing model hasn't changed, because the StoryModelStorage
// has not heard back from its storage that the mutation occurred.
auto observer = owner->NewObserver();
- EXPECT_EQ(StoryVisibilityState::DEFAULT, *observer->model().visibility_state());
+ EXPECT_EQ("test_name", *observer->model().name());
+ EXPECT_EQ(StoryVisibilityState::DEFAULT,
+ *observer->model().visibility_state());
// Now dispatch mutations from the persistence system, and we should observe
// that ApplyMutations() is invoked.
- model_storage()->Observe(
- std::move(model_storage()->calls[0].commands));
+ model_storage()->Observe(std::move(model_storage()->calls[0].commands));
// And the new model value that ApplyMutations returned should be reflected in
// the owner.
@@ -112,7 +111,7 @@
}
TEST_F(StoryModelOwnerTest, FailedMutate) {
- auto owner = Create();
+ auto owner = Create("test");
auto mutator = owner->NewMutator();
bool task_executed{false};
bool saw_error{false};
@@ -132,7 +131,7 @@
TEST_F(StoryModelOwnerTest, AbandonedMutate) {
// If for some reason the underlying mutation is abandoned, we should observe
// an error.
- auto owner = Create();
+ auto owner = Create("test");
auto mutator = owner->NewMutator();
bool task_executed{false};
bool saw_error{false};
@@ -154,7 +153,7 @@
TEST_F(StoryModelOwnerTest, MutatorLifecycle_OwnerDestroyed) {
// When the StoryModelOwner is destroyed but someone is still holding onto a
// StoryMutator that mutator should return an error on Execute().
- auto owner = Create();
+ auto owner = Create("test");
auto mutator = owner->NewMutator();
owner.reset();
bool task_executed{false};
@@ -172,7 +171,7 @@
TEST_F(StoryModelOwnerTest, ObserversAreNotified) {
// One can create an observer and learn of the new state.
- auto owner = Create();
+ auto owner = Create("test");
auto mutator = owner->NewMutator();
auto observer = owner->NewObserver();
@@ -206,7 +205,7 @@
TEST_F(StoryModelOwnerTest, ObserversLifecycle_ClientDestroyed) {
// When the client destroys its observer object, it no longer receives
// updates.
- auto owner = Create();
+ auto owner = Create("test");
auto mutator = owner->NewMutator();
auto observer = owner->NewObserver();
@@ -227,7 +226,7 @@
TEST_F(StoryModelOwnerTest, ObserversLifecycle_OwnerDestroyed) {
// When the StoryModelOwner is destroyed, clients can learn of the fact by
// using a fit::defer on the listener callback.
- auto owner = Create();
+ auto owner = Create("test");
auto mutator = owner->NewMutator();
auto observer = owner->NewObserver();