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