github.com/maresnic/mr-kong@v1.0.0/config_test.go (about)

     1  package kong_test
     2  
     3  import (
     4  	"encoding/json"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/alecthomas/assert/v2"
     9  	"github.com/maresnic/mr-kong"
    10  )
    11  
    12  func TestMultipleConfigLoading(t *testing.T) {
    13  	var cli struct {
    14  		Flag string `json:"flag,omitempty"`
    15  	}
    16  
    17  	cli.Flag = "first"
    18  	first, cleanFirst := makeConfig(t, &cli)
    19  	defer cleanFirst()
    20  
    21  	cli.Flag = ""
    22  	second, cleanSecond := makeConfig(t, &cli)
    23  	defer cleanSecond()
    24  
    25  	p := mustNew(t, &cli, kong.Configuration(kong.JSON, first, second))
    26  	_, err := p.Parse(nil)
    27  	assert.NoError(t, err)
    28  	assert.Equal(t, "first", cli.Flag)
    29  }
    30  
    31  func TestConfigValidation(t *testing.T) {
    32  	var cli struct {
    33  		Flag string `json:"flag,omitempty" enum:"valid" required:""`
    34  	}
    35  
    36  	cli.Flag = "invalid"
    37  	conf, cleanConf := makeConfig(t, &cli)
    38  	defer cleanConf()
    39  
    40  	p := mustNew(t, &cli, kong.Configuration(kong.JSON, conf))
    41  	_, err := p.Parse(nil)
    42  	assert.Error(t, err)
    43  }
    44  
    45  func makeConfig(t *testing.T, config interface{}) (path string, cleanup func()) {
    46  	t.Helper()
    47  	w, err := os.CreateTemp("", "")
    48  	assert.NoError(t, err)
    49  	defer w.Close()
    50  	err = json.NewEncoder(w).Encode(config)
    51  	assert.NoError(t, err)
    52  	return w.Name(), func() { os.Remove(w.Name()) }
    53  }