-- Integration tests for virtual buffer workflow local busted = require('busted') describe("Virtual Buffer Workflow Integration", function() local ui_manager before_each(function() -- These modules don't exist yet - tests should fail ui_manager = require('notex.ui') end) it("should create virtual buffer for query results", function() local query_results = { documents = { { id = "doc1", file_path = "/tmp/document.md", properties = { title = "Test Document", status = "draft", priority = "high", created_at = "2024-03-15T10:30:00Z" } } }, total_count = 1, execution_time_ms = 25 } local buffer_result = ui_manager.show_query_results(query_results) assert.is_not_nil(buffer_result.buffer_id) assert.is_not_nil(buffer_result.window_id) assert.is_table(buffer_result.lines) assert.is_table(buffer_result.mappings) -- Verify buffer content local lines = buffer_result.lines assert.is_true(#lines > 0) -- Check for header line local found_header = false for _, line in ipairs(lines) do if line:find("Results for:") then found_header = true break end end assert.is_true(found_header, "Buffer should contain query results header") end) it("should handle keyboard interactions in virtual buffer", function() local query_results = { documents = { { id = "doc1", file_path = "/tmp/document.md", properties = { title = "Test Document", status = "draft" } } }, total_count = 1 } local buffer_result = ui_manager.show_query_results(query_results) -- Test opening document with Enter key local open_result = ui_manager.handle_keypress(buffer_result.buffer_id, "", 3) assert.is_true(open_result.success) assert.are.equal("/tmp/document.md", open_result.file_path) -- Test editing with 'e' key local edit_result = ui_manager.handle_keypress(buffer_result.buffer_id, "e", 3) assert.is_true(edit_result.success) assert.are.equal("doc1", edit_result.document_id) -- Test closing with 'q' key local close_result = ui_manager.handle_keypress(buffer_result.buffer_id, "q", 1) assert.is_true(close_result.success) end) it("should update document properties through virtual buffer", function() -- Create initial buffer local query_results = { documents = { { id = "doc1", file_path = "/tmp/document.md", properties = { title = "Test Document", status = "draft", priority = "high" } } }, total_count = 1 } local buffer_result = ui_manager.show_query_results(query_results) -- Simulate user editing status field local update_result = ui_manager.update_property_in_buffer( buffer_result.buffer_id, 3, -- line number 2, -- column number "review" -- new value ) assert.is_true(update_result.success) assert.are.equal("doc1", update_result.document_id) assert.are.equal("status", update_result.property) assert.are.equal("review", update_result.new_value) assert.are.equal("draft", update_result.old_value) -- Verify the underlying file was updated local updated_content = ui_manager.get_document_content("doc1") assert.is_not_nil(updated_content:find('status: "review"')) end) it("should handle large query result sets efficiently", function() -- Generate large test dataset local large_results = { documents = {}, total_count = 1000, execution_time_ms = 45 } for i = 1, 1000 do table.insert(large_results.documents, { id = "doc" .. i, file_path = "/tmp/doc" .. i .. ".md", properties = { title = "Document " .. i, status = i % 2 == 0 and "active" or "draft", priority = math.random(1, 5) } }) end local start_time = vim.loop.hrtime() local buffer_result = ui_manager.show_query_results(large_results) local end_time = vim.loop.hrtime() local buffer_creation_time = (end_time - start_time) / 1e6 -- Convert to milliseconds assert.is_not_nil(buffer_result.buffer_id) assert.is_true(buffer_creation_time < 100, "Buffer creation should be under 100ms") assert.is_true(#buffer_result.lines <= 100, "Should limit lines for performance") end) it("should gracefully handle buffer cleanup", function() local query_results = { documents = { { id = "doc1", properties = { title = "Test Document" } } }, total_count = 1 } local buffer_result = ui_manager.show_query_results(query_results) -- Verify buffer exists local buffer_exists = vim.api.nvim_buf_is_valid(buffer_result.buffer_id) assert.is_true(buffer_exists) -- Close buffer local close_result = ui_manager.close_query_view(buffer_result.buffer_id) assert.is_true(close_result.success) -- Verify buffer no longer exists buffer_exists = vim.api.nvim_buf_is_valid(buffer_result.buffer_id) assert.is_false(buffer_exists) end) end)