< Summary - Backend C Tests - Coverage Report

Information
Class: test_maintenance_service_real_c
Assembly: src.backend.tests.unit.database
File(s): C:\Users\yagiz\Desktop\Project\smart-maintenance-suite\src\backend\tests\unit\database\test_maintenance_service_real.c
Line coverage
96%
Covered lines: 86
Uncovered lines: 3
Coverable lines: 89
Total lines: 164
Line coverage: 96.6%
Branch coverage
92%
Covered branches: 13
Total branches: 14
Branch coverage: 92.8%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
LOG_INFO100%000%
LOG_ERROR100%000%
db_pool_acquire100%00100%
db_pool_release100%00100%
PQexec100%00100%
PQresultStatus100%00100%
PQclear100%00100%
PQntuples100%00100%
PQgetvalue91.67%0087.5%
PQerrorMessage100%00100%
test_add_maintenance_log_success100%00100%
test_add_maintenance_log_fail100%00100%
test_get_maintenance_history_paths100%00100%
test_get_all_maintenance_logs_paths100%00100%
test_update_maintenance_log_paths100%00100%
test_delete_maintenance_log_paths100%00100%
main100%00100%

File(s)

C:\Users\yagiz\Desktop\Project\smart-maintenance-suite\src\backend\tests\unit\database\test_maintenance_service_real.c

#LineLine coverage
 1#include <stdarg.h>
 2#include <stddef.h>
 3#include <setjmp.h>
 4#include <cmocka.h>
 5#include <string.h>
 6#include <stdio.h>
 7#include <stdlib.h>
 8
 9// PostgreSQL Definitions (to avoid libpq-fe.h)
 10#define LIBPQ_FE_H
 11#define PGconn void
 12#define PGresult void
 13#define PGRES_COMMAND_OK 1
 14#define PGRES_TUPLES_OK 2
 15#define PGRES_FATAL_ERROR 3
 16
 17#include "maintenance_service.h"
 18#include "db_connection.h"
 19
 20// Logger mock
 021void LOG_INFO(const char *format, ...) {}
 22
 023void LOG_ERROR(const char *format, ...) {}
 24
 25// Mock State
 26static DBConnection mock_conn;
 27static int mock_acquire_success = 1;
 28static int mock_result_status = PGRES_COMMAND_OK;
 29static int mock_ntuples = 0;
 30
 31// Mock DB functions
 1332DBConnection *db_pool_acquire(void) {
 1333  if (mock_acquire_success) {
 834    mock_conn.pg_conn = (void *)0x1234;
 835    return &mock_conn;
 36  }
 37
 538  return NULL;
 39}
 40
 841void db_pool_release(DBConnection *conn) {}
 42
 843void *PQexec(void *conn, const char *query) {
 844  return (void *)0x5678;
 45}
 46
 847int PQresultStatus(const void *res) {
 848  return mock_result_status;
 49}
 50
 851void PQclear(void *res) {}
 52
 253int PQntuples(const void *res) {
 254  return mock_ntuples;
 55}
 56
 1857char *PQgetvalue(const void *res, int row, int field) {
 1858  if (field == 0) return "1"; // ID
 59
 1560  if (field == 1) return "10"; // MachineID
 61
 1262  if (field == 2) return "TestTech";
 63
 964  if (field == 3) return "2026-02-18";
 65
 666  if (field == 4) return "Test Description";
 67
 368  if (field == 5) return "150.50"; // Cost
 69
 070  return "";
 71}
 72
 373char *PQerrorMessage(const void *conn) {
 374  return "Mock Error Material";
 75}
 76
 77/* ====================================================================
 78 * TEST CASES
 79 * ==================================================================== */
 80
 181static void test_add_maintenance_log_success(void **state) {
 182  mock_acquire_success = 1;
 183  mock_result_status = PGRES_COMMAND_OK;
 184  bool result = add_maintenance_log(1, "Tech1", "Maintenance", 100.0);
 185  assert_true(result);
 186}
 87
 188static void test_add_maintenance_log_fail(void **state) {
 189  mock_acquire_success = 0;
 190  bool result = add_maintenance_log(1, "Tech1", "Maintenance", 100.0);
 191  assert_false(result);
 92  // DB error
 193  mock_acquire_success = 1;
 194  mock_result_status = PGRES_FATAL_ERROR;
 195  result = add_maintenance_log(1, "Tech1", "Maintenance", 100.0);
 196  assert_false(result);
 197}
 98
 199static void test_get_maintenance_history_paths(void **state) {
 100  // Success
 1101  mock_acquire_success = 1;
 1102  mock_result_status = PGRES_TUPLES_OK;
 1103  mock_ntuples = 2;
 104  MaintenanceLog logs[5];
 1105  int count = get_maintenance_history(1, logs, 5);
 1106  assert_int_equal(count, 2);
 1107  assert_string_equal(logs[0].technician_name, "TestTech");
 108  // Acquire Fail
 1109  mock_acquire_success = 0;
 1110  count = get_maintenance_history(1, logs, 5);
 1111  assert_int_equal(count, 0);
 112  // Query Fail
 1113  mock_acquire_success = 1;
 1114  mock_result_status = PGRES_FATAL_ERROR;
 1115  count = get_maintenance_history(1, logs, 5);
 1116  assert_int_equal(count, 0);
 1117}
 118
 1119static void test_get_all_maintenance_logs_paths(void **state) {
 1120  mock_acquire_success = 1;
 1121  mock_result_status = PGRES_TUPLES_OK;
 1122  mock_ntuples = 1;
 123  MaintenanceLog items[10];
 1124  int count = get_all_maintenance_logs(items, 10);
 1125  assert_int_equal(count, 1);
 1126  mock_acquire_success = 0;
 1127  count = get_all_maintenance_logs(items, 10);
 1128  assert_int_equal(count, 0);
 1129}
 130
 1131static void test_update_maintenance_log_paths(void **state) {
 1132  mock_acquire_success = 1;
 1133  mock_result_status = PGRES_COMMAND_OK;
 1134  bool res = update_maintenance_log(1, "Updated", 200.0);
 1135  assert_true(res);
 1136  mock_result_status = PGRES_FATAL_ERROR;
 1137  res = update_maintenance_log(1, "Updated", 200.0);
 1138  assert_false(res);
 1139  mock_acquire_success = 0;
 1140  res = update_maintenance_log(1, "Updated", 200.0);
 1141  assert_false(res);
 1142}
 143
 1144static void test_delete_maintenance_log_paths(void **state) {
 1145  mock_acquire_success = 1;
 1146  mock_result_status = PGRES_COMMAND_OK;
 1147  bool res = delete_maintenance_log(1);
 1148  assert_true(res);
 1149  mock_acquire_success = 0;
 1150  res = delete_maintenance_log(1);
 1151  assert_false(res);
 1152}
 153
 1154int main(void) {
 1155  const struct CMUnitTest tests[] = {
 156    cmocka_unit_test(test_add_maintenance_log_success),
 157    cmocka_unit_test(test_add_maintenance_log_fail),
 158    cmocka_unit_test(test_get_maintenance_history_paths),
 159    cmocka_unit_test(test_get_all_maintenance_logs_paths),
 160    cmocka_unit_test(test_update_maintenance_log_paths),
 161    cmocka_unit_test(test_delete_maintenance_log_paths),
 162  };
 1163  return cmocka_run_group_tests(tests, NULL, NULL);
 164}