51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
package test
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
v1pb "github.com/usememos/memos/proto/gen/api/v1"
|
|
)
|
|
|
|
func TestCreatePersonalAccessTokenExpiration(t *testing.T) {
|
|
ctx := context.Background()
|
|
ts := NewTestService(t)
|
|
defer ts.Cleanup()
|
|
|
|
user, err := ts.CreateRegularUser(ctx, "pat-expiration")
|
|
require.NoError(t, err)
|
|
userCtx := ts.CreateUserContext(ctx, user.ID)
|
|
parent := "users/" + user.Username
|
|
|
|
t.Run("zero days never expires", func(t *testing.T) {
|
|
response, err := ts.Service.CreatePersonalAccessToken(userCtx, &v1pb.CreatePersonalAccessTokenRequest{
|
|
Parent: parent,
|
|
Description: "non-expiring token",
|
|
})
|
|
require.NoError(t, err)
|
|
require.True(t, strings.HasPrefix(response.Token, "memos_pat_"))
|
|
require.Nil(t, response.PersonalAccessToken.ExpiresAt)
|
|
|
|
listed, err := ts.Service.ListPersonalAccessTokens(userCtx, &v1pb.ListPersonalAccessTokensRequest{Parent: parent})
|
|
require.NoError(t, err)
|
|
require.Len(t, listed.PersonalAccessTokens, 1)
|
|
require.Nil(t, listed.PersonalAccessTokens[0].ExpiresAt)
|
|
})
|
|
|
|
t.Run("positive days sets expiration", func(t *testing.T) {
|
|
before := time.Now().Add(29 * 24 * time.Hour)
|
|
response, err := ts.Service.CreatePersonalAccessToken(userCtx, &v1pb.CreatePersonalAccessTokenRequest{
|
|
Parent: parent,
|
|
Description: "expiring token",
|
|
ExpiresInDays: 30,
|
|
})
|
|
require.NoError(t, err)
|
|
require.NotNil(t, response.PersonalAccessToken.ExpiresAt)
|
|
require.True(t, response.PersonalAccessToken.ExpiresAt.AsTime().After(before))
|
|
require.True(t, response.PersonalAccessToken.ExpiresAt.AsTime().Before(time.Now().Add(31*24*time.Hour)))
|
|
})
|
|
}
|