github.com/Redstoneguy129/cli@v0.0.0-20230211220159-15dca4e91917/internal/utils/config_test.go (about)

     1  package utils
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/BurntSushi/toml"
     7  	"github.com/spf13/afero"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestConfigParsing(t *testing.T) {
    12  	t.Run("classic config file", func(t *testing.T) {
    13  		fsys := afero.NewMemMapFs()
    14  		assert.NoError(t, WriteConfig(fsys, false))
    15  		assert.NoError(t, LoadConfigFS(fsys))
    16  	})
    17  
    18  	t.Run("config file with environment variables", func(t *testing.T) {
    19  		fsys := afero.NewMemMapFs()
    20  		assert.NoError(t, WriteConfig(fsys, true))
    21  
    22  		t.Setenv("AZURE_CLIENT_ID", "hello")
    23  		t.Setenv("AZURE_SECRET", "this is cool")
    24  		assert.NoError(t, LoadConfigFS(fsys))
    25  
    26  		assert.Equal(t, "hello", Config.Auth.External["azure"].ClientId)
    27  		assert.Equal(t, "this is cool", Config.Auth.External["azure"].Secret)
    28  	})
    29  
    30  	t.Run("config file with environment variables fails when unset", func(t *testing.T) {
    31  		fsys := afero.NewMemMapFs()
    32  		assert.NoError(t, WriteConfig(fsys, true))
    33  		assert.Error(t, LoadConfigFS(fsys))
    34  	})
    35  }
    36  
    37  func TestFileSizeLimitConfigParsing(t *testing.T) {
    38  	t.Run("test file size limit parsing number", func(t *testing.T) {
    39  		var testConfig config
    40  		_, err := toml.Decode(`
    41  		[storage]
    42  		file_size_limit = 5000000
    43  		`, &testConfig)
    44  		if assert.NoError(t, err) {
    45  			assert.Equal(t, sizeInBytes(5000000), testConfig.Storage.FileSizeLimit)
    46  		}
    47  	})
    48  
    49  	t.Run("test file size limit parsing bytes unit", func(t *testing.T) {
    50  		var testConfig config
    51  		_, err := toml.Decode(`
    52  		[storage]
    53  		file_size_limit = "5MB"
    54  		`, &testConfig)
    55  		if assert.NoError(t, err) {
    56  			assert.Equal(t, sizeInBytes(5242880), testConfig.Storage.FileSizeLimit)
    57  		}
    58  	})
    59  
    60  	t.Run("test file size limit parsing binary bytes unit", func(t *testing.T) {
    61  		var testConfig config
    62  		_, err := toml.Decode(`
    63  		[storage]
    64  		file_size_limit = "5MiB"
    65  		`, &testConfig)
    66  		if assert.NoError(t, err) {
    67  			assert.Equal(t, sizeInBytes(5242880), testConfig.Storage.FileSizeLimit)
    68  		}
    69  	})
    70  
    71  	t.Run("test file size limit parsing string number", func(t *testing.T) {
    72  		var testConfig config
    73  		_, err := toml.Decode(`
    74  		[storage]
    75  		file_size_limit = "5000000"
    76  		`, &testConfig)
    77  		if assert.NoError(t, err) {
    78  			assert.Equal(t, sizeInBytes(5000000), testConfig.Storage.FileSizeLimit)
    79  		}
    80  	})
    81  
    82  	t.Run("test file size limit parsing bad datatype", func(t *testing.T) {
    83  		var testConfig config
    84  		_, err := toml.Decode(`
    85  		[storage]
    86  		file_size_limit = []
    87  		`, &testConfig)
    88  		assert.Error(t, err)
    89  		assert.Equal(t, sizeInBytes(0), testConfig.Storage.FileSizeLimit)
    90  	})
    91  
    92  	t.Run("test file size limit parsing bad string data", func(t *testing.T) {
    93  		var testConfig config
    94  		_, err := toml.Decode(`
    95  		[storage]
    96  		file_size_limit = "foobar"
    97  		`, &testConfig)
    98  		assert.Error(t, err)
    99  		assert.Equal(t, sizeInBytes(0), testConfig.Storage.FileSizeLimit)
   100  	})
   101  }