fix(FinalGradeDeterminator): Add mock class for DatabaseManger

The mock class is used to bypass the blocking error of the
FinalGradeDeterminator when no Database is present for testing purposes
This commit is contained in:
2025-10-04 10:21:55 +02:00
parent 447834dda7
commit b69dbda1a5

View File

@@ -12,6 +12,36 @@
using namespace std::chrono_literals;
using namespace assignments::one::final_grade_determinator;
namespace assignments::one {
class FakeDatabaseManager : public DatabaseManager {
public:
explicit FakeDatabaseManager(rclcpp::Logger logger = rclcpp::get_logger("fake_db"))
: DatabaseManager(logger) {}
bool is_connected() const override {
return true; // Always pretend we are connected
}
bool store_final_course_result(const StudentCourse& sc, int exam_count, int final_grade) override {
stored_results_.push_back({sc, exam_count, final_grade});
return true; // Always succeed
}
void init_database() override {
// No-op for fake
}
struct StoredResult {
StudentCourse sc;
int exam_count;
int final_grade;
};
std::vector<StoredResult> stored_results_;
};
} // namespace assignments::one
class FinalGradeDeterminatorTest : public ::testing::Test {
protected:
void SetUp() override {
@@ -53,12 +83,14 @@ protected:
void TearDown() override {
final_grade_determinator_.reset();
fake_db_.reset();
test_node_.reset();
rclcpp::shutdown();
}
void create_final_grade_determinator() {
final_grade_determinator_ = std::make_shared<FinalGradeDeterminator>();
fake_db_ = std::make_unique<assignments::one::FakeDatabaseManager>();
final_grade_determinator_ = std::make_shared<FinalGradeDeterminator>(std::move(fake_db_));
}
void spin_some_time(std::chrono::milliseconds duration = 100ms) {
@@ -71,13 +103,12 @@ protected:
std::this_thread::sleep_for(10ms);
}
}
std::unique_ptr<assignments::one::FakeDatabaseManager> fake_db_;
std::shared_ptr<rclcpp::Node> test_node_;
std::shared_ptr<FinalGradeDeterminator> final_grade_determinator_;
rclcpp::Subscription<g2_2025_interfaces::msg::Student>::SharedPtr student_subscriber_;
rclcpp::Publisher<g2_2025_interfaces::msg::Exam>::SharedPtr exam_publisher_;
rclcpp::Service<g2_2025_interfaces::srv::Exams>::SharedPtr grade_calculator_service_;
std::vector<g2_2025_interfaces::msg::Student> received_student_messages_;
std::vector<g2_2025_interfaces::srv::Exams::Request> service_requests_;
};