Skip to content

Commit e5d9799

Browse files
committed
Implement isValidPassword function to check valid passwords and added full test suite. All tests are passing
1 parent ff981a5 commit e5d9799

2 files changed

Lines changed: 145 additions & 10 deletions

File tree

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
11
export function isValidPassword(password) {
2-
return password.length >= 5;
3-
}
2+
let result = true;
3+
result &&= password.length >= 5;
4+
result &&= /[A-Z]/.test(password);
5+
result &&= /[a-z]/.test(password);
6+
result &&= /[0-9]/.test(password);
7+
result &&= /[!#$%.*&]/.test(password);
8+
if (result === true){
9+
if (!validPasswords.includes(password)) {
10+
validPasswords.push(password);
11+
}
12+
else {
13+
result &&= false;
14+
}
15+
}
16+
return result
17+
};
18+
const validPasswords = [];

‎sprint-3-stretch-exercises/password-validator.test.js‎

Lines changed: 128 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,132 @@ To be valid, a password must:
1515
You must breakdown this problem in order to solve it. Find one test case first and get that working
1616
*/
1717
import { isValidPassword } from "./password-validator.js";
18-
test("password has at least 5 characters", () => {
19-
// Arrange
20-
const password = "12345";
21-
// Act
18+
19+
20+
describe("Valid password checks", () => {
21+
test("password has at least 5 characters", () => {
22+
const password = "Hello!42";
2223
const result = isValidPassword(password);
23-
// Assert
24-
expect(result).toEqual(true);
25-
}
26-
);
24+
expect(result).toEqual(true)
25+
});
26+
27+
test("password has at least one English uppercase letter (A-Z)", () => {
28+
const password = "FrankOceanluvr26*";
29+
const result = isValidPassword(password);
30+
expect(result).toEqual(true);
31+
});
32+
33+
test("password has at least one English lowercase letter (a-z)", () => {
34+
const password = "jaegerMeister#29";
35+
const result = isValidPassword(password);
36+
expect(result).toEqual(true);
37+
});
38+
39+
test("password has at least one number (0-9)", () => {
40+
const password = "1738!Aye";
41+
const result = isValidPassword(password);
42+
expect(result).toEqual(true);
43+
});
44+
45+
test("password has at least one of the following non-alphanumeric symbols: ('!', '#', '$', '%', '.', '*', '&')", () => {
46+
const password = "Sleepy&Eepy26";
47+
const result = isValidPassword(password);
48+
expect(result).toEqual(true);
49+
});
50+
51+
test("password must not be any previous password in the passwords array", () => {
52+
const password = "One1Two2Three!!!";
53+
let result = isValidPassword(password);
54+
result = isValidPassword(password);
55+
expect(result).toEqual(false);
56+
});//
57+
});
58+
59+
describe("Invalid password: Less than 5 characters", () => {
60+
test("Invalid password: 1234", () => {
61+
const password = 1234;
62+
const result = isValidPassword(password);
63+
expect(result).toEqual(false);
64+
});
65+
66+
test("Invalid password: hey", () => {
67+
const password = "hey";
68+
const result = isValidPassword(password);
69+
expect(result).toEqual(false);
70+
});
71+
72+
test("Invalid password: !!!", () => {
73+
const password = "!!!";
74+
const result = isValidPassword(password);
75+
expect(result).toEqual(false);
76+
});
77+
});
78+
79+
80+
describe("Invalid password: Does not have an uppercase English letter (A-Z)", () => {
81+
test("Invalid password: aaaaa", () => {
82+
const password = "aaaaa";
83+
const result = isValidPassword(password);
84+
expect(result).toEqual(false);
85+
});
86+
test("Invalid password: qwerty", () => {
87+
const password = "qwerty";
88+
const result = isValidPassword(password);
89+
expect(result).toEqual(false);
90+
});
91+
92+
test("Invalid password: 12345", () => {
93+
const password = "12345";
94+
const result = isValidPassword(password);
95+
expect(result).toEqual(false);
96+
});
97+
});
98+
99+
100+
describe("Invalid password: Does not have a lowercase English letter (a-z)", () => {
101+
test("Invalid password: AAAAA", () => {
102+
const password = "AAAAA";
103+
const result = isValidPassword(password);
104+
expect(result).toEqual(false);
105+
});
106+
107+
test("Invalid password: QWERTY", () => {
108+
const password = "QWERTY";
109+
const result = isValidPassword(password);
110+
expect(result).toEqual(false);
111+
});
112+
113+
test("Invalid password: 12345", () => {
114+
const password = "12345";
115+
const result = isValidPassword(password);
116+
expect(result).toEqual(false);
117+
});
118+
});
119+
120+
121+
describe("Invalid password: Does not have a number (0-9", () => {
122+
test("Invalid password: Hello", () => {
123+
const password = "Hello";
124+
const result = isValidPassword(password);
125+
expect(result).toEqual(false);
126+
})
127+
});
128+
129+
130+
describe("Invalid password: Does not have at least one of the following non-alphanumeric symbols: ('!', '#', '$', '%', '.', '*', '&')", () => {
131+
test("Invalid password: Hello1", () => {
132+
const password = "Hello1";
133+
const result = isValidPassword(password);
134+
expect(result).toEqual(false);
135+
});
136+
});
137+
138+
describe("Invalid password: Matches a previous password in the array", () => {
139+
test("Invalid password: Hello1!", () => {
140+
const password = "Hello1!";
141+
let result = isValidPassword(password);
142+
result = isValidPassword(password);
143+
expect(result).toEqual(false);
144+
});
145+
});
146+

0 commit comments

Comments
 (0)