gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // Copyright 2024 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package oauth2
  4. import (
  5. "testing"
  6. "code.gitea.io/gitea/models/auth"
  7. "code.gitea.io/gitea/models/unittest"
  8. user_model "code.gitea.io/gitea/models/user"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestSource(t *testing.T) {
  12. assert.NoError(t, unittest.PrepareTestDatabase())
  13. source := &Source{
  14. Provider: "fake",
  15. ConfigBase: auth.ConfigBase{
  16. AuthSource: &auth.Source{
  17. ID: 12,
  18. Type: auth.OAuth2,
  19. Name: "fake",
  20. IsActive: true,
  21. IsSyncEnabled: true,
  22. },
  23. },
  24. }
  25. user := &user_model.User{
  26. LoginName: "external",
  27. LoginType: auth.OAuth2,
  28. LoginSource: source.AuthSource.ID,
  29. Name: "test",
  30. Email: "external@example.com",
  31. }
  32. err := user_model.CreateUser(t.Context(), user, &user_model.Meta{}, &user_model.CreateUserOverwriteOptions{})
  33. assert.NoError(t, err)
  34. e := &user_model.ExternalLoginUser{
  35. ExternalID: "external",
  36. UserID: user.ID,
  37. LoginSourceID: user.LoginSource,
  38. RefreshToken: "valid",
  39. }
  40. err = user_model.LinkExternalToUser(t.Context(), user, e)
  41. assert.NoError(t, err)
  42. provider, err := createProvider(source.AuthSource.Name, source)
  43. assert.NoError(t, err)
  44. t.Run("refresh", func(t *testing.T) {
  45. t.Run("valid", func(t *testing.T) {
  46. err := source.refresh(t.Context(), provider, e)
  47. assert.NoError(t, err)
  48. e := &user_model.ExternalLoginUser{
  49. ExternalID: e.ExternalID,
  50. LoginSourceID: e.LoginSourceID,
  51. }
  52. ok, err := user_model.GetExternalLogin(t.Context(), e)
  53. assert.NoError(t, err)
  54. assert.True(t, ok)
  55. assert.Equal(t, "refresh", e.RefreshToken)
  56. assert.Equal(t, "token", e.AccessToken)
  57. u, err := user_model.GetUserByID(t.Context(), user.ID)
  58. assert.NoError(t, err)
  59. assert.True(t, u.IsActive)
  60. })
  61. t.Run("expired", func(t *testing.T) {
  62. err := source.refresh(t.Context(), provider, &user_model.ExternalLoginUser{
  63. ExternalID: "external",
  64. UserID: user.ID,
  65. LoginSourceID: user.LoginSource,
  66. RefreshToken: "expired",
  67. })
  68. assert.NoError(t, err)
  69. e := &user_model.ExternalLoginUser{
  70. ExternalID: e.ExternalID,
  71. LoginSourceID: e.LoginSourceID,
  72. }
  73. ok, err := user_model.GetExternalLogin(t.Context(), e)
  74. assert.NoError(t, err)
  75. assert.True(t, ok)
  76. assert.Empty(t, e.RefreshToken)
  77. assert.Empty(t, e.AccessToken)
  78. u, err := user_model.GetUserByID(t.Context(), user.ID)
  79. assert.NoError(t, err)
  80. assert.False(t, u.IsActive)
  81. })
  82. })
  83. }