mirror of
https://github.com/cheat/cheat.git
synced 2026-03-07 11:13:33 +01:00
Bug fixes: - Fix inverted pager detection logic (returned error instead of path) - Fix repo.Clone ignoring destination directory parameter - Fix sheet loading using append on pre-sized slices - Clean up partial files on copy failure - Trim whitespace from editor config Security: - Add path traversal protection for cheatsheet names Performance: - Move regex compilation outside search loop - Replace string concatenation with strings.Join in search Build: - Remove go:generate; embed config and usage as string literals - Parallelize release builds - Add fuzz testing infrastructure Testing: - Improve test coverage from 38.9% to 50.2% - Add fuzz tests for search, filter, tags, and validation Documentation: - Fix inaccurate code examples in HACKING.md - Add missing --conf and --all options to man page - Add ADRs for path traversal, env parsing, and search parallelization - Update CONTRIBUTING.md to reflect project policy Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package sheets
|
|
|
|
import (
|
|
"path"
|
|
"testing"
|
|
|
|
"github.com/cheat/cheat/internal/cheatpath"
|
|
"github.com/cheat/cheat/internal/mock"
|
|
)
|
|
|
|
// TestLoad asserts that sheets on valid cheatpaths can be loaded successfully
|
|
func TestLoad(t *testing.T) {
|
|
|
|
// mock cheatpaths
|
|
cheatpaths := []cheatpath.Cheatpath{
|
|
{
|
|
Name: "community",
|
|
Path: path.Join(mock.Path("cheatsheets"), "community"),
|
|
ReadOnly: true,
|
|
},
|
|
{
|
|
Name: "personal",
|
|
Path: path.Join(mock.Path("cheatsheets"), "personal"),
|
|
ReadOnly: false,
|
|
},
|
|
}
|
|
|
|
// load cheatsheets
|
|
cheatpathSheets, err := Load(cheatpaths)
|
|
if err != nil {
|
|
t.Errorf("failed to load cheatsheets: %v", err)
|
|
}
|
|
|
|
// assert that the correct number of sheets loaded
|
|
// (sheet load details are tested in `sheet_test.go`)
|
|
totalSheets := 0
|
|
for _, sheets := range cheatpathSheets {
|
|
totalSheets += len(sheets)
|
|
}
|
|
|
|
// we expect 4 total sheets (2 from community, 2 from personal)
|
|
// hidden files and files with extensions are excluded
|
|
want := 4
|
|
if totalSheets != want {
|
|
t.Errorf(
|
|
"failed to load correct number of cheatsheets: want: %d, got: %d",
|
|
want,
|
|
totalSheets,
|
|
)
|
|
}
|
|
}
|
|
|
|
// TestLoadBadPath asserts that an error is returned if a cheatpath is invalid
|
|
func TestLoadBadPath(t *testing.T) {
|
|
|
|
// mock a bad cheatpath
|
|
cheatpaths := []cheatpath.Cheatpath{
|
|
{
|
|
Name: "badpath",
|
|
Path: "/cheat/test/path/does/not/exist",
|
|
ReadOnly: true,
|
|
},
|
|
}
|
|
|
|
// attempt to load the cheatpath
|
|
if _, err := Load(cheatpaths); err == nil {
|
|
t.Errorf("failed to reject invalid cheatpath")
|
|
}
|
|
}
|