return {
|
|
"nvim-neotest/neotest",
|
|
event = "VeryLazy",
|
|
dependencies = {
|
|
"nvim-lua/plenary.nvim",
|
|
"nvim-treesitter/nvim-treesitter",
|
|
"antoinemadec/FixCursorHold.nvim",
|
|
"nvim-neotest/nvim-nio",
|
|
-- Adapters
|
|
"olimorris/neotest-phpunit",
|
|
"praem90/neotest-docker-phpunit.nvim",
|
|
"nvim-neotest/neotest-go",
|
|
},
|
|
config = function()
|
|
local neotest = require("neotest")
|
|
local keymap = vim.keymap
|
|
|
|
-- Environment setup
|
|
vim.env.PROJECT_ROOT = vim.fn.getcwd() .. "/backend/"
|
|
vim.env.ENV_PATH = vim.fn.getcwd() .. "/backend/.env"
|
|
|
|
-- Container toggle state
|
|
local current_container = "app-fpm"
|
|
|
|
-- Test running keymaps
|
|
keymap.set("n", "<leader>tr", function()
|
|
neotest.run.run()
|
|
end, { desc = "Run nearest test" })
|
|
|
|
keymap.set("n", "<leader>tf", function()
|
|
neotest.run.run(vim.fn.expand("%"))
|
|
end, { desc = "Run all tests in file" })
|
|
|
|
keymap.set("n", "<leader>tR", function()
|
|
neotest.run.run_last()
|
|
end, { desc = "Run last test" })
|
|
|
|
keymap.set("n", "<leader>tS", function()
|
|
neotest.run.stop()
|
|
end, { desc = "Stop running tests" })
|
|
|
|
keymap.set("n", "<leader>ta", function()
|
|
neotest.run.attach()
|
|
end, { desc = "Attach to running test" })
|
|
|
|
-- Watch mode
|
|
keymap.set("n", "<leader>tw", function()
|
|
neotest.watch.toggle(vim.fn.expand("%"))
|
|
end, { desc = "Toggle watch mode for file" })
|
|
|
|
-- Output keymaps
|
|
keymap.set("n", "<leader>to", function()
|
|
neotest.output.open({ enter = true, short = false })
|
|
end, { desc = "Open test output" })
|
|
|
|
keymap.set("n", "<leader>tO", function()
|
|
neotest.output_panel.toggle()
|
|
end, { desc = "Toggle output panel" })
|
|
|
|
-- UI keymaps
|
|
keymap.set("n", "<leader>ts", function()
|
|
neotest.summary.toggle()
|
|
end, { desc = "Toggle summary pane" })
|
|
|
|
-- Navigation keymaps
|
|
keymap.set("n", "[t", function()
|
|
neotest.jump.prev({ status = "failed" })
|
|
end, { desc = "Jump to previous failed test" })
|
|
|
|
keymap.set("n", "]t", function()
|
|
neotest.jump.next({ status = "failed" })
|
|
end, { desc = "Jump to next failed test" })
|
|
|
|
-- Setup neotest function
|
|
local cwd = vim.fn.getcwd()
|
|
local app_path = cwd .. "/app/api"
|
|
local subscription_path = cwd .. "/subscription/api"
|
|
|
|
-- Config table that we can modify
|
|
local docker_config = {
|
|
default = {
|
|
container = current_container,
|
|
volume = (current_container == "subscription-fpm" and subscription_path or app_path) .. ":/var/www",
|
|
standalone = false,
|
|
},
|
|
}
|
|
|
|
local function setup_neotest()
|
|
neotest.setup({
|
|
adapters = {
|
|
require("neotest-docker-phpunit").setup({
|
|
phpunit_cmd = "neotest-docker-phpunit",
|
|
docker_phpunit = docker_config,
|
|
}),
|
|
require("neotest-go")({
|
|
root = function()
|
|
return './backend'
|
|
end,
|
|
experimental = {
|
|
test_table = true,
|
|
},
|
|
args = { "-count=1", "-timeout=60s" },
|
|
}),
|
|
},
|
|
output = {
|
|
enabled = true,
|
|
open_on_run = false,
|
|
},
|
|
output_panel = {
|
|
enabled = true,
|
|
open = "botright split | resize 15",
|
|
},
|
|
quickfix = {
|
|
enabled = true,
|
|
open = false,
|
|
},
|
|
status = {
|
|
enabled = true,
|
|
virtual_text = true,
|
|
signs = true,
|
|
},
|
|
floating = {
|
|
border = "rounded",
|
|
max_height = 0.8,
|
|
max_width = 0.9,
|
|
},
|
|
})
|
|
end
|
|
|
|
-- Initial setup
|
|
setup_neotest()
|
|
|
|
-- Container toggle keybind
|
|
keymap.set("n", "<leader>tc", function()
|
|
if current_container == "app-fpm" then
|
|
current_container = "subscription-fpm"
|
|
else
|
|
current_container = "app-fpm"
|
|
end
|
|
|
|
-- Update the config table directly
|
|
docker_config.default.container = current_container
|
|
docker_config.default.volume = (current_container == "subscription-fpm" and subscription_path or app_path) .. ":/var/www"
|
|
|
|
vim.notify("Switched to container: " .. current_container, vim.log.levels.INFO)
|
|
end, { desc = "Toggle container (app/subscription)" })
|
|
end,
|
|
}
|