github.com/polygon-io/client-go@v1.16.4/rest/models/types_test.go (about)

     1  package models_test
     2  
     3  import (
     4  	"encoding/json"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/polygon-io/client-go/rest/models"
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  type Response struct {
    13  	Time models.Time `json:"time"`
    14  }
    15  
    16  func TestUnmarshalTime(t *testing.T) {
    17  	expect1, _ := time.Parse("2006-01-02T15:04:05Z", "2022-05-10T22:30:37Z")
    18  	expect2, _ := time.Parse("2006-01-02T15:04:05.000Z", "2022-05-10T22:30:37.546Z")
    19  	expect3, _ := time.Parse("2006-01-02T15:04:05-07:00", "2022-05-10T22:30:37-08:00")
    20  	expect4, _ := time.Parse("2006-01-02T15:04:05.000-0700", "2022-05-10T22:30:37.546-0800")
    21  
    22  	tests := map[string]struct {
    23  		input  []byte   // input
    24  		expect Response // expected output
    25  		err    error    // expected error
    26  	}{
    27  		"2006-01-02T15:04:05Z": {
    28  			input: []byte(`{
    29  				"time": "2022-05-10T22:30:37Z"
    30  			}`),
    31  			expect: Response{
    32  				Time: models.Time(expect1),
    33  			},
    34  		},
    35  		"2006-01-02T15:04:05.000Z": {
    36  			input: []byte(`{
    37  				"time": "2022-05-10T22:30:37.546Z"
    38  			}`),
    39  			expect: Response{
    40  				Time: models.Time(expect2),
    41  			},
    42  		},
    43  		"2006-01-02T15:04:05-07:00": {
    44  			input: []byte(`{
    45  				"time": "2022-05-10T22:30:37-08:00"
    46  			}`),
    47  			expect: Response{
    48  				Time: models.Time(expect3),
    49  			},
    50  		},
    51  		"2006-01-02T15:04:05.000-0700": {
    52  			input: []byte(`{
    53  				"time": "2022-05-10T22:30:37.546-0800"
    54  			}`),
    55  			expect: Response{
    56  				Time: models.Time(expect4),
    57  			},
    58  		},
    59  		"unexpected format": {
    60  			input: []byte(`{
    61  				"time": "2022-10T22:3"
    62  			}`),
    63  			err: &time.ParseError{Layout: "2006-01-02T15:04:05Z", Value: "2022-10T22:3", LayoutElem: "-", ValueElem: "T22:3", Message: ""},
    64  		},
    65  	}
    66  
    67  	for desc, tc := range tests {
    68  		t.Run(desc, func(t *testing.T) {
    69  			var res Response
    70  			err := json.Unmarshal(tc.input, &res)
    71  			assert.Equal(t, tc.err, err)
    72  
    73  			expect := time.Time(tc.expect.Time).String()
    74  			actual := time.Time(res.Time).String()
    75  			if expect != actual {
    76  				t.Errorf("%v: expected { %v } got { %v }", desc, expect, actual)
    77  			}
    78  		})
    79  	}
    80  }