mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 19:13:34 +00:00
@@ -53,6 +53,10 @@ func (c *Config) Read() error {
|
|||||||
|
|
||||||
func (c *Config) Save() error {
|
func (c *Config) Save() error {
|
||||||
dir, _ := filepath.Split(c.path)
|
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 {
|
if err := os.MkdirAll(dir, 0o700); err != nil {
|
||||||
return fmt.Errorf("create config directory '%s': %w", dir, err)
|
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