-- Contract tests for Query API local busted = require('busted') describe("Query API Contract Tests", function() local query_parser, query_executor, buffer_manager before_each(function() -- These modules don't exist yet - tests should fail query_parser = require('notex.query.parser') query_executor = require('notex.query.executor') buffer_manager = require('notex.ui.buffer') end) describe("Query Parsing API", function() it("should parse basic property filters", function() local query_string = [[ ```notex-query status: "draft" priority: "high" ``` ]] local result = query_parser.parse(query_string) assert.are.equal("draft", result.filters.status) assert.are.equal("high", result.filters.priority) assert.is_not_nil(result.order_by) end) it("should parse WHERE conditions", function() local query_string = [[ ```notex-query FROM status: "active" WHERE priority > 5 AND created_at >= "2024-01-01" ``` ]] local result = query_parser.parse(query_string) assert.is_not_nil(result.conditions) assert.are.equal("AND", result.conditions.type) assert.are.equal(2, #result.conditions.clauses) end) it("should handle parse errors gracefully", function() local invalid_query = [[ ```notex-query WHERE INVALID SYNTAX HERE ``` ]] assert.has_error(function() query_parser.parse(invalid_query) end) end) end) describe("Query Execution API", function() it("should execute parsed queries and return results", function() local parsed_query = { filters = { status = "draft" }, conditions = nil, order_by = { field = "created_at", direction = "DESC" }, limit = 50 } local result = query_executor.execute(parsed_query) assert.is_not_nil(result.documents) assert.is_number(result.total_count) assert.is_number(result.execution_time_ms) assert.is_string(result.query_hash) end) it("should handle execution errors gracefully", function() local invalid_query = { filters = { nonexistent_property = "value" } } local result = query_executor.execute(invalid_query) assert.is_not_nil(result.error) assert.are.equal("execution_error", result.error.error_type) end) end) describe("Virtual Buffer API", function() it("should create query view buffers", function() local query_results = { documents = { { id = "doc123", file_path = "/path/to/document.md", properties = { status = "draft", priority = "high" } } }, total_count = 1 } local buffer_config = buffer_manager.create_query_view(query_results) assert.is_not_nil(buffer_config.buffer_id) assert.is_not_nil(buffer_config.window_id) assert.is_table(buffer_config.lines) assert.is_table(buffer_config.mappings) end) it("should update document properties", function() local update_result = buffer_manager.update_document_property("doc123", "status", "review") assert.is_true(update_result.success) assert.are.equal("doc123", update_result.document_id) assert.are.equal("status", update_result.property) assert.are.equal("review", update_result.new_value) end) end) end)