github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/config/types/duration_test.go (about)

     1  package types
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestDurationUnmarshal(t *testing.T) {
    13  	type testCase struct {
    14  		name           string
    15  		input          string
    16  		expectedResult *Duration
    17  		expectedErr    error
    18  	}
    19  
    20  	testCases := []testCase{
    21  		{
    22  			name:           "valid duration",
    23  			input:          "60s",
    24  			expectedResult: &Duration{Duration: time.Minute},
    25  		},
    26  		{
    27  			name:        "int value",
    28  			input:       "60",
    29  			expectedErr: fmt.Errorf("time: missing unit in duration \"60\""),
    30  		},
    31  		{
    32  			name:        "no duration value",
    33  			input:       "abc",
    34  			expectedErr: fmt.Errorf("time: invalid duration \"abc\""),
    35  		},
    36  	}
    37  
    38  	for _, testCase := range testCases {
    39  		t.Run(testCase.name, func(t *testing.T) {
    40  			var d Duration
    41  			input, err := json.Marshal(testCase.input)
    42  			require.NoError(t, err)
    43  			err = json.Unmarshal(input, &d)
    44  
    45  			if testCase.expectedResult != nil {
    46  				require.Equal(t, (*testCase.expectedResult).Nanoseconds(), d.Nanoseconds())
    47  			}
    48  
    49  			if err != nil {
    50  				require.Equal(t, testCase.expectedErr.Error(), err.Error())
    51  			}
    52  		})
    53  	}
    54  }