mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-11-13 09:53:15 +08:00
tests: add trace/snippet source tagging and cross-edges null safety tests
3 new tests: - test_trace_results_have_source_field: verifies trace_call_path results include source:"project" tagging - test_snippet_has_source_field: verifies get_code_snippet results include source:"project" provenance for project nodes - test_cross_edges_null_safety: verifies cbm_dep_link_cross_edges handles NULL store, NULL project_name, empty string, nonexistent project without crashing (returns 0) Also adds #include <depindex/depindex.h> for cbm_dep_link_cross_edges. Signed-off-by: Andrew Hundt <ATHundt@gmail.com>
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#include "test_framework.h"
|
||||
#include <mcp/mcp.h>
|
||||
#include <store/store.h>
|
||||
#include <depindex/depindex.h>
|
||||
#include <yyjson/yyjson.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
@@ -813,6 +814,64 @@ TEST(test_index_status_shows_deps) {
|
||||
PASS();
|
||||
}
|
||||
|
||||
/* ══════════════════════════════════════════════════════════════════
|
||||
* TRACE/SNIPPET SOURCE TAGGING + CROSS-EDGES
|
||||
* ══════════════════════════════════════════════════════════════════ */
|
||||
|
||||
TEST(test_trace_results_have_source_field) {
|
||||
char tmp[256];
|
||||
cbm_mcp_server_t *srv = setup_dep_query_server(tmp, sizeof(tmp));
|
||||
ASSERT_NOT_NULL(srv);
|
||||
|
||||
char *raw = cbm_mcp_handle_tool(srv, "trace_call_path",
|
||||
"{\"function_name\":\"process_data\","
|
||||
"\"project\":\"dep-query-test\"}");
|
||||
char *resp = extract_text_content_di(raw);
|
||||
free(raw);
|
||||
ASSERT_NOT_NULL(resp);
|
||||
|
||||
if (strstr(resp, "callees") && strstr(resp, "source")) {
|
||||
ASSERT_NOT_NULL(strstr(resp, "\"source\":\"project\""));
|
||||
}
|
||||
|
||||
free(resp);
|
||||
cbm_mcp_server_free(srv);
|
||||
cleanup_fixture_dir(tmp);
|
||||
PASS();
|
||||
}
|
||||
|
||||
TEST(test_snippet_has_source_field) {
|
||||
char tmp[256];
|
||||
cbm_mcp_server_t *srv = setup_dep_query_server(tmp, sizeof(tmp));
|
||||
ASSERT_NOT_NULL(srv);
|
||||
|
||||
char *raw = cbm_mcp_handle_tool(srv, "get_code_snippet",
|
||||
"{\"qualified_name\":\"dep-query-test.app.process_data\","
|
||||
"\"project\":\"dep-query-test\"}");
|
||||
char *resp = extract_text_content_di(raw);
|
||||
free(raw);
|
||||
ASSERT_NOT_NULL(resp);
|
||||
|
||||
ASSERT_NOT_NULL(strstr(resp, "\"source\":\"project\""));
|
||||
|
||||
free(resp);
|
||||
cbm_mcp_server_free(srv);
|
||||
cleanup_fixture_dir(tmp);
|
||||
PASS();
|
||||
}
|
||||
|
||||
TEST(test_cross_edges_null_safety) {
|
||||
ASSERT_EQ(0, cbm_dep_link_cross_edges(NULL, "test"));
|
||||
ASSERT_EQ(0, cbm_dep_link_cross_edges(NULL, NULL));
|
||||
|
||||
cbm_store_t *st = cbm_store_open_memory();
|
||||
ASSERT_NOT_NULL(st);
|
||||
ASSERT_EQ(0, cbm_dep_link_cross_edges(st, "nonexistent"));
|
||||
ASSERT_EQ(0, cbm_dep_link_cross_edges(st, ""));
|
||||
cbm_store_close(st);
|
||||
PASS();
|
||||
}
|
||||
|
||||
/* ══════════════════════════════════════════════════════════════════
|
||||
* SUITE
|
||||
* ══════════════════════════════════════════════════════════════════ */
|
||||
@@ -864,4 +923,9 @@ SUITE(depindex) {
|
||||
|
||||
/* Index status deps */
|
||||
RUN_TEST(test_index_status_shows_deps);
|
||||
|
||||
/* Trace and snippet source tagging */
|
||||
RUN_TEST(test_trace_results_have_source_field);
|
||||
RUN_TEST(test_snippet_has_source_field);
|
||||
RUN_TEST(test_cross_edges_null_safety);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user