code.gitea.io/gitea@v1.22.3/models/auth/access_token_test.go (about) 1 // Copyright 2016 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package auth_test 5 6 import ( 7 "testing" 8 9 auth_model "code.gitea.io/gitea/models/auth" 10 "code.gitea.io/gitea/models/db" 11 "code.gitea.io/gitea/models/unittest" 12 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestNewAccessToken(t *testing.T) { 17 assert.NoError(t, unittest.PrepareTestDatabase()) 18 token := &auth_model.AccessToken{ 19 UID: 3, 20 Name: "Token C", 21 } 22 assert.NoError(t, auth_model.NewAccessToken(db.DefaultContext, token)) 23 unittest.AssertExistsAndLoadBean(t, token) 24 25 invalidToken := &auth_model.AccessToken{ 26 ID: token.ID, // duplicate 27 UID: 2, 28 Name: "Token F", 29 } 30 assert.Error(t, auth_model.NewAccessToken(db.DefaultContext, invalidToken)) 31 } 32 33 func TestAccessTokenByNameExists(t *testing.T) { 34 name := "Token Gitea" 35 36 assert.NoError(t, unittest.PrepareTestDatabase()) 37 token := &auth_model.AccessToken{ 38 UID: 3, 39 Name: name, 40 } 41 42 // Check to make sure it doesn't exists already 43 exist, err := auth_model.AccessTokenByNameExists(db.DefaultContext, token) 44 assert.NoError(t, err) 45 assert.False(t, exist) 46 47 // Save it to the database 48 assert.NoError(t, auth_model.NewAccessToken(db.DefaultContext, token)) 49 unittest.AssertExistsAndLoadBean(t, token) 50 51 // This token must be found by name in the DB now 52 exist, err = auth_model.AccessTokenByNameExists(db.DefaultContext, token) 53 assert.NoError(t, err) 54 assert.True(t, exist) 55 56 user4Token := &auth_model.AccessToken{ 57 UID: 4, 58 Name: name, 59 } 60 61 // Name matches but different user ID, this shouldn't exists in the 62 // database 63 exist, err = auth_model.AccessTokenByNameExists(db.DefaultContext, user4Token) 64 assert.NoError(t, err) 65 assert.False(t, exist) 66 } 67 68 func TestGetAccessTokenBySHA(t *testing.T) { 69 assert.NoError(t, unittest.PrepareTestDatabase()) 70 token, err := auth_model.GetAccessTokenBySHA(db.DefaultContext, "d2c6c1ba3890b309189a8e618c72a162e4efbf36") 71 assert.NoError(t, err) 72 assert.Equal(t, int64(1), token.UID) 73 assert.Equal(t, "Token A", token.Name) 74 assert.Equal(t, "2b3668e11cb82d3af8c6e4524fc7841297668f5008d1626f0ad3417e9fa39af84c268248b78c481daa7e5dc437784003494f", token.TokenHash) 75 assert.Equal(t, "e4efbf36", token.TokenLastEight) 76 77 _, err = auth_model.GetAccessTokenBySHA(db.DefaultContext, "notahash") 78 assert.Error(t, err) 79 assert.True(t, auth_model.IsErrAccessTokenNotExist(err)) 80 81 _, err = auth_model.GetAccessTokenBySHA(db.DefaultContext, "") 82 assert.Error(t, err) 83 assert.True(t, auth_model.IsErrAccessTokenEmpty(err)) 84 } 85 86 func TestListAccessTokens(t *testing.T) { 87 assert.NoError(t, unittest.PrepareTestDatabase()) 88 tokens, err := db.Find[auth_model.AccessToken](db.DefaultContext, auth_model.ListAccessTokensOptions{UserID: 1}) 89 assert.NoError(t, err) 90 if assert.Len(t, tokens, 2) { 91 assert.Equal(t, int64(1), tokens[0].UID) 92 assert.Equal(t, int64(1), tokens[1].UID) 93 assert.Contains(t, []string{tokens[0].Name, tokens[1].Name}, "Token A") 94 assert.Contains(t, []string{tokens[0].Name, tokens[1].Name}, "Token B") 95 } 96 97 tokens, err = db.Find[auth_model.AccessToken](db.DefaultContext, auth_model.ListAccessTokensOptions{UserID: 2}) 98 assert.NoError(t, err) 99 if assert.Len(t, tokens, 1) { 100 assert.Equal(t, int64(2), tokens[0].UID) 101 assert.Equal(t, "Token A", tokens[0].Name) 102 } 103 104 tokens, err = db.Find[auth_model.AccessToken](db.DefaultContext, auth_model.ListAccessTokensOptions{UserID: 100}) 105 assert.NoError(t, err) 106 assert.Empty(t, tokens) 107 } 108 109 func TestUpdateAccessToken(t *testing.T) { 110 assert.NoError(t, unittest.PrepareTestDatabase()) 111 token, err := auth_model.GetAccessTokenBySHA(db.DefaultContext, "4c6f36e6cf498e2a448662f915d932c09c5a146c") 112 assert.NoError(t, err) 113 token.Name = "Token Z" 114 115 assert.NoError(t, auth_model.UpdateAccessToken(db.DefaultContext, token)) 116 unittest.AssertExistsAndLoadBean(t, token) 117 } 118 119 func TestDeleteAccessTokenByID(t *testing.T) { 120 assert.NoError(t, unittest.PrepareTestDatabase()) 121 122 token, err := auth_model.GetAccessTokenBySHA(db.DefaultContext, "4c6f36e6cf498e2a448662f915d932c09c5a146c") 123 assert.NoError(t, err) 124 assert.Equal(t, int64(1), token.UID) 125 126 assert.NoError(t, auth_model.DeleteAccessTokenByID(db.DefaultContext, token.ID, 1)) 127 unittest.AssertNotExistsBean(t, token) 128 129 err = auth_model.DeleteAccessTokenByID(db.DefaultContext, 100, 100) 130 assert.Error(t, err) 131 assert.True(t, auth_model.IsErrAccessTokenNotExist(err)) 132 }