github.com/xzl8028/xenia-server@v0.0.0-20190809101854-18450a97da63/utils/password_test.go (about) 1 package utils 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 9 "github.com/xzl8028/xenia-server/model" 10 ) 11 12 func TestIsPasswordValidWithSettings(t *testing.T) { 13 for name, tc := range map[string]struct { 14 Password string 15 Settings *model.PasswordSettings 16 ExpectedError string 17 }{ 18 "Short": { 19 Password: strings.Repeat("x", 3), 20 Settings: &model.PasswordSettings{ 21 MinimumLength: model.NewInt(3), 22 Lowercase: model.NewBool(false), 23 Uppercase: model.NewBool(false), 24 Number: model.NewBool(false), 25 Symbol: model.NewBool(false), 26 }, 27 }, 28 "Long": { 29 Password: strings.Repeat("x", model.PASSWORD_MAXIMUM_LENGTH), 30 Settings: &model.PasswordSettings{ 31 Lowercase: model.NewBool(false), 32 Uppercase: model.NewBool(false), 33 Number: model.NewBool(false), 34 Symbol: model.NewBool(false), 35 }, 36 }, 37 "TooShort": { 38 Password: strings.Repeat("x", 2), 39 Settings: &model.PasswordSettings{ 40 MinimumLength: model.NewInt(3), 41 Lowercase: model.NewBool(false), 42 Uppercase: model.NewBool(false), 43 Number: model.NewBool(false), 44 Symbol: model.NewBool(false), 45 }, 46 ExpectedError: "model.user.is_valid.pwd.app_error", 47 }, 48 "TooLong": { 49 Password: strings.Repeat("x", model.PASSWORD_MAXIMUM_LENGTH+1), 50 Settings: &model.PasswordSettings{ 51 Lowercase: model.NewBool(false), 52 Uppercase: model.NewBool(false), 53 Number: model.NewBool(false), 54 Symbol: model.NewBool(false), 55 }, 56 ExpectedError: "model.user.is_valid.pwd.app_error", 57 }, 58 "MissingLower": { 59 Password: "AAAAAAAAAAASD123!@#", 60 Settings: &model.PasswordSettings{ 61 Lowercase: model.NewBool(true), 62 Uppercase: model.NewBool(false), 63 Number: model.NewBool(false), 64 Symbol: model.NewBool(false), 65 }, 66 ExpectedError: "model.user.is_valid.pwd_lowercase.app_error", 67 }, 68 "MissingUpper": { 69 Password: "aaaaaaaaaaaaasd123!@#", 70 Settings: &model.PasswordSettings{ 71 Uppercase: model.NewBool(true), 72 Lowercase: model.NewBool(false), 73 Number: model.NewBool(false), 74 Symbol: model.NewBool(false), 75 }, 76 ExpectedError: "model.user.is_valid.pwd_uppercase.app_error", 77 }, 78 "MissingNumber": { 79 Password: "asasdasdsadASD!@#", 80 Settings: &model.PasswordSettings{ 81 Number: model.NewBool(true), 82 Lowercase: model.NewBool(false), 83 Uppercase: model.NewBool(false), 84 Symbol: model.NewBool(false), 85 }, 86 ExpectedError: "model.user.is_valid.pwd_number.app_error", 87 }, 88 "MissingSymbol": { 89 Password: "asdasdasdasdasdASD123", 90 Settings: &model.PasswordSettings{ 91 Symbol: model.NewBool(true), 92 Lowercase: model.NewBool(false), 93 Uppercase: model.NewBool(false), 94 Number: model.NewBool(false), 95 }, 96 ExpectedError: "model.user.is_valid.pwd_symbol.app_error", 97 }, 98 "MissingMultiple": { 99 Password: "asdasdasdasdasdasd", 100 Settings: &model.PasswordSettings{ 101 Lowercase: model.NewBool(true), 102 Uppercase: model.NewBool(true), 103 Number: model.NewBool(true), 104 Symbol: model.NewBool(true), 105 }, 106 ExpectedError: "model.user.is_valid.pwd_lowercase_uppercase_number_symbol.app_error", 107 }, 108 "Everything": { 109 Password: "asdASD!@#123", 110 Settings: &model.PasswordSettings{ 111 Lowercase: model.NewBool(true), 112 Uppercase: model.NewBool(true), 113 Number: model.NewBool(true), 114 Symbol: model.NewBool(true), 115 }, 116 }, 117 } { 118 tc.Settings.SetDefaults() 119 t.Run(name, func(t *testing.T) { 120 if err := IsPasswordValidWithSettings(tc.Password, tc.Settings); tc.ExpectedError == "" { 121 assert.Nil(t, err) 122 } else { 123 assert.Equal(t, tc.ExpectedError, err.Id) 124 } 125 }) 126 } 127 }