local ui = require("brokencode.ui") local client = require("brokencode.client") local source_win = vim.api.nvim_get_current_win() ui.render({ { type = "user", text = "first line\nsecond line" }, }) assert(vim.api.nvim_get_current_win() == source_win, "render changed the current window") local lines = vim.api.nvim_buf_get_lines(ui.chat_buf, 0, -1, false) assert(vim.tbl_contains(lines, "first line"), vim.inspect(lines)) assert(vim.tbl_contains(lines, "second line"), vim.inspect(lines)) local replacement = vim.api.nvim_create_buf(false, true) vim.api.nvim_win_set_buf(ui.chat_win, replacement) ui.render({ { type = "user", text = "restored" } }) assert(vim.api.nvim_win_get_buf(ui.chat_win) == ui.chat_buf, "chat buffer was not restored") ui.set_running("ses_test", true) lines = vim.api.nvim_buf_get_lines(ui.chat_buf, 0, -1, false) assert(vim.tbl_contains(lines, "> **Request running...**"), vim.inspect(lines)) ui.set_running("ses_test", false) lines = vim.api.nvim_buf_get_lines(ui.chat_buf, 0, -1, false) assert(not vim.tbl_contains(lines, "> **Request running...**"), vim.inspect(lines)) local callbacks = {} local messages = client.messages client.messages = function(_, callback) table.insert(callbacks, callback) end ui.refresh("ses_test") ui.refresh("ses_test") callbacks[2](nil, { { type = "user", text = "new response" } }) callbacks[1](nil, { { type = "user", text = "stale response" } }) lines = vim.api.nvim_buf_get_lines(ui.chat_buf, 0, -1, false) assert(vim.tbl_contains(lines, "new response"), vim.inspect(lines)) assert(not vim.tbl_contains(lines, "stale response"), vim.inspect(lines)) ui.set_running("ses_new", true) ui.set_running("ses_old", false) ui.refresh("ses_old") callbacks[3](nil, { { type = "user", text = "old session" } }) assert(ui.current_session == "ses_new", "old polling replaced the active session") client.messages = messages