userutil_test.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. // Copyright 2022 The Gogs 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.gogs file.
  4. package userutil
  5. import (
  6. "os"
  7. "runtime"
  8. "testing"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/stretchr/testify/require"
  11. "gogs.io/gogs/internal/conf"
  12. "gogs.io/gogs/internal/osutil"
  13. "gogs.io/gogs/public"
  14. )
  15. func TestDashboardURLPath(t *testing.T) {
  16. t.Run("user", func(t *testing.T) {
  17. got := DashboardURLPath("alice", false)
  18. want := "/"
  19. assert.Equal(t, want, got)
  20. })
  21. t.Run("organization", func(t *testing.T) {
  22. got := DashboardURLPath("acme", true)
  23. want := "/org/acme/dashboard/"
  24. assert.Equal(t, want, got)
  25. })
  26. }
  27. func TestCustomAvatarPath(t *testing.T) {
  28. if runtime.GOOS == "windows" {
  29. t.Skip("Skipping testing on Windows")
  30. return
  31. }
  32. conf.SetMockPicture(t,
  33. conf.PictureOpts{
  34. AvatarUploadPath: "data/avatars",
  35. },
  36. )
  37. got := CustomAvatarPath(1)
  38. want := "data/avatars/1"
  39. assert.Equal(t, want, got)
  40. }
  41. func TestGenerateRandomAvatar(t *testing.T) {
  42. if runtime.GOOS == "windows" {
  43. t.Skip("Skipping testing on Windows")
  44. return
  45. }
  46. conf.SetMockPicture(t,
  47. conf.PictureOpts{
  48. AvatarUploadPath: os.TempDir(),
  49. },
  50. )
  51. avatarPath := CustomAvatarPath(1)
  52. defer func() { _ = os.Remove(avatarPath) }()
  53. err := GenerateRandomAvatar(1, "alice", "alice@example.com")
  54. require.NoError(t, err)
  55. got := osutil.IsFile(avatarPath)
  56. assert.True(t, got)
  57. }
  58. func TestSaveAvatar(t *testing.T) {
  59. if runtime.GOOS == "windows" {
  60. t.Skip("Skipping testing on Windows")
  61. return
  62. }
  63. conf.SetMockPicture(t,
  64. conf.PictureOpts{
  65. AvatarUploadPath: os.TempDir(),
  66. },
  67. )
  68. avatar, err := public.Files.ReadFile("img/avatar_default.png")
  69. require.NoError(t, err)
  70. avatarPath := CustomAvatarPath(1)
  71. defer func() { _ = os.Remove(avatarPath) }()
  72. err = SaveAvatar(1, avatar)
  73. require.NoError(t, err)
  74. got := osutil.IsFile(avatarPath)
  75. assert.True(t, got)
  76. }
  77. func TestEncodePassword(t *testing.T) {
  78. want := EncodePassword("123456", "rands")
  79. tests := []struct {
  80. name string
  81. password string
  82. rands string
  83. wantEqual bool
  84. }{
  85. {
  86. name: "correct",
  87. password: "123456",
  88. rands: "rands",
  89. wantEqual: true,
  90. },
  91. {
  92. name: "wrong password",
  93. password: "111333",
  94. rands: "rands",
  95. wantEqual: false,
  96. },
  97. {
  98. name: "wrong salt",
  99. password: "111333",
  100. rands: "salt",
  101. wantEqual: false,
  102. },
  103. }
  104. for _, test := range tests {
  105. t.Run(test.name, func(t *testing.T) {
  106. got := EncodePassword(test.password, test.rands)
  107. if test.wantEqual {
  108. assert.Equal(t, want, got)
  109. } else {
  110. assert.NotEqual(t, want, got)
  111. }
  112. })
  113. }
  114. }
  115. func TestValidatePassword(t *testing.T) {
  116. want := EncodePassword("123456", "rands")
  117. tests := []struct {
  118. name string
  119. password string
  120. rands string
  121. wantEqual bool
  122. }{
  123. {
  124. name: "correct",
  125. password: "123456",
  126. rands: "rands",
  127. wantEqual: true,
  128. },
  129. {
  130. name: "wrong password",
  131. password: "111333",
  132. rands: "rands",
  133. wantEqual: false,
  134. },
  135. {
  136. name: "wrong salt",
  137. password: "111333",
  138. rands: "salt",
  139. wantEqual: false,
  140. },
  141. }
  142. for _, test := range tests {
  143. t.Run(test.name, func(t *testing.T) {
  144. got := ValidatePassword(want, test.rands, test.password)
  145. assert.Equal(t, test.wantEqual, got)
  146. })
  147. }
  148. }
  149. func TestMailResendCacheKey(t *testing.T) {
  150. got := MailResendCacheKey(1)
  151. assert.Equal(t, "mailResend::1", got)
  152. }
  153. func TestTwoFactorCacheKey(t *testing.T) {
  154. got := TwoFactorCacheKey(1, "113654")
  155. assert.Equal(t, "twoFactor::1::113654", got)
  156. }
  157. func TestRandomSalt(t *testing.T) {
  158. salt1, err := RandomSalt()
  159. require.NoError(t, err)
  160. salt2, err := RandomSalt()
  161. require.NoError(t, err)
  162. assert.NotEqual(t, salt1, salt2)
  163. }