117 lines
No EOL
3.3 KiB
Lua
117 lines
No EOL
3.3 KiB
Lua
-- 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) |