diff --git a/src/g2_2025_grade_calculator_pkg/test/RetakeScheduler.test.cpp b/src/g2_2025_grade_calculator_pkg/test/RetakeScheduler.test.cpp index f85f226..a17ca69 100644 --- a/src/g2_2025_grade_calculator_pkg/test/RetakeScheduler.test.cpp +++ b/src/g2_2025_grade_calculator_pkg/test/RetakeScheduler.test.cpp @@ -91,6 +91,33 @@ TEST_F(RetakeSchedulerTest, ParameterTest) { create_retake_scheduler(); // Test default parameter value - auto param = retake_scheduler_->get_parameter("retake_check_interval"); + auto param = retake_scheduler_->get_parameter("retake_check_interval_sec"); EXPECT_EQ(param.as_int(), 120) << "Default retake_check_interval should be 120 seconds"; } + +TEST_F(RetakeSchedulerTest, ActionClientAllServicesPresentTest) { + create_retake_scheduler(); + + // Verify all 3 action services are visible on the graph + auto service_names_and_types = retake_scheduler_->get_service_names_and_types(); + bool has_cancel = false, has_get_result = false, has_send_goal = false; + + for (const auto& [ service_name, _ ] : service_names_and_types) { + if (service_name == "/retake_action/_action/cancel_goal") has_cancel = true; + if (service_name == "/retake_action/_action/get_result") has_get_result = true; + if (service_name == "/retake_action/_action/send_goal") has_send_goal = true; + } + + EXPECT_TRUE(has_cancel) << "cancel_goal service should be available"; + EXPECT_TRUE(has_get_result) << "get_result service should be available"; + EXPECT_TRUE(has_send_goal) << "send_goal service should be available"; +} + +TEST_F(RetakeSchedulerTest, ConstructorWithNullDatabaseManager) { + // Explicitly construct with nullptr to exercise optional DB manager path + ASSERT_NO_THROW({ + retake_scheduler_ = std::make_shared(nullptr); + }); + ASSERT_NE(retake_scheduler_, nullptr); +} +