github.com/fretkak/mattermost-mattermost-server@v5.11.1+incompatible/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/mattermost/mattermost-server/model" 10 ) 11 12 func TestIsPasswordValid(t *testing.T) { 13 for name, tc := range map[string]struct { 14 Password string 15 ExpectedError string 16 }{ 17 "Short": { 18 Password: strings.Repeat("x", model.PASSWORD_MINIMUM_LENGTH), 19 }, 20 "Long": { 21 Password: strings.Repeat("x", model.PASSWORD_MAXIMUM_LENGTH), 22 }, 23 "TooShort": { 24 Password: strings.Repeat("x", model.PASSWORD_MINIMUM_LENGTH-1), 25 ExpectedError: "model.user.is_valid.pwd.app_error", 26 }, 27 "TooLong": { 28 Password: strings.Repeat("x", model.PASSWORD_MAXIMUM_LENGTH+1), 29 ExpectedError: "model.user.is_valid.pwd.app_error", 30 }, 31 } { 32 t.Run(name, func(t *testing.T) { 33 if err := IsPasswordValid(tc.Password); tc.ExpectedError == "" { 34 assert.Nil(t, err) 35 } else { 36 assert.Equal(t, tc.ExpectedError, err.Id) 37 } 38 }) 39 } 40 } 41 42 func TestIsPasswordValidWithSettings(t *testing.T) { 43 for name, tc := range map[string]struct { 44 Password string 45 Settings *model.PasswordSettings 46 ExpectedError string 47 }{ 48 "Short": { 49 Password: strings.Repeat("x", 3), 50 Settings: &model.PasswordSettings{ 51 MinimumLength: model.NewInt(3), 52 }, 53 }, 54 "Long": { 55 Password: strings.Repeat("x", model.PASSWORD_MAXIMUM_LENGTH), 56 Settings: &model.PasswordSettings{}, 57 }, 58 "TooShort": { 59 Password: strings.Repeat("x", 2), 60 Settings: &model.PasswordSettings{ 61 MinimumLength: model.NewInt(3), 62 }, 63 ExpectedError: "model.user.is_valid.pwd.app_error", 64 }, 65 "TooLong": { 66 Password: strings.Repeat("x", model.PASSWORD_MAXIMUM_LENGTH+1), 67 Settings: &model.PasswordSettings{}, 68 ExpectedError: "model.user.is_valid.pwd.app_error", 69 }, 70 "MissingLower": { 71 Password: "ASD123!@#", 72 Settings: &model.PasswordSettings{ 73 Lowercase: model.NewBool(true), 74 }, 75 ExpectedError: "model.user.is_valid.pwd_lowercase.app_error", 76 }, 77 "MissingUpper": { 78 Password: "asd123!@#", 79 Settings: &model.PasswordSettings{ 80 Uppercase: model.NewBool(true), 81 }, 82 ExpectedError: "model.user.is_valid.pwd_uppercase.app_error", 83 }, 84 "MissingNumber": { 85 Password: "asdASD!@#", 86 Settings: &model.PasswordSettings{ 87 Number: model.NewBool(true), 88 }, 89 ExpectedError: "model.user.is_valid.pwd_number.app_error", 90 }, 91 "MissingSymbol": { 92 Password: "asdASD123", 93 Settings: &model.PasswordSettings{ 94 Symbol: model.NewBool(true), 95 }, 96 ExpectedError: "model.user.is_valid.pwd_symbol.app_error", 97 }, 98 "MissingMultiple": { 99 Password: "asd", 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 }