github.com/crspeller/mattermost-server@v0.0.0-20190328001957-a200beb3d111/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/crspeller/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  }