summaryrefslogtreecommitdiffstats
path: root/model/config_test.go
diff options
context:
space:
mode:
authorJesse Hallam <jesse.hallam@gmail.com>2018-04-13 10:56:09 -0400
committerChristopher Speller <crspeller@gmail.com>2018-04-13 07:56:09 -0700
commitae5e324be8078927bf088bc9dae37189a6ecea6f (patch)
treee8f0a0c2a4c6fc2156ed7af58ed91260a1b147d6 /model/config_test.go
parent911b409936521827152b0a491d3e02ed81202694 (diff)
downloadchat-ae5e324be8078927bf088bc9dae37189a6ecea6f.tar.gz
chat-ae5e324be8078927bf088bc9dae37189a6ecea6f.tar.bz2
chat-ae5e324be8078927bf088bc9dae37189a6ecea6f.zip
MM-9977: test config.SetDefaults leaves nothing nil (#8610)
* MM-9977: test config.SetDefaults leaves nothing nil * clarify test default config test cases * comment re: allowing nil slice * extend config SetDefaults to handle partially initialized configs
Diffstat (limited to 'model/config_test.go')
-rw-r--r--model/config_test.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/model/config_test.go b/model/config_test.go
index 1f917af27..b7533145b 100644
--- a/model/config_test.go
+++ b/model/config_test.go
@@ -4,11 +4,57 @@
package model
import (
+ "fmt"
+ "reflect"
"testing"
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
+func TestConfigDefaults(t *testing.T) {
+ t.Parallel()
+
+ t.Run("somewhere nil when uninitialized", func(t *testing.T) {
+ c := Config{}
+ require.False(t, checkNowhereNil(t, "config", c))
+ })
+
+ t.Run("nowhere nil when initialized", func(t *testing.T) {
+ c := Config{}
+ c.SetDefaults()
+ require.True(t, checkNowhereNil(t, "config", c))
+ })
+
+ t.Run("nowhere nil when partially initialized", func(t *testing.T) {
+ var recursivelyUninitialize func(*Config, string, reflect.Value)
+ recursivelyUninitialize = func(config *Config, name string, v reflect.Value) {
+ if v.Type().Kind() == reflect.Ptr {
+ // Set every pointer we find in the tree to nil
+ v.Set(reflect.Zero(v.Type()))
+ require.True(t, v.IsNil())
+
+ // SetDefaults on the root config should make it non-nil, otherwise
+ // it means that SetDefaults isn't being called recursively in
+ // all cases.
+ config.SetDefaults()
+ if assert.False(t, v.IsNil(), "%s should be non-nil after SetDefaults()", name) {
+ recursivelyUninitialize(config, fmt.Sprintf("(*%s)", name), v.Elem())
+ }
+
+ } else if v.Type().Kind() == reflect.Struct {
+ for i := 0; i < v.NumField(); i++ {
+ recursivelyUninitialize(config, fmt.Sprintf("%s.%s", name, v.Type().Field(i).Name), v.Field(i))
+ }
+ }
+ }
+
+ c := Config{}
+ c.SetDefaults()
+ recursivelyUninitialize(&c, "config", reflect.ValueOf(&c).Elem())
+ })
+}
+
func TestConfigDefaultFileSettingsDirectory(t *testing.T) {
c1 := Config{}
c1.SetDefaults()