github.com/lovung/GoCleanArchitecture@v0.0.0-20210302152432-50d91fd29f9f/pkg/jwtutil/jwt_test.go (about)

     1  package jwtutil
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/google/go-cmp/cmp"
     8  )
     9  
    10  func TestGenerateToken(t *testing.T) {
    11  	InitJWTSession("test_secret", time.Hour*12, time.Hour*24)
    12  	dummyIssueTime, _ := time.Parse(time.RFC3339, "2020-01-01T01:00:05Z")
    13  	tests := []struct {
    14  		name       string
    15  		arg        AuthClaims
    16  		wantAToken string
    17  		wantRToken string
    18  	}{
    19  		{
    20  			name: "SuccsssCase: Correctly put claims",
    21  			arg: AuthClaims{
    22  				UserID:    1,
    23  				IssueTime: dummyIssueTime,
    24  			},
    25  			wantAToken: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.` +
    26  				`eyJleHAiOjE1Nzc4ODM2MDUsImlhdCI6MTU3Nzg0MDQwNSwidXNlcl9pZCI6MX0.` +
    27  				`_OuEn9wfc91EkxpMBu0OGwdwKBaP4jGNdqt0-TTwgbU`,
    28  			wantRToken: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.` +
    29  				`eyJleHAiOjE1Nzc5MjY4MDUsImlhdCI6MTU3Nzg0MDQwNSwidXNlcl9pZCI6MX0.` +
    30  				`eFZh2LXnYE5E4nWrmb7wLFyrY32I-U7r9ysIN4NSDIg`,
    31  		},
    32  	}
    33  
    34  	for _, tt := range tests {
    35  		t.Run(tt.name, func(t *testing.T) {
    36  			gotAToken, gotRToken, _ := GenerateToken(tt.arg)
    37  			if gotAToken != tt.wantAToken {
    38  				t.Errorf("GenerateToken aToken = %v, want = %v", gotAToken, tt.wantAToken)
    39  			}
    40  			if gotRToken != tt.wantRToken {
    41  				t.Errorf("GenerateToken rToken = %v, want = %v", gotRToken, tt.wantRToken)
    42  			}
    43  		})
    44  	}
    45  }
    46  
    47  func TestVerifyToken(t *testing.T) {
    48  	InitJWTSession("test_secret", time.Hour*12, time.Hour*24)
    49  	validToken, _, _ := GenerateToken(
    50  		AuthClaims{
    51  			UserID:    1,
    52  			IssueTime: time.Now(),
    53  		},
    54  	)
    55  
    56  	dummyIssueTime, _ := time.Parse(time.RFC3339, "2020-01-01T01:00:05Z")
    57  	invalidToken, _, _ := GenerateToken(
    58  		AuthClaims{
    59  			UserID:    1,
    60  			IssueTime: dummyIssueTime,
    61  		},
    62  	)
    63  
    64  	tests := []struct {
    65  		name    string
    66  		arg     string
    67  		want    AuthClaims
    68  		wantErr bool
    69  	}{
    70  		{
    71  			name: "SuccessCase: put the token issued right now",
    72  			arg:  validToken,
    73  			want: AuthClaims{
    74  				UserID: 1,
    75  			},
    76  			wantErr: false,
    77  		},
    78  		{
    79  			name:    "FailureCase: put the token issued in the past",
    80  			arg:     invalidToken,
    81  			want:    AuthClaims{},
    82  			wantErr: true,
    83  		},
    84  	}
    85  
    86  	for _, tt := range tests {
    87  		t.Run(tt.name, func(t *testing.T) {
    88  			got, gotErr := VerifyToken(tt.arg)
    89  			if !cmp.Equal(got, tt.want) {
    90  				t.Errorf("VerifyToken: clamis = %v, want = %v", got, tt.want)
    91  			}
    92  			if (gotErr != nil) != tt.wantErr {
    93  				t.Errorf("VerifyToken: err = %v, want = %v", gotErr, tt.wantErr)
    94  			}
    95  		})
    96  	}
    97  }