1// SPDX-License-Identifier: AGPL-3.0-or-later
2
3package app
4
5import (
6 "errors"
7 "testing"
8
9 "github.com/stretchr/testify/assert"
10 "github.com/stretchr/testify/require"
11
12 "bnema.dev/ermite/internal/config"
13)
14
15func TestLoadConfigChecksTheOwnerName(t *testing.T) {
16 t.Parallel()
17 base := map[string]string{
18 config.EnvDataDir: "/data", config.EnvPublicURL: "https://forge.example.org",
19 config.EnvAdminToken: "0123456789abcdef0123456789abcdef",
20 }
21 load := func(extra map[string]string) (config.Config, error) {
22 env := map[string]string{}
23 for k, v := range base {
24 env[k] = v
25 }
26 for k, v := range extra {
27 env[k] = v
28 }
29 return loadConfig(func(k string) string { return env[k] })
30 }
31
32 cfg, err := load(map[string]string{config.EnvOwner: " bnema "})
33 require.NoError(t, err)
34 assert.Equal(t, "bnema", cfg.Owner)
35 cfg, err = load(nil)
36 require.NoError(t, err)
37 assert.Equal(t, config.DefaultOwner, cfg.Owner)
38
39 for _, owner := range []string{"Bad Name", ".dot", "a/b", "x.git"} {
40 _, err := load(map[string]string{config.EnvOwner: owner})
41 var ce *config.Error
42 require.True(t, errors.As(err, &ce), owner)
43 assert.Contains(t, ce.Problems[0], config.EnvOwner, owner)
44 }
45
46 // The problem is reported with the others, in one error.
47 _, err = load(map[string]string{config.EnvOwner: "Bad", config.EnvCILogRetention: "soon"})
48 var ce *config.Error
49 require.True(t, errors.As(err, &ce))
50 assert.Len(t, ce.Problems, 2)
51}