Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
mock_database.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
8#include "mock_expectations.h"
9#include <queue>
10#include <functional>
11#include <mutex>
12#include <regex>
13
14namespace database::testing {
15
42public:
44 ~mock_database() override = default;
45
46 // Non-copyable due to mutex
47 mock_database(const mock_database&) = delete;
49
50 // Movable
51 mock_database(mock_database&& other) noexcept;
52 mock_database& operator=(mock_database&& other) noexcept;
53
54 // database_backend interface implementation
55 database_types type() const override;
56 kcenon::common::VoidResult initialize(const core::connection_config& config) override;
57 kcenon::common::VoidResult shutdown() override;
58 bool is_initialized() const override;
59 kcenon::common::Result<core::database_result> select_query(const std::string& query_string) override;
60 kcenon::common::VoidResult execute_query(const std::string& query_string) override;
61 kcenon::common::VoidResult begin_transaction() override;
62 kcenon::common::VoidResult commit_transaction() override;
63 kcenon::common::VoidResult rollback_transaction() override;
64 bool in_transaction() const override;
65 std::string last_error() const override;
66 std::map<std::string, std::string> connection_info() const override;
67
68 // Mock configuration
73
74 // Expectation setting - returns expectation_builder for fluent API
75 expectation_builder expect_query(const std::string& query);
76 expectation_builder expect_pattern(const std::string& regex_pattern);
78
79 // Error simulation
82
83 // Verification
84 bool verify_all_expectations() const;
85 std::vector<std::string> get_executed_queries() const;
86 size_t get_query_count() const;
87 size_t get_query_count(const std::string& pattern) const;
88 void reset();
89 void clear_expectations();
90 void clear_history();
91
92 // State inspection
93 bool is_connected() const;
94 std::string get_connection_string() const;
95
96private:
97 friend class expectation_builder;
98
106 std::string last_error_;
107
108 std::vector<expectation> expectations_;
109 std::vector<std::string> executed_queries_;
110 mutable std::mutex mutex_;
111
112 void record_query(const std::string& query);
113 expectation* find_expectation(const std::string& query);
114};
115
121public:
123
124 // Preset configurations
126 static mock_database with_data(const std::string& table_name, const core::database_result& data);
127 static mock_database failing_database(const std::string& error = "Mock database error");
128
129 // Fluent configuration
133
135
136private:
137 std::unique_ptr<mock_database> mock_;
138};
139
140} // namespace database::testing
Abstract base class for database backends.
Fluent builder for expectations.
Single query expectation with configurable behavior.
Builder for common mock configurations.
std::unique_ptr< mock_database > mock_
static mock_database with_data(const std::string &table_name, const core::database_result &data)
mock_database_builder & with_type(database_types type)
mock_database_builder & with_default_result(const core::database_result &result)
static mock_database failing_database(const std::string &error="Mock database error")
mock_database_builder & that_fails_on_connect()
Configurable mock for database_backend interface.
kcenon::common::VoidResult initialize(const core::connection_config &config) override
Initialize the database backend.
mock_database & set_default_select_result(const core::database_result &result)
std::vector< std::string > executed_queries_
void record_query(const std::string &query)
std::map< std::string, std::string > connection_info() const override
Get backend-specific connection information.
std::vector< expectation > expectations_
mock_database(const mock_database &)=delete
mock_database & set_database_type(database_types type)
expectation_builder expect_pattern(const std::string &regex_pattern)
std::string last_error() const override
Get last error message from backend.
kcenon::common::Result< core::database_result > select_query(const std::string &query_string) override
Execute a SELECT query.
kcenon::common::VoidResult rollback_transaction() override
Rollback the current transaction.
mock_database & operator=(const mock_database &)=delete
expectation_builder expect_query(const std::string &query)
~mock_database() override=default
mock_database & set_connect_result(bool result)
mock_database & simulate_connection_failure()
std::vector< std::string > get_executed_queries() const
bool is_initialized() const override
Check if backend is initialized and ready.
kcenon::common::VoidResult execute_query(const std::string &query_string) override
Execute a general SQL query (DDL, DML)
kcenon::common::VoidResult commit_transaction() override
Commit the current transaction.
kcenon::common::VoidResult shutdown() override
Shutdown the database backend gracefully.
core::database_result default_result_
std::string get_connection_string() const
bool in_transaction() const override
Check if backend is currently in a transaction.
database_types type() const override
Get the database type of this backend.
expectation * find_expectation(const std::string &query)
mock_database & set_default_rows_affected(uint64_t rows)
kcenon::common::VoidResult begin_transaction() override
Begin a transaction.
Abstract interface for database backends.
std::vector< database_row > database_result
database_types
Represents various database backends or modes.
Configuration for database connection.