notex.nvim/tests/contract/test_query_api.lua

117 lines
3.3 KiB
Lua
Raw Permalink Normal View History

2025-10-05 20:16:33 -04:00
-- 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)