mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 11:03:34 +00:00
@@ -53,6 +53,10 @@ func (c *Config) Read() error {
|
||||
|
||||
func (c *Config) Save() error {
|
||||
dir, _ := filepath.Split(c.path)
|
||||
// If dir is empty (e.g., when path is just a filename), use current directory
|
||||
if dir == "" {
|
||||
dir = "."
|
||||
}
|
||||
if err := os.MkdirAll(dir, 0o700); err != nil {
|
||||
return fmt.Errorf("create config directory '%s': %w", dir, err)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestConfig_Save(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// Create a temporary directory for the test
|
||||
tmpDir := t.TempDir()
|
||||
|
||||
// Change to temp directory so relative paths resolve correctly
|
||||
originalDir, err := os.Getwd()
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to get current directory: %v", err)
|
||||
}
|
||||
defer func() {
|
||||
if err := os.Chdir(originalDir); err != nil {
|
||||
t.Logf("Failed to restore original directory: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
configPath string
|
||||
contextName string
|
||||
expectFileAt string // Expected file location for verification
|
||||
useAbsolutePath bool // Whether to use absolute path for expectFileAt
|
||||
}{
|
||||
{
|
||||
name: "relative path without prefix",
|
||||
configPath: "test-config.yaml",
|
||||
contextName: "test",
|
||||
},
|
||||
{
|
||||
name: "relative path with prefix",
|
||||
configPath: "./test-config-2.yaml",
|
||||
contextName: "test2",
|
||||
},
|
||||
{
|
||||
name: "absolute path",
|
||||
configPath: filepath.Join(tmpDir, "absolute-config.yaml"),
|
||||
contextName: "test3",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
if err := os.Chdir(tmpDir); err != nil {
|
||||
t.Fatalf("Failed to change to temp directory: %v", err)
|
||||
}
|
||||
|
||||
cfg := &Config{
|
||||
CurrentContext: tt.contextName,
|
||||
Contexts: map[string]*Context{
|
||||
tt.contextName: {
|
||||
Name: tt.contextName,
|
||||
},
|
||||
},
|
||||
path: tt.configPath,
|
||||
}
|
||||
|
||||
// This should not fail when saving the config
|
||||
err := cfg.Save()
|
||||
if err != nil {
|
||||
t.Errorf("Expected no error when saving config, got: %v", err)
|
||||
}
|
||||
|
||||
// Verify the file was created
|
||||
if _, err := os.Stat(tt.configPath); os.IsNotExist(err) {
|
||||
t.Errorf("Config file was not created at expected path: %s", tt.configPath)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user