github.com/viant/toolbox@v0.34.5/value_provider_test.go (about)

     1  package toolbox_test
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/viant/toolbox"
     9  )
    10  
    11  func TestNewEnvValueProvider(t *testing.T) {
    12  	provider := toolbox.NewEnvValueProvider()
    13  	{
    14  		_, err := provider.Get(nil, "USER")
    15  		assert.Nil(t, err)
    16  	}
    17  	{
    18  		_, err := provider.Get(nil, "_blahblah")
    19  		assert.NotNil(t, err)
    20  	}
    21  
    22  }
    23  
    24  func TestNewCastedValueProvider(t *testing.T) {
    25  	provider := toolbox.NewCastedValueProvider()
    26  
    27  	for _, source := range []interface{}{2, "2"} {
    28  		value, err := provider.Get(nil, "int", source)
    29  		assert.Nil(t, err)
    30  		assert.Equal(t, 2, value)
    31  	}
    32  
    33  	{
    34  		_, err := provider.Get(nil, "int")
    35  		assert.NotNil(t, err, "Invalid number of parameters")
    36  	}
    37  
    38  	for _, source := range []interface{}{2, "2", 2.0} {
    39  		value, err := provider.Get(nil, "float", source)
    40  		assert.Nil(t, err)
    41  		assert.Equal(t, 2.0, value)
    42  	}
    43  
    44  	for _, source := range []interface{}{true, "true", 1} {
    45  		value, err := provider.Get(nil, "bool", source)
    46  		assert.Nil(t, err)
    47  		assert.Equal(t, true, value)
    48  	}
    49  	for _, source := range []interface{}{1, "1"} {
    50  		value, err := provider.Get(nil, "string", source)
    51  		assert.Nil(t, err)
    52  		assert.Equal(t, "1", value)
    53  	}
    54  
    55  	{
    56  		value, err := provider.Get(nil, "time", "2016-02-22 12:32:01 UTC", toolbox.DateFormatToLayout("yyyy-MM-dd hh:mm:ss z"))
    57  		assert.Nil(t, err)
    58  		timeValue := value.(time.Time)
    59  		assert.Equal(t, int64(1456144321), timeValue.Unix())
    60  	}
    61  
    62  	{
    63  		_, err := provider.Get(nil, "time", "2016/02-22 12:32:01 UTC", toolbox.DateFormatToLayout("yyyy-MM-dd hh:mm:ss"))
    64  		assert.NotNil(t, err, "invalid format")
    65  	}
    66  
    67  	{
    68  		_, err := provider.Get(nil, "time", "2016-02-22 12:32:01 UTC", toolbox.DateFormatToLayout("yyyy-MM-dd hh:mm:ss z"), "1")
    69  		assert.NotNil(t, err, "to many parameters")
    70  	}
    71  
    72  	{
    73  		_, err := provider.Get(nil, "ABC", "1")
    74  		assert.NotNil(t, err, "NOT IMPLEMENTED")
    75  	}
    76  }
    77  
    78  func TestNewWeekdayProvider(t *testing.T) {
    79  	provider := toolbox.NewWeekdayProvider()
    80  	value, err := provider.Get(toolbox.NewContext(), nil)
    81  	assert.Nil(t, err)
    82  	assert.NotNil(t, value)
    83  	assert.Equal(t, toolbox.AsInt(value), int(time.Now().Weekday()))
    84  }
    85  
    86  func TestNewCurrentTimeProvider(t *testing.T) {
    87  	provider := toolbox.NewCurrentTimeProvider()
    88  	value, err := provider.Get(nil)
    89  	assert.Nil(t, err)
    90  	assert.NotNil(t, value)
    91  }
    92  
    93  func TestNewCurrentDateProvider(t *testing.T) {
    94  	provider := toolbox.NewCurrentDateProvider()
    95  	value, err := provider.Get(nil)
    96  	assert.Nil(t, err)
    97  	assert.NotNil(t, value)
    98  }
    99  
   100  func TestNewNilProvider(t *testing.T) {
   101  	provider := toolbox.NewNilValueProvider()
   102  	value, err := provider.Get(nil)
   103  	assert.Nil(t, err)
   104  	assert.Nil(t, value)
   105  }
   106  
   107  func TestNewValueProviderRegistry(t *testing.T) {
   108  	registry := toolbox.NewValueProviderRegistry()
   109  	assert.False(t, registry.Contains("a"))
   110  	registry.Register("a", toolbox.NewNilValueProvider())
   111  	assert.True(t, registry.Contains("a"))
   112  	provider := registry.Get("a")
   113  	assert.NotNil(t, provider)
   114  	assert.Equal(t, 1, len(registry.Names()))
   115  }
   116  
   117  func TestNewDictionaryProviderRegistry(t *testing.T) {
   118  
   119  	var dictionary toolbox.MapDictionary = make(map[string]interface{})
   120  	var key toolbox.MapDictionary
   121  
   122  	dictionary["k1"] = "123"
   123  	dictionary["k2"] = "xyz"
   124  
   125  	provider := toolbox.NewDictionaryProvider(&key)
   126  	context := toolbox.NewContext()
   127  	context.Put(&key, &dictionary)
   128  
   129  	{
   130  		value, err := provider.Get(context, "k1")
   131  		assert.Nil(t, err)
   132  		assert.Equal(t, "123", value)
   133  
   134  	}
   135  	{
   136  		value, err := provider.Get(context, "k2")
   137  		assert.Nil(t, err)
   138  		assert.Equal(t, "xyz", value)
   139  
   140  	}
   141  
   142  	{
   143  		value, err := provider.Get(context, "k13", "true")
   144  		assert.NotNil(t, err)
   145  		assert.Nil(t, value)
   146  
   147  	}
   148  
   149  }
   150  
   151  func Test_NewNewTimeProvider(t *testing.T) {
   152  
   153  	var now = time.Now()
   154  	provider := toolbox.NewTimeDiffProvider()
   155  
   156  	{
   157  		result, err := provider.Get(nil, "now", 1, "day")
   158  		assert.Nil(t, err)
   159  
   160  		var timeResult = toolbox.AsTime(result, "")
   161  		in23Hours := now.Add(23 * time.Hour)
   162  		in25Hours := now.Add(25 * time.Hour)
   163  		assert.True(t, timeResult.After(in23Hours))
   164  		assert.True(t, timeResult.Before(in25Hours))
   165  	}
   166  
   167  	{
   168  		result, err := provider.Get(nil, "now", 1, "hour", "timestamp")
   169  		assert.Nil(t, err)
   170  
   171  		var timeResult = toolbox.AsInt(result)
   172  		in59Mins := int(now.Add(59*time.Minute).Unix() * 1000)
   173  		in61Mins := int(now.Add(61*time.Minute).Unix() * 1000)
   174  		assert.True(t, in59Mins < timeResult)
   175  		assert.True(t, timeResult < in61Mins)
   176  	}
   177  
   178  	{
   179  		result, err := provider.Get(nil, "now", 1, "week", "unix")
   180  		assert.Nil(t, err)
   181  
   182  		var timeResult = toolbox.AsInt(result)
   183  		in6Days := int(now.Add(6 * 24 * time.Hour).Unix())
   184  		in8Days := int(now.Add(8 * 24 * time.Hour).Unix())
   185  		assert.True(t, in6Days < timeResult)
   186  		assert.True(t, timeResult < in8Days)
   187  	}
   188  	{
   189  		result, err := provider.Get(nil, "now", 1, "hour", "h")
   190  		assert.Nil(t, err)
   191  		assert.Equal(t, time.Now().Hour()%12+1, toolbox.AsInt(result))
   192  	}
   193  }
   194  
   195  func Test_NewDateOfBirthValueProvider(t *testing.T) {
   196  	//provider := toolbox.NewDateOfBirthrovider()
   197  
   198  	//{
   199  	//	result, err := provider.Get(toolbox.NewContext(), 3, 6, 3)
   200  	//	assert.Nil(t, err)
   201  	//	assert.EqualValues(t, "2016-06-03", toolbox.AsString(result))
   202  	//}
   203  	//
   204  	//{
   205  	//	result, err := provider.Get(toolbox.NewContext(), 3, 6, 3, "yyyy-MM-dd")
   206  	//	assert.Nil(t, err)
   207  	//	assert.EqualValues(t, "2016-06-03", toolbox.AsString(result))
   208  	//}
   209  	//
   210  	//{
   211  	//	result, err := provider.Get(toolbox.NewContext(), 3, 6, 3, "yyyy")
   212  	//	assert.Nil(t, err)
   213  	//	assert.EqualValues(t, "2016", toolbox.AsString(result))
   214  	//}
   215  	//
   216  	//{
   217  	//	result, err := provider.Get(toolbox.NewContext(), 3, 9, 2, "yyyy-MM")
   218  	//	assert.Nil(t, err)
   219  	//	assert.EqualValues(t, "2016-09", toolbox.AsString(result))
   220  	//}
   221  	//
   222  	//{
   223  	//	result, err := provider.Get(toolbox.NewContext(), 5, 12, 25, "-MM-dd")
   224  	//	assert.Nil(t, err)
   225  	//	assert.EqualValues(t, "-12-25", toolbox.AsString(result))
   226  	//}
   227  	//
   228  	//{
   229  	//	_, err := provider.Get(toolbox.NewContext())
   230  	//	assert.NotNil(t, err)
   231  	//
   232  	//}
   233  
   234  }