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  }