Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
mock_backend.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
5#pragma once
6
9#include <queue>
10#include <functional>
11#include <mutex>
12#include <regex>
13
14namespace database::testing {
15
49public:
51 ~mock_backend() override = default;
52
53 // Non-copyable due to mutex
54 mock_backend(const mock_backend&) = delete;
56
57 // Movable
58 mock_backend(mock_backend&& other) noexcept;
59 mock_backend& operator=(mock_backend&& other) noexcept;
60
61 // database_backend interface implementation
62 database_types type() const override;
63 kcenon::common::VoidResult initialize(const core::connection_config& config) override;
64 kcenon::common::VoidResult shutdown() override;
65 bool is_initialized() const override;
66
67 kcenon::common::Result<core::database_result> select_query(const std::string& query_string) override;
68 kcenon::common::VoidResult execute_query(const std::string& query_string) override;
69
70 kcenon::common::VoidResult begin_transaction() override;
71 kcenon::common::VoidResult commit_transaction() override;
72 kcenon::common::VoidResult rollback_transaction() override;
73 bool in_transaction() const override;
74
75 std::string last_error() const override;
76 std::map<std::string, std::string> connection_info() const override;
77
78 // Mock configuration
80 mock_backend& set_initialize_result(bool result, const std::string& error = "");
83
84 // Expectation setting - returns backend_expectation_builder for fluent API
85 backend_expectation_builder expect_query(const std::string& query);
86 backend_expectation_builder expect_pattern(const std::string& regex_pattern);
88
89 // Error simulation
90 mock_backend& simulate_initialization_failure(const std::string& error = "Mock initialization failed");
92
93 // Verification
94 bool verify_all_expectations() const;
95 std::vector<std::string> get_executed_queries() const;
96 size_t get_query_count() const;
97 size_t get_query_count(const std::string& pattern) const;
98 void reset();
99 void clear_expectations();
100 void clear_history();
101
102 // State inspection
103 std::string get_connection_string() const;
104
105private:
107
111 std::string init_error_;
115 std::string last_error_;
117
118 std::vector<backend_expectation> expectations_;
119 std::vector<std::string> executed_queries_;
120 mutable std::mutex mutex_;
121
122 void record_query(const std::string& query);
123 backend_expectation* find_expectation(const std::string& query);
124};
125
131public:
133
134 // Preset configurations
136 static mock_backend with_data(const std::string& table_name, const core::database_result& data);
137 static mock_backend failing_database(const std::string& error = "Mock database error");
138
139 // Fluent configuration
143
145
146private:
147 std::unique_ptr<mock_backend> mock_;
148};
149
150} // namespace database::testing
Abstract base class for database backends.
Fluent builder for backend expectations.
Single query expectation with configurable behavior for database_backend.
Builder for common mock configurations.
std::unique_ptr< mock_backend > mock_
mock_backend_builder & with_type(database_types type)
static mock_backend failing_database(const std::string &error="Mock database error")
static mock_backend with_data(const std::string &table_name, const core::database_result &data)
mock_backend_builder & with_default_result(const core::database_result &result)
mock_backend_builder & that_fails_on_initialize()
Configurable mock for database_backend interface.
mock_backend & set_initialize_result(bool result, const std::string &error="")
kcenon::common::VoidResult commit_transaction() override
Commit the current transaction.
std::vector< backend_expectation > expectations_
std::vector< std::string > get_executed_queries() const
kcenon::common::VoidResult shutdown() override
Shutdown the database backend gracefully.
std::string last_error() const override
Get last error message from backend.
backend_expectation * find_expectation(const std::string &query)
std::vector< std::string > executed_queries_
std::string get_connection_string() const
core::database_result default_result_
backend_expectation_builder expect_pattern(const std::string &regex_pattern)
mock_backend & operator=(const mock_backend &)=delete
bool in_transaction() const override
Check if backend is currently in a transaction.
bool is_initialized() const override
Check if backend is initialized and ready.
~mock_backend() override=default
mock_backend & simulate_initialization_failure(const std::string &error="Mock initialization failed")
mock_backend & set_default_rows_affected(uint64_t rows)
void record_query(const std::string &query)
kcenon::common::VoidResult initialize(const core::connection_config &config) override
Initialize the database backend.
std::map< std::string, std::string > connection_info() const override
Get backend-specific connection information.
kcenon::common::VoidResult begin_transaction() override
Begin a transaction.
mock_backend & set_database_type(database_types type)
database_types type() const override
Get the database type of this backend.
backend_expectation_builder expect_any()
kcenon::common::Result< core::database_result > select_query(const std::string &query_string) override
Execute a SELECT query.
mock_backend(const mock_backend &)=delete
kcenon::common::VoidResult execute_query(const std::string &query_string) override
Execute a general SQL query (DDL, DML)
mock_backend & set_default_select_result(const core::database_result &result)
backend_expectation_builder expect_query(const std::string &query)
kcenon::common::VoidResult rollback_transaction() override
Rollback the current transaction.
Abstract interface for database backends.
std::vector< database_row > database_result
database_types
Represents various database backends or modes.
Configuration for database connection.