fuzzyworld

template / files / internal / core / app_test.go

app_test.go

2.5 KB · history · blame

1package core
2
3import (
4 "os"
5 "os/user"
6 "path/filepath"
7 "testing"
8
9 "github.com/stretchr/testify/assert"
10)
11
12func TestReadEnvVars(t *testing.T) {
13 assert.NoError(t, os.Unsetenv("TEMPLATE_USE_DEFAULT_CONFIG"))
14 ev, err := readEnvVars()
15 assert.NoError(t, err)
16 assert.False(t, ev.useDefaultConfig)
17
18 t.Setenv("TEMPLATE_USE_DEFAULT_CONFIG", "true")
19 ev, err = readEnvVars()
20 assert.NoError(t, err)
21 assert.True(t, ev.useDefaultConfig)
22
23 t.Setenv("TEMPLATE_USE_DEFAULT_CONFIG", "false")
24 ev, err = readEnvVars()
25 assert.NoError(t, err)
26 assert.False(t, ev.useDefaultConfig)
27
28 t.Setenv("TEMPLATE_USE_DEFAULT_CONFIG", "not-a-bool")
29 _, err = readEnvVars()
30 assert.Error(t, err)
31}
32
33func TestLoadAndMergeUserConfig(t *testing.T) {
34 usr, err := user.Current()
35 assert.NoError(t, err)
36
37 // file not found — returns global config unchanged
38 globalConfig := defaultConfig()
39 result := loadAndMergeUserConfig("/nonexistent/path/user.yaml", usr, globalConfig)
40 assert.Equal(t, len(globalConfig.Profiles), len(result.Profiles))
41
42 // valid user config — merges profiles
43 dir := t.TempDir()
44 userConfigPath := filepath.Join(dir, "user.yaml")
45 userConfig := Config{
46 Profiles: []Profile{
47 {
48 Name: "user-profile",
49 Type: FileType,
50 NamePatterns: []ParameterizedText{"{{.Year}}.md"},
51 TargetDirectory: "~/notes",
52 },
53 },
54 }
55 err = saveConfig(userConfigPath, userConfig)
56 assert.NoError(t, err)
57
58 result = loadAndMergeUserConfig(userConfigPath, usr, globalConfig)
59 names := make([]string, len(result.Profiles))
60 for i, p := range result.Profiles {
61 names[i] = p.Name
62 }
63 assert.Contains(t, names, "user-profile")
64
65 // invalid yaml — returns global config unchanged
66 badPath := filepath.Join(dir, "bad.yaml")
67 err = os.WriteFile(badPath, []byte("invalid: yaml: ["), 0644)
68 assert.NoError(t, err)
69 result = loadAndMergeUserConfig(badPath, usr, globalConfig)
70 assert.Equal(t, len(globalConfig.Profiles), len(result.Profiles))
71
72 // valid user config but invalid globalConfig → mergeConfigs logs error and returns partial result
73 // mergeConfigs fails validation on an empty globalConfig ("no profiles found")
74 emptyGlobal := Config{}
75 result = loadAndMergeUserConfig(userConfigPath, usr, emptyGlobal)
76 // returns whatever mergeConfigs produced (empty config in this case)
77 _ = result
78}
79
80func TestFindProfileNamedNotFound(t *testing.T) {
81 _, err := findProfile(settings{
82 argumentValues: argumentValues{profile: "nonexistent"},
83 config: Config{Profiles: []Profile{}},
84 })
85 assert.Error(t, err)
86 assert.Contains(t, err.Error(), "error finding profile")
87}