You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

user_email_test.go 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package models
  5. import (
  6. "testing"
  7. "code.gitea.io/gitea/models/db"
  8. "code.gitea.io/gitea/models/unittest"
  9. user_model "code.gitea.io/gitea/models/user"
  10. "code.gitea.io/gitea/modules/util"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func TestMakeEmailPrimary(t *testing.T) {
  14. assert.NoError(t, unittest.PrepareTestDatabase())
  15. email := &user_model.EmailAddress{
  16. Email: "user567890@example.com",
  17. }
  18. err := MakeEmailPrimary(email)
  19. assert.Error(t, err)
  20. assert.EqualError(t, err, user_model.ErrEmailAddressNotExist{Email: email.Email}.Error())
  21. email = &user_model.EmailAddress{
  22. Email: "user11@example.com",
  23. }
  24. err = MakeEmailPrimary(email)
  25. assert.Error(t, err)
  26. assert.EqualError(t, err, user_model.ErrEmailNotActivated.Error())
  27. email = &user_model.EmailAddress{
  28. Email: "user9999999@example.com",
  29. }
  30. err = MakeEmailPrimary(email)
  31. assert.Error(t, err)
  32. assert.True(t, IsErrUserNotExist(err))
  33. email = &user_model.EmailAddress{
  34. Email: "user101@example.com",
  35. }
  36. err = MakeEmailPrimary(email)
  37. assert.NoError(t, err)
  38. user, _ := GetUserByID(int64(10))
  39. assert.Equal(t, "user101@example.com", user.Email)
  40. }
  41. func TestActivate(t *testing.T) {
  42. assert.NoError(t, unittest.PrepareTestDatabase())
  43. email := &user_model.EmailAddress{
  44. ID: int64(1),
  45. UID: int64(1),
  46. Email: "user11@example.com",
  47. }
  48. assert.NoError(t, ActivateEmail(email))
  49. emails, _ := user_model.GetEmailAddresses(int64(1))
  50. assert.Len(t, emails, 3)
  51. assert.True(t, emails[0].IsActivated)
  52. assert.True(t, emails[0].IsPrimary)
  53. assert.False(t, emails[1].IsPrimary)
  54. assert.True(t, emails[2].IsActivated)
  55. assert.False(t, emails[2].IsPrimary)
  56. }
  57. func TestListEmails(t *testing.T) {
  58. assert.NoError(t, unittest.PrepareTestDatabase())
  59. // Must find all users and their emails
  60. opts := &SearchEmailOptions{
  61. ListOptions: db.ListOptions{
  62. PageSize: 10000,
  63. },
  64. }
  65. emails, count, err := SearchEmails(opts)
  66. assert.NoError(t, err)
  67. assert.NotEqual(t, int64(0), count)
  68. assert.True(t, count > 5)
  69. contains := func(match func(s *SearchEmailResult) bool) bool {
  70. for _, v := range emails {
  71. if match(v) {
  72. return true
  73. }
  74. }
  75. return false
  76. }
  77. assert.True(t, contains(func(s *SearchEmailResult) bool { return s.UID == 18 }))
  78. // 'user3' is an organization
  79. assert.False(t, contains(func(s *SearchEmailResult) bool { return s.UID == 3 }))
  80. // Must find no records
  81. opts = &SearchEmailOptions{Keyword: "NOTFOUND"}
  82. emails, count, err = SearchEmails(opts)
  83. assert.NoError(t, err)
  84. assert.Equal(t, int64(0), count)
  85. // Must find users 'user2', 'user28', etc.
  86. opts = &SearchEmailOptions{Keyword: "user2"}
  87. emails, count, err = SearchEmails(opts)
  88. assert.NoError(t, err)
  89. assert.NotEqual(t, int64(0), count)
  90. assert.True(t, contains(func(s *SearchEmailResult) bool { return s.UID == 2 }))
  91. assert.True(t, contains(func(s *SearchEmailResult) bool { return s.UID == 27 }))
  92. // Must find only primary addresses (i.e. from the `user` table)
  93. opts = &SearchEmailOptions{IsPrimary: util.OptionalBoolTrue}
  94. emails, _, err = SearchEmails(opts)
  95. assert.NoError(t, err)
  96. assert.True(t, contains(func(s *SearchEmailResult) bool { return s.IsPrimary }))
  97. assert.False(t, contains(func(s *SearchEmailResult) bool { return !s.IsPrimary }))
  98. // Must find only inactive addresses (i.e. not validated)
  99. opts = &SearchEmailOptions{IsActivated: util.OptionalBoolFalse}
  100. emails, _, err = SearchEmails(opts)
  101. assert.NoError(t, err)
  102. assert.True(t, contains(func(s *SearchEmailResult) bool { return !s.IsActivated }))
  103. assert.False(t, contains(func(s *SearchEmailResult) bool { return s.IsActivated }))
  104. // Must find more than one page, but retrieve only one
  105. opts = &SearchEmailOptions{
  106. ListOptions: db.ListOptions{
  107. PageSize: 5,
  108. Page: 1,
  109. },
  110. }
  111. emails, count, err = SearchEmails(opts)
  112. assert.NoError(t, err)
  113. assert.Len(t, emails, 5)
  114. assert.Greater(t, count, int64(len(emails)))
  115. }