gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. // Copyright 2024 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package user
  4. import (
  5. "testing"
  6. organization_model "code.gitea.io/gitea/models/organization"
  7. "code.gitea.io/gitea/models/unittest"
  8. user_model "code.gitea.io/gitea/models/user"
  9. "code.gitea.io/gitea/modules/glob"
  10. "code.gitea.io/gitea/modules/setting"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func TestAdminAddOrSetPrimaryEmailAddress(t *testing.T) {
  14. assert.NoError(t, unittest.PrepareTestDatabase())
  15. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 27})
  16. emails, err := user_model.GetEmailAddresses(t.Context(), user.ID)
  17. assert.NoError(t, err)
  18. assert.Len(t, emails, 1)
  19. primary, err := user_model.GetPrimaryEmailAddressOfUser(t.Context(), user.ID)
  20. assert.NoError(t, err)
  21. assert.NotEqual(t, "new-primary@example.com", primary.Email)
  22. assert.Equal(t, user.Email, primary.Email)
  23. assert.NoError(t, AdminAddOrSetPrimaryEmailAddress(t.Context(), user, "new-primary@example.com"))
  24. primary, err = user_model.GetPrimaryEmailAddressOfUser(t.Context(), user.ID)
  25. assert.NoError(t, err)
  26. assert.Equal(t, "new-primary@example.com", primary.Email)
  27. assert.Equal(t, user.Email, primary.Email)
  28. emails, err = user_model.GetEmailAddresses(t.Context(), user.ID)
  29. assert.NoError(t, err)
  30. assert.Len(t, emails, 2)
  31. setting.Service.EmailDomainAllowList = []glob.Glob{glob.MustCompile("example.org")}
  32. defer func() {
  33. setting.Service.EmailDomainAllowList = []glob.Glob{}
  34. }()
  35. assert.NoError(t, AdminAddOrSetPrimaryEmailAddress(t.Context(), user, "new-primary2@example2.com"))
  36. primary, err = user_model.GetPrimaryEmailAddressOfUser(t.Context(), user.ID)
  37. assert.NoError(t, err)
  38. assert.Equal(t, "new-primary2@example2.com", primary.Email)
  39. assert.Equal(t, user.Email, primary.Email)
  40. assert.NoError(t, AdminAddOrSetPrimaryEmailAddress(t.Context(), user, "user27@example.com"))
  41. primary, err = user_model.GetPrimaryEmailAddressOfUser(t.Context(), user.ID)
  42. assert.NoError(t, err)
  43. assert.Equal(t, "user27@example.com", primary.Email)
  44. assert.Equal(t, user.Email, primary.Email)
  45. emails, err = user_model.GetEmailAddresses(t.Context(), user.ID)
  46. assert.NoError(t, err)
  47. assert.Len(t, emails, 3)
  48. }
  49. func TestReplacePrimaryEmailAddress(t *testing.T) {
  50. assert.NoError(t, unittest.PrepareTestDatabase())
  51. t.Run("User", func(t *testing.T) {
  52. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 13})
  53. emails, err := user_model.GetEmailAddresses(t.Context(), user.ID)
  54. assert.NoError(t, err)
  55. assert.Len(t, emails, 1)
  56. primary, err := user_model.GetPrimaryEmailAddressOfUser(t.Context(), user.ID)
  57. assert.NoError(t, err)
  58. assert.NotEqual(t, "primary-13@example.com", primary.Email)
  59. assert.Equal(t, user.Email, primary.Email)
  60. assert.NoError(t, ReplacePrimaryEmailAddress(t.Context(), user, "primary-13@example.com"))
  61. primary, err = user_model.GetPrimaryEmailAddressOfUser(t.Context(), user.ID)
  62. assert.NoError(t, err)
  63. assert.Equal(t, "primary-13@example.com", primary.Email)
  64. assert.Equal(t, user.Email, primary.Email)
  65. emails, err = user_model.GetEmailAddresses(t.Context(), user.ID)
  66. assert.NoError(t, err)
  67. assert.Len(t, emails, 1)
  68. assert.NoError(t, ReplacePrimaryEmailAddress(t.Context(), user, "primary-13@example.com"))
  69. })
  70. t.Run("Organization", func(t *testing.T) {
  71. org := unittest.AssertExistsAndLoadBean(t, &organization_model.Organization{ID: 3})
  72. assert.Equal(t, "org3@example.com", org.Email)
  73. assert.NoError(t, ReplacePrimaryEmailAddress(t.Context(), org.AsUser(), "primary-org@example.com"))
  74. assert.Equal(t, "primary-org@example.com", org.Email)
  75. })
  76. }
  77. func TestAddEmailAddresses(t *testing.T) {
  78. assert.NoError(t, unittest.PrepareTestDatabase())
  79. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  80. assert.Error(t, AddEmailAddresses(t.Context(), user, []string{" invalid email "}))
  81. emails := []string{"user1234@example.com", "user5678@example.com"}
  82. assert.NoError(t, AddEmailAddresses(t.Context(), user, emails))
  83. err := AddEmailAddresses(t.Context(), user, emails)
  84. assert.Error(t, err)
  85. assert.True(t, user_model.IsErrEmailAlreadyUsed(err))
  86. }
  87. func TestDeleteEmailAddresses(t *testing.T) {
  88. assert.NoError(t, unittest.PrepareTestDatabase())
  89. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  90. emails := []string{"user2-2@example.com"}
  91. err := DeleteEmailAddresses(t.Context(), user, emails)
  92. assert.NoError(t, err)
  93. err = DeleteEmailAddresses(t.Context(), user, emails)
  94. assert.Error(t, err)
  95. assert.True(t, user_model.IsErrEmailAddressNotExist(err))
  96. emails = []string{"user2@example.com"}
  97. err = DeleteEmailAddresses(t.Context(), user, emails)
  98. assert.Error(t, err)
  99. assert.True(t, user_model.IsErrPrimaryEmailCannotDelete(err))
  100. }