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>
81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
//go:build integration
|
|
// +build integration
|
|
|
|
package repo
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
// TestCloneIntegration performs a real clone operation to verify functionality
|
|
// Run with: go test -tags=integration ./internal/repo -v -run TestCloneIntegration
|
|
func TestCloneIntegration(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("Skipping integration test in short mode")
|
|
}
|
|
|
|
// Create a temporary directory
|
|
tmpDir, err := os.MkdirTemp("", "cheat-clone-integration-*")
|
|
if err != nil {
|
|
t.Fatalf("failed to create temp dir: %v", err)
|
|
}
|
|
defer os.RemoveAll(tmpDir)
|
|
|
|
destDir := filepath.Join(tmpDir, "cheatsheets")
|
|
|
|
t.Logf("Cloning to: %s", destDir)
|
|
|
|
// Perform the actual clone
|
|
err = Clone(destDir)
|
|
if err != nil {
|
|
t.Fatalf("Clone() failed: %v", err)
|
|
}
|
|
|
|
// Verify the clone succeeded
|
|
info, err := os.Stat(destDir)
|
|
if err != nil {
|
|
t.Fatalf("destination directory not created: %v", err)
|
|
}
|
|
|
|
if !info.IsDir() {
|
|
t.Fatal("destination is not a directory")
|
|
}
|
|
|
|
// Check for .git directory
|
|
gitDir := filepath.Join(destDir, ".git")
|
|
if _, err := os.Stat(gitDir); err != nil {
|
|
t.Error(".git directory not found")
|
|
}
|
|
|
|
// Check for some expected cheatsheets
|
|
expectedFiles := []string{
|
|
"bash", // bash cheatsheet should exist
|
|
"git", // git cheatsheet should exist
|
|
"ls", // ls cheatsheet should exist
|
|
}
|
|
|
|
foundCount := 0
|
|
for _, file := range expectedFiles {
|
|
path := filepath.Join(destDir, file)
|
|
if _, err := os.Stat(path); err == nil {
|
|
foundCount++
|
|
}
|
|
}
|
|
|
|
if foundCount < 2 {
|
|
t.Errorf("expected at least 2 common cheatsheets, found %d", foundCount)
|
|
}
|
|
|
|
t.Log("Clone integration test passed!")
|
|
|
|
// Test cloning to existing directory (should fail)
|
|
err = Clone(destDir)
|
|
if err == nil {
|
|
t.Error("expected error when cloning to existing repository, got nil")
|
|
} else {
|
|
t.Logf("Expected error when cloning to existing dir: %v", err)
|
|
}
|
|
}
|