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  }