Marty Oehme
f1059c6581
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Added woodpecker pipeline for linting and unit testing.
203 lines
7.2 KiB
Lua
203 lines
7.2 KiB
Lua
local ls = require 'zettelkasten.files'
|
|
-- these tests, I suppose, only work on unix due to the file structure
|
|
|
|
local function simple_api_mock(files)
|
|
return {
|
|
g = {},
|
|
b = {},
|
|
loop = {
|
|
fs_scandir = function()
|
|
if #files == 0 then
|
|
return false
|
|
else
|
|
return true
|
|
end
|
|
end,
|
|
fs_scandir_next = function() return table.remove(files) end
|
|
}
|
|
}
|
|
end
|
|
|
|
describe("get_anchors_and_paths", function()
|
|
before_each(function() Get_api_mock = simple_api_mock end)
|
|
after_each(function() _G.vim = nil end)
|
|
|
|
it("should return anchor-keyed table pointing to filename of zettel",
|
|
function()
|
|
local file_list = {}
|
|
file_list["someDir/1910291645 this-is-a-testfile.md"] =
|
|
"1910291645 this-is-a-testfile.md"
|
|
_G.vim = Get_api_mock(file_list)
|
|
|
|
local expected = {
|
|
["1910291645"] = "someDir/1910291645 this-is-a-testfile.md"
|
|
}
|
|
assert.same(expected, ls.get_anchors_and_paths(file_list))
|
|
end)
|
|
|
|
it("should ignore any malformed files", function()
|
|
local file_list = {
|
|
["someDir/2010261208 this-should-be-picked-up.md"] = "2010261208 this-should-be-picked-up.md",
|
|
["someDir/1910291645 this-is-a-testfile.md"] = "1910291645 this-is-a-testfile.md",
|
|
["someDir/this-is-not-a-testfile.md"] = "this-is-not-a-testfile.md",
|
|
["1910271456 this-is-wrong-extension.txt"] = "1910271456 this-is-wrong-extension.txt",
|
|
["1812 this-is-ignored.md"] = "1812 this-is-ignored.md"
|
|
}
|
|
_G.vim = Get_api_mock(file_list)
|
|
|
|
local expected = {
|
|
["1910291645"] = "someDir/1910291645 this-is-a-testfile.md",
|
|
["2010261208"] = "someDir/2010261208 this-should-be-picked-up.md"
|
|
}
|
|
assert.same(expected, ls.get_anchors_and_paths(file_list))
|
|
end)
|
|
|
|
it("should adhere to the zettel extension defined in options", function()
|
|
local file_list = {
|
|
["mydirectory/1910291645 myfile.wiki"] = "1910291645 myfile.wiki",
|
|
["mydirectory/2345678901 another.wiki"] = "2345678901 another.wiki"
|
|
}
|
|
_G.vim = Get_api_mock(file_list)
|
|
vim.g['zettel_extension'] = '.wiki'
|
|
|
|
local expected = {
|
|
["1910291645"] = "mydirectory/1910291645 myfile.wiki",
|
|
["2345678901"] = "mydirectory/2345678901 another.wiki"
|
|
}
|
|
|
|
assert.same(expected, ls.get_anchors_and_paths(file_list, false, vim.g))
|
|
|
|
end)
|
|
end)
|
|
|
|
describe("get_all_files", function()
|
|
it("should recurse into directories if recursive argument passed in",
|
|
function()
|
|
local files = {
|
|
{"1910271456 testfile.md", "file"},
|
|
{"more-notes-here", "directory"},
|
|
{"2010261208 another-testfile.md", "file"}
|
|
}
|
|
local vim_api_mock = {
|
|
g = {},
|
|
b = {},
|
|
loop = mock({
|
|
fs_scandir = function()
|
|
if #files == 0 then
|
|
return false
|
|
else
|
|
return true
|
|
end
|
|
end,
|
|
fs_scandir_next = function()
|
|
if #files == 0 then return nil end
|
|
local fname, ftype = unpack(table.remove(files))
|
|
return fname, ftype
|
|
end
|
|
})
|
|
}
|
|
_G.vim = vim_api_mock
|
|
|
|
ls.get_all_files("path/to/startingdir", true)
|
|
|
|
assert.spy(vim_api_mock.loop.fs_scandir).was_called(2)
|
|
assert.spy(vim_api_mock.loop.fs_scandir).was_called_with(
|
|
"path/to/startingdir/more-notes-here")
|
|
end)
|
|
|
|
it("should add all files found in subdirectories when recursing", function()
|
|
local outer_files = {
|
|
"subdir", "1234567890 myfile.md", "2345678901 another.md"
|
|
}
|
|
local inner_files = {
|
|
"2222222222 should-be-present.md",
|
|
"3333333333 should-also-be-present.md"
|
|
}
|
|
local files = outer_files
|
|
-- assert.is_true("not implemented")
|
|
local vim_api_mock = {
|
|
g = {},
|
|
b = {},
|
|
loop = {
|
|
fs_scandir = function()
|
|
if #files == 0 then return false end
|
|
return true
|
|
end,
|
|
fs_scandir_next = function()
|
|
if #files == 0 then return nil end
|
|
local fname, ftype = table.remove(files), 'file'
|
|
if fname == "subdir" then
|
|
files = inner_files
|
|
ftype = 'directory'
|
|
end
|
|
return fname, ftype
|
|
end
|
|
}
|
|
}
|
|
_G.vim = vim_api_mock
|
|
local expected = {
|
|
["mydirectory/1234567890 myfile.md"] = "1234567890 myfile.md",
|
|
["mydirectory/2345678901 another.md"] = "2345678901 another.md",
|
|
["mydirectory/subdir/2222222222 should-be-present.md"] = "2222222222 should-be-present.md",
|
|
["mydirectory/subdir/3333333333 should-also-be-present.md"] = "3333333333 should-also-be-present.md"
|
|
}
|
|
assert.same(expected, ls.get_all_files('mydirectory', true))
|
|
end)
|
|
end)
|
|
|
|
describe("get_zettel_by_anchor", function()
|
|
it("should return the correct zettel by id", function()
|
|
local file_list = {
|
|
["aDir/1910291645 myfile.md"] = "1910291645 myfile.md",
|
|
["dir/2345678901 another.md"] = "2345678901 another.md"
|
|
}
|
|
_G.vim = simple_api_mock(file_list)
|
|
|
|
assert.same("aDir/1910291645 myfile.md",
|
|
ls.get_zettel_by_anchor("1910291645", file_list))
|
|
end)
|
|
it("should return nil and not break on no all list passed in", function()
|
|
stub(ls, "get_anchors_and_paths")
|
|
assert.is_not_error(function()
|
|
ls.get_zettel_by_anchor("myanchor")
|
|
end)
|
|
end)
|
|
it("should default to the zettel root dir if no list passed in", function()
|
|
local fc = stub(ls, "get_all_files")
|
|
local expected = require'zettelkasten.options'.zettel().rootdir
|
|
|
|
ls.get_zettel_by_anchor(expected)
|
|
assert.stub(fc).was_called_with(expected, true)
|
|
end)
|
|
end)
|
|
|
|
describe("get_zettel_by_ref", function()
|
|
|
|
it("should return a full file path for file path linked", function()
|
|
local file_list = {
|
|
["link/to/my/file.md"] = "file.md",
|
|
["link/to/my/target-file.md"] = "target-file.md"
|
|
}
|
|
assert.same("link/to/my/target-file.md", ls.get_zettel_by_ref(
|
|
"link/to/my/target-file.md", file_list))
|
|
end)
|
|
|
|
it("should return path to matching base name if only that is linked",
|
|
function()
|
|
local file_list = {
|
|
["link/to/my/file.md"] = "file.md",
|
|
["link/to/my/target-file.md"] = "target-file.md"
|
|
}
|
|
assert.same("link/to/my/target-file.md",
|
|
ls.get_zettel_by_ref("target-file.md", file_list))
|
|
end)
|
|
|
|
it("should not return anything if no match exists", function()
|
|
local file_list = {
|
|
["link/to/my/file.md"] = "file.md",
|
|
["link/to/my/no-target-file.md"] = "no-target-file.md"
|
|
}
|
|
assert.same(nil, ls.get_zettel_by_ref("target-file.md", file_list))
|
|
end)
|
|
|
|
end)
|