mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 16:30:25 +08:00 
			
		
		
		
	
		
			
	
	
		
			78 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package timex
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"github.com/stretchr/testify/require"
							 | 
						||
| 
								 | 
							
									"testing"
							 | 
						||
| 
								 | 
							
									"time"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestNullTime_UnmarshalJSON(t *testing.T) {
							 | 
						||
| 
								 | 
							
									zero := time.Time{}
							 | 
						||
| 
								 | 
							
									now := time.Now()
							 | 
						||
| 
								 | 
							
									bytesNow, err := now.MarshalJSON()
							 | 
						||
| 
								 | 
							
									require.NoError(t, err)
							 | 
						||
| 
								 | 
							
									tests := []struct {
							 | 
						||
| 
								 | 
							
										name    string
							 | 
						||
| 
								 | 
							
										want    NullTime
							 | 
						||
| 
								 | 
							
										bytes   []byte
							 | 
						||
| 
								 | 
							
										wantErr error
							 | 
						||
| 
								 | 
							
									}{
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:  "zero",
							 | 
						||
| 
								 | 
							
											want:  NewNullTime(zero),
							 | 
						||
| 
								 | 
							
											bytes: nil,
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:  "now",
							 | 
						||
| 
								 | 
							
											want:  NewNullTime(now),
							 | 
						||
| 
								 | 
							
											bytes: bytesNow,
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									for _, tt := range tests {
							 | 
						||
| 
								 | 
							
										t.Run(tt.name, func(t *testing.T) {
							 | 
						||
| 
								 | 
							
											got := &NullTime{}
							 | 
						||
| 
								 | 
							
											err := got.UnmarshalJSON(tt.bytes)
							 | 
						||
| 
								 | 
							
											require.ErrorIs(t, err, tt.wantErr)
							 | 
						||
| 
								 | 
							
											if err != nil {
							 | 
						||
| 
								 | 
							
												return
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											require.Equal(t, tt.want.Valid, got.Valid)
							 | 
						||
| 
								 | 
							
											require.True(t, got.Time.Equal(tt.want.Time))
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestNullTime_MarshalJSON(t *testing.T) {
							 | 
						||
| 
								 | 
							
									zero := time.Time{}
							 | 
						||
| 
								 | 
							
									now := time.Now()
							 | 
						||
| 
								 | 
							
									bytes, err := now.MarshalJSON()
							 | 
						||
| 
								 | 
							
									require.NoError(t, err)
							 | 
						||
| 
								 | 
							
									tests := []struct {
							 | 
						||
| 
								 | 
							
										name     string
							 | 
						||
| 
								 | 
							
										nullTime NullTime
							 | 
						||
| 
								 | 
							
										want     []byte
							 | 
						||
| 
								 | 
							
										wantErr  error
							 | 
						||
| 
								 | 
							
									}{
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:     "zero",
							 | 
						||
| 
								 | 
							
											nullTime: NewNullTime(zero),
							 | 
						||
| 
								 | 
							
											want:     []byte("null"),
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:     "now",
							 | 
						||
| 
								 | 
							
											nullTime: NewNullTime(now),
							 | 
						||
| 
								 | 
							
											want:     bytes,
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									for _, tt := range tests {
							 | 
						||
| 
								 | 
							
										t.Run(tt.name, func(t *testing.T) {
							 | 
						||
| 
								 | 
							
											got, err := tt.nullTime.MarshalJSON()
							 | 
						||
| 
								 | 
							
											require.ErrorIs(t, err, tt.wantErr)
							 | 
						||
| 
								 | 
							
											if err != nil {
							 | 
						||
| 
								 | 
							
												return
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											require.Equal(t, tt.want, got)
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |