package jwtutil // func TestCreateJwt(t *testing.T) { // // Define a user to test // user := &domain.User{ // ID: 123, // } // // Secret key used for signing the JWT // secretKey := "secret" // // Token expiry time (in seconds) // expiry := 3600 // 1 hour // // Call CreateJwt function // tokenString, err := CreateJwt(user, secretKey, expiry) // // Assertions // assert.NoError(t, err, "Error should be nil when creating a JWT") // assert.NotEmpty(t, tokenString, "Token string should not be empty") // // Parse the token back and verify its claims // claims, err := ParseJwt(tokenString, secretKey) // assert.NoError(t, err, "Error should be nil when parsing the JWT") // assert.Equal(t, strconv.Itoa(int(user.ID)), claims.UserId, "User ID should match") // assert.Equal(t, "github.com/lafetz/snippitstash", claims.Issuer, "Issuer should match") // assert.True(t, claims.ExpiresAt.Time.After(time.Now()), "Token should not be expired yet") // expectedExpiryTime := time.Now().Add(time.Duration(expiry) * time.Second) // // Allow for a small margin of error due to the time delay in generating the token // assert.True(t, claims.ExpiresAt.Time.Before(expectedExpiryTime.Add(1*time.Second)), // "Token expiry time should be within the expected range") // assert.True(t, claims.ExpiresAt.Time.After(expectedExpiryTime.Add(-1*time.Second)), // "Token expiry time should be within the expected range") // } // func TestParseJwt(t *testing.T) { // // Define a user to test // user := &domain.User{ // ID: 123, // } // // Secret key used for signing the JWT // secretKey := "secret" // // Token expiry time (in seconds) // expiry := 3600 // 1 hour // // Generate a token using the CreateJwt function // tokenString, err := CreateJwt(user, secretKey, expiry) // assert.NoError(t, err, "Error should be nil when creating a JWT") // assert.NotEmpty(t, tokenString, "Token string should not be empty") // // Now, we will parse the token // claims, err := ParseJwt(tokenString, secretKey) // assert.NoError(t, err, "Error should be nil when parsing the JWT") // assert.NotNil(t, claims, "Claims should not be nil") // // Verify that the claims match the user and other values // assert.Equal(t, strconv.Itoa(int(user.ID)), claims.UserId, "User ID should match") // assert.Equal(t, "github.com/lafetz/snippitstash", claims.Issuer, "Issuer should match") // assert.True(t, claims.ExpiresAt.Time.After(time.Now()), "Token should not be expired yet") // // Ensure the parsing fails when using an invalid token // invalidToken := tokenString + "invalid" // _, err = ParseJwt(invalidToken, secretKey) // assert.Error(t, err, "Parsing an invalid token should return an error") // } // func TestParseJwte(t *testing.T) { // // Define user and key // user := &domain.User{ID: 1} // key := "secretkey" // // Test valid token (not expired) // validJwt, err := CreateJwt(user, key, 4) // Set expiry to 10 seconds // assert.NoError(t, err) // // Test if the token is parsed correctly // claims, err := ParseJwt(validJwt, key) // assert.NoError(t, err) // assert.Equal(t, "1", claims.UserId) // // Wait for token to expire // time.Sleep(5 * time.Second) // Wait longer than the expiry time to test expiration // // Test expired token // _, err = ParseJwt(validJwt, key) // assert.Error(t, jwt.ErrTokenExpired) // Expect an error because the token should be expired // }