#include "mission/mission_store.hpp" #include #include namespace { class MissionStoreTest : public ::testing::Test { protected: void SetUp() override { dir_ = std::filesystem::temp_directory_path() / "lm_test_store"; std::filesystem::remove_all(dir_); std::filesystem::create_directories(dir_); store_path_ = dir_ / "missions.json"; std::filesystem::copy_file(std::filesystem::path(TEST_FIXTURE_DIR) / "missions.json", store_path_, std::filesystem::copy_options::overwrite_existing); store_ = std::make_unique(store_path_); } std::filesystem::path dir_; std::filesystem::path store_path_; std::unique_ptr store_; }; } // namespace TEST_F(MissionStoreTest, FindMissionFromFixture) { const auto mission = store_->findMission("testmission00001"); ASSERT_TRUE(mission.has_value()); EXPECT_EQ((*mission)["name"], "Test Wait"); } TEST_F(MissionStoreTest, AddTriggerValidCoil) { std::string err; const auto trigger = store_->addTrigger( {{"name", "PLC line 1"}, {"coil_id", 1001}, {"mission_id", "testmission00001"}}, err); ASSERT_TRUE(trigger.has_value()) << err; EXPECT_EQ((*trigger)["coil_id"], 1001); } TEST_F(MissionStoreTest, AddTriggerRejectsInvalidCoil) { std::string err; const auto trigger = store_->addTrigger({{"name", "bad"}, {"coil_id", 999}, {"mission_id", "testmission00001"}}, err); EXPECT_FALSE(trigger.has_value()); EXPECT_FALSE(err.empty()); } TEST_F(MissionStoreTest, AddTriggerRejectsDuplicateCoil) { std::string err; ASSERT_TRUE(store_->addTrigger( {{"name", "first"}, {"coil_id", 1002}, {"mission_id", "testmission00001"}}, err) .has_value()) << err; const auto dup = store_->addTrigger( {{"name", "second"}, {"coil_id", 1002}, {"mission_id", "testmission00001"}}, err); EXPECT_FALSE(dup.has_value()); } TEST_F(MissionStoreTest, DeleteTrigger) { std::string err; const auto trigger = store_->addTrigger( {{"name", "tmp"}, {"coil_id", 1003}, {"mission_id", "testmission00001"}}, err); ASSERT_TRUE(trigger.has_value()) << err; const std::string id = (*trigger)["id"].get(); EXPECT_TRUE(store_->deleteTrigger(id, err)) << err; EXPECT_FALSE(store_->findTriggerByCoil(1003).has_value()); } TEST_F(MissionStoreTest, AddScheduleAsap) { std::string err; const auto schedule = store_->addSchedule( {{"name", "Morning run"}, {"mission_id", "testmission00001"}, {"priority", 5}, {"start_mode", "asap"}}, err); ASSERT_TRUE(schedule.has_value()) << err; EXPECT_EQ((*schedule)["priority"], 5); EXPECT_EQ((*schedule)["start_mode"], "asap"); } TEST_F(MissionStoreTest, AddScheduleUnknownMissionFails) { std::string err; const auto schedule = store_->addSchedule({{"name", "bad"}, {"mission_id", "missing"}, {"start_mode", "asap"}}, err); EXPECT_FALSE(schedule.has_value()); }