Files
BigChef/utils/file_test.go

210 lines
4.8 KiB
Go

package utils
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
)
func TestLimitString(t *testing.T) {
tests := []struct {
name string
input string
maxLen int
expected string
}{
{
name: "Short string",
input: "hello",
maxLen: 10,
expected: "hello",
},
{
name: "Exact length",
input: "hello",
maxLen: 5,
expected: "hello",
},
{
name: "Too long",
input: "hello world",
maxLen: 8,
expected: "hello...",
},
{
name: "With newlines",
input: "hello\nworld",
maxLen: 20,
expected: "hello\\nworld",
},
{
name: "With newlines truncated",
input: "hello\nworld\nfoo\nbar",
maxLen: 15,
expected: "hello\\nworld...",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := LimitString(tt.input, tt.maxLen)
assert.Equal(t, tt.expected, result)
})
}
}
func TestResetWhereNecessary(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "reset-test-*")
assert.NoError(t, err)
defer os.RemoveAll(tmpDir)
// Create test files
file1 := filepath.Join(tmpDir, "file1.txt")
file2 := filepath.Join(tmpDir, "file2.txt")
file3 := filepath.Join(tmpDir, "file3.txt")
err = os.WriteFile(file1, []byte("original1"), 0644)
assert.NoError(t, err)
err = os.WriteFile(file2, []byte("original2"), 0644)
assert.NoError(t, err)
err = os.WriteFile(file3, []byte("original3"), 0644)
assert.NoError(t, err)
// Modify files
err = os.WriteFile(file1, []byte("modified1"), 0644)
assert.NoError(t, err)
err = os.WriteFile(file2, []byte("modified2"), 0644)
assert.NoError(t, err)
// Create mock DB
db, err := GetDB()
assert.NoError(t, err)
err = db.SaveFile(file1, []byte("original1"))
assert.NoError(t, err)
err = db.SaveFile(file2, []byte("original2"))
assert.NoError(t, err)
// file3 not in DB
// Create associations with reset commands
associations := map[string]FileCommandAssociation{
file1: {
File: file1,
Commands: []ModifyCommand{
{Name: "cmd1", Reset: true},
},
},
file2: {
File: file2,
IsolateCommands: []ModifyCommand{
{Name: "cmd2", Reset: true},
},
},
file3: {
File: file3,
Commands: []ModifyCommand{
{Name: "cmd3", Reset: false}, // No reset
},
},
}
// Run reset
err = ResetWhereNecessary(associations, db)
assert.NoError(t, err)
// Verify file1 was reset
data, _ := os.ReadFile(file1)
assert.Equal(t, "original1", string(data))
// Verify file2 was reset
data, _ = os.ReadFile(file2)
assert.Equal(t, "original2", string(data))
// Verify file3 was NOT reset
data, _ = os.ReadFile(file3)
assert.Equal(t, "original3", string(data))
}
func TestResetWhereNecessaryMissingFromDB(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "reset-missing-test-*")
assert.NoError(t, err)
defer os.RemoveAll(tmpDir)
// Create a test file that's been modified
file1 := filepath.Join(tmpDir, "file1.txt")
err = os.WriteFile(file1, []byte("modified_content"), 0644)
assert.NoError(t, err)
// Create DB but DON'T save file to it
db, err := GetDB()
assert.NoError(t, err)
// Create associations with reset command
associations := map[string]FileCommandAssociation{
file1: {
File: file1,
Commands: []ModifyCommand{
{Name: "cmd1", Reset: true},
},
},
}
// Run reset - should use current disk content as fallback
err = ResetWhereNecessary(associations, db)
assert.NoError(t, err)
// Verify file was "reset" to current content (saved to DB for next time)
data, _ := os.ReadFile(file1)
assert.Equal(t, "modified_content", string(data))
// Verify it was saved to DB
savedData, err := db.GetFile(file1)
assert.NoError(t, err)
assert.Equal(t, "modified_content", string(savedData))
}
func TestResetAllFiles(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "reset-all-test-*")
assert.NoError(t, err)
defer os.RemoveAll(tmpDir)
// Create test files
file1 := filepath.Join(tmpDir, "file1.txt")
file2 := filepath.Join(tmpDir, "file2.txt")
err = os.WriteFile(file1, []byte("original1"), 0644)
assert.NoError(t, err)
err = os.WriteFile(file2, []byte("original2"), 0644)
assert.NoError(t, err)
// Create mock DB and save originals
db, err := GetDB()
assert.NoError(t, err)
err = db.SaveFile(file1, []byte("original1"))
assert.NoError(t, err)
err = db.SaveFile(file2, []byte("original2"))
assert.NoError(t, err)
// Modify files
err = os.WriteFile(file1, []byte("modified1"), 0644)
assert.NoError(t, err)
err = os.WriteFile(file2, []byte("modified2"), 0644)
assert.NoError(t, err)
// Verify they're modified
data, _ := os.ReadFile(file1)
assert.Equal(t, "modified1", string(data))
// Reset all
err = ResetAllFiles(db)
assert.NoError(t, err)
// Verify both were reset
data, _ = os.ReadFile(file1)
assert.Equal(t, "original1", string(data))
data, _ = os.ReadFile(file2)
assert.Equal(t, "original2", string(data))
}