210 lines
4.8 KiB
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))
|
|
}
|