@@ -39,6 +39,10 @@ describe('core/auth/password_policy_impl', () => {
39
39
const TEST_ALLOWED_NON_ALPHANUMERIC_CHARS = [ '!' , '(' , ')' , '@' ] ;
40
40
const TEST_ALLOWED_NON_ALPHANUMERIC_STRING =
41
41
TEST_ALLOWED_NON_ALPHANUMERIC_CHARS . join ( '' ) ;
42
+ const TEST_ENFORCEMENT_STATE_ENFORCE = 'ENFORCE' ;
43
+ const TEST_ENFORCEMENT_STATE_OFF = 'OFF' ;
44
+ const TEST_REQUIRE_ALL_FORCE_UPGRADE_ON_SIGN_IN = true ;
45
+ const TEST_REQUIRE_LENGTH_FORCE_UPGRADE_ON_SIGN_IN = false ;
42
46
const TEST_SCHEMA_VERSION = 1 ;
43
47
const PASSWORD_POLICY_RESPONSE_REQUIRE_ALL : GetPasswordPolicyResponse = {
44
48
customStrengthOptions : {
@@ -50,6 +54,8 @@ describe('core/auth/password_policy_impl', () => {
50
54
containsNonAlphanumericCharacter : TEST_CONTAINS_NON_ALPHANUMERIC
51
55
} ,
52
56
allowedNonAlphanumericCharacters : TEST_ALLOWED_NON_ALPHANUMERIC_CHARS ,
57
+ enforcementState : TEST_ENFORCEMENT_STATE_ENFORCE ,
58
+ forceUpgradeOnSignin : TEST_REQUIRE_ALL_FORCE_UPGRADE_ON_SIGN_IN ,
53
59
schemaVersion : TEST_SCHEMA_VERSION
54
60
} ;
55
61
const PASSWORD_POLICY_RESPONSE_REQUIRE_LENGTH : GetPasswordPolicyResponse = {
@@ -58,6 +64,8 @@ describe('core/auth/password_policy_impl', () => {
58
64
maxPasswordLength : TEST_MAX_PASSWORD_LENGTH
59
65
} ,
60
66
allowedNonAlphanumericCharacters : TEST_ALLOWED_NON_ALPHANUMERIC_CHARS ,
67
+ enforcementState : TEST_ENFORCEMENT_STATE_OFF ,
68
+ forceUpgradeOnSignin : TEST_REQUIRE_LENGTH_FORCE_UPGRADE_ON_SIGN_IN ,
61
69
schemaVersion : TEST_SCHEMA_VERSION
62
70
} ;
63
71
const PASSWORD_POLICY_RESPONSE_REQUIRE_NUMERIC : GetPasswordPolicyResponse = {
@@ -67,8 +75,19 @@ describe('core/auth/password_policy_impl', () => {
67
75
containsNumericCharacter : TEST_CONTAINS_NUMERIC
68
76
} ,
69
77
allowedNonAlphanumericCharacters : TEST_ALLOWED_NON_ALPHANUMERIC_CHARS ,
78
+ enforcementState : TEST_ENFORCEMENT_STATE_ENFORCE ,
70
79
schemaVersion : TEST_SCHEMA_VERSION
71
80
} ;
81
+ const PASSWORD_POLICY_RESPONSE_UNSPECIFIED_ENFORCEMENT_STATE : GetPasswordPolicyResponse =
82
+ {
83
+ customStrengthOptions : {
84
+ minPasswordLength : TEST_MIN_PASSWORD_LENGTH ,
85
+ maxPasswordLength : TEST_MAX_PASSWORD_LENGTH
86
+ } ,
87
+ allowedNonAlphanumericCharacters : TEST_ALLOWED_NON_ALPHANUMERIC_CHARS ,
88
+ enforcementState : 'ENFORCEMENT_STATE_UNSPECIFIED' ,
89
+ schemaVersion : TEST_SCHEMA_VERSION
90
+ } ;
72
91
const PASSWORD_POLICY_REQUIRE_ALL : PasswordPolicy = {
73
92
customStrengthOptions : {
74
93
minPasswordLength : TEST_MIN_PASSWORD_LENGTH ,
@@ -78,14 +97,18 @@ describe('core/auth/password_policy_impl', () => {
78
97
containsNumericCharacter : TEST_CONTAINS_NUMERIC ,
79
98
containsNonAlphanumericCharacter : TEST_CONTAINS_UPPERCASE
80
99
} ,
81
- allowedNonAlphanumericCharacters : TEST_ALLOWED_NON_ALPHANUMERIC_STRING
100
+ allowedNonAlphanumericCharacters : TEST_ALLOWED_NON_ALPHANUMERIC_STRING ,
101
+ enforcementState : TEST_ENFORCEMENT_STATE_ENFORCE ,
102
+ forceUpgradeOnSignin : TEST_REQUIRE_ALL_FORCE_UPGRADE_ON_SIGN_IN
82
103
} ;
83
104
const PASSWORD_POLICY_REQUIRE_LENGTH : PasswordPolicy = {
84
105
customStrengthOptions : {
85
106
minPasswordLength : TEST_MIN_PASSWORD_LENGTH ,
86
107
maxPasswordLength : TEST_MAX_PASSWORD_LENGTH
87
108
} ,
88
- allowedNonAlphanumericCharacters : TEST_ALLOWED_NON_ALPHANUMERIC_STRING
109
+ allowedNonAlphanumericCharacters : TEST_ALLOWED_NON_ALPHANUMERIC_STRING ,
110
+ enforcementState : TEST_ENFORCEMENT_STATE_OFF ,
111
+ forceUpgradeOnSignin : TEST_REQUIRE_LENGTH_FORCE_UPGRADE_ON_SIGN_IN
89
112
} ;
90
113
const TEST_EMPTY_PASSWORD = '' ;
91
114
@@ -100,6 +123,9 @@ describe('core/auth/password_policy_impl', () => {
100
123
expect ( policy . allowedNonAlphanumericCharacters ) . to . eql (
101
124
PASSWORD_POLICY_REQUIRE_ALL . allowedNonAlphanumericCharacters
102
125
) ;
126
+ expect ( policy . enforcementState ) . to . eql (
127
+ PASSWORD_POLICY_REQUIRE_ALL . enforcementState
128
+ ) ;
103
129
expect ( policy . schemaVersion ) . to . eql (
104
130
PASSWORD_POLICY_RESPONSE_REQUIRE_ALL . schemaVersion
105
131
) ;
@@ -115,6 +141,9 @@ describe('core/auth/password_policy_impl', () => {
115
141
expect ( policy . allowedNonAlphanumericCharacters ) . to . eql (
116
142
PASSWORD_POLICY_REQUIRE_LENGTH . allowedNonAlphanumericCharacters
117
143
) ;
144
+ expect ( policy . enforcementState ) . to . eql (
145
+ PASSWORD_POLICY_REQUIRE_LENGTH . enforcementState
146
+ ) ;
118
147
expect ( policy . schemaVersion ) . to . eql (
119
148
PASSWORD_POLICY_RESPONSE_REQUIRE_LENGTH . schemaVersion
120
149
) ;
@@ -129,6 +158,20 @@ describe('core/auth/password_policy_impl', () => {
129
158
. be . undefined ;
130
159
} ) ;
131
160
161
+ it ( "assigns 'OFF' as the enforcement state when it is unspecified" , ( ) => {
162
+ const policy : PasswordPolicyInternal = new PasswordPolicyImpl (
163
+ PASSWORD_POLICY_RESPONSE_UNSPECIFIED_ENFORCEMENT_STATE
164
+ ) ;
165
+ expect ( policy . enforcementState ) . to . eql ( TEST_ENFORCEMENT_STATE_OFF ) ;
166
+ } ) ;
167
+
168
+ it ( 'assigns false to forceUpgradeOnSignin when it is undefined in the response' , ( ) => {
169
+ const policy : PasswordPolicyInternal = new PasswordPolicyImpl (
170
+ PASSWORD_POLICY_RESPONSE_REQUIRE_NUMERIC
171
+ ) ;
172
+ expect ( policy . forceUpgradeOnSignin ) . to . be . false ;
173
+ } ) ;
174
+
132
175
context ( '#validatePassword' , ( ) => {
133
176
const PASSWORD_POLICY_IMPL_REQUIRE_ALL = new PasswordPolicyImpl (
134
177
PASSWORD_POLICY_RESPONSE_REQUIRE_ALL
@@ -339,6 +382,20 @@ describe('core/auth/password_policy_impl', () => {
339
382
expect ( status . containsUppercaseLetter ) . to . be . undefined ;
340
383
expect ( status . containsNonAlphanumericCharacter ) . to . be . undefined ;
341
384
} ) ;
385
+
386
+ it ( "should consider a password invalid if it does not meet all requirements even if the enforcement state is 'OFF'" , async ( ) => {
387
+ const policy = PASSWORD_POLICY_IMPL_REQUIRE_NUMERIC ;
388
+ const expectedValidationStatus : PasswordValidationStatus = {
389
+ isValid : false ,
390
+ meetsMinPasswordLength : false ,
391
+ meetsMaxPasswordLength : true ,
392
+ containsNumericCharacter : true ,
393
+ passwordPolicy : policy
394
+ } ;
395
+
396
+ const status = policy . validatePassword ( 'p4ss' ) ;
397
+ expect ( status ) . to . eql ( expectedValidationStatus ) ;
398
+ } ) ;
342
399
} ) ;
343
400
} ) ;
344
401
} ) ;
0 commit comments