Skip to content

Commit 3672528

Browse files
Complete sprint-3-stretch
1 parent 793cbac commit 3672528

File tree

3 files changed

+100
-11
lines changed

3 files changed

+100
-11
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
function creditCardValidator(cardNum) {
2+
// Splits the cardNum into an array of characters
3+
const cardNumArray = cardNum.split("");
4+
5+
// Checks if length is 16, otherwise return false
6+
if (cardNumArray.length !== 16) return false;
7+
8+
// checks if all digits are numbers
9+
if (
10+
!cardNumArray.every(
11+
(num) => num.charCodeAt(0) >= 48 && num.charCodeAt(0) <= 57
12+
)
13+
)
14+
return false;
15+
16+
// Checks if there are at least two different digits
17+
const count = cardNumArray.reduce((acc, curr) => {
18+
acc[curr] = acc[curr] ? acc[curr] + 1 : 1;
19+
return acc;
20+
}, {});
21+
if (Object.keys(count).length < 2) return false;
22+
23+
// Checks if the sum of all digits is greater than 16
24+
const sumOfDigits = cardNumArray.reduce((acc, curr) => acc + Number(curr), 0);
25+
if (sumOfDigits <= 16) return false;
26+
27+
//checks if last digit is even
28+
if (cardNumArray[cardNumArray.length - 1] % 2 !== 0) return false;
29+
return true;
30+
}
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1+
const previousPasswords = ["5B43n21"];
12
function passwordValidator(password) {
2-
return password.length < 5 ? false : true
3-
}
3+
if (password.length < 5) return false;
4+
if (previousPasswords.includes(password)) return false;
5+
previousPasswords.push(password);
6+
7+
const rules = [/[A-Z]/, /[a-z]/, /[0-9]/, /[!#$%.*&]/];
48

9+
return rules.every((rule) => rule.test(password));
10+
}
511

6-
module.exports = passwordValidator;
12+
module.exports = passwordValidator;

Sprint-3/4-stretch/password-validator.test.js

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,64 @@ You must breakdown this problem in order to solve it. Find one test case first a
1616
*/
1717
const isValidPassword = require("./password-validator");
1818
test("password has at least 5 characters", () => {
19-
// Arrange
20-
const password = "12345";
21-
// Act
22-
const result = isValidPassword(password);
23-
// Assert
24-
expect(result).toEqual(true);
25-
}
26-
);
19+
// Arrange
20+
const password = "A1b2";
21+
// Act
22+
const result = isValidPassword(password);
23+
// Assert
24+
expect(result).toEqual(false);
25+
});
26+
27+
test("password is not previously used", () => {
28+
// Arrange
29+
const password = "5B43n21";
30+
// Act
31+
const result = isValidPassword(password);
32+
// Assert
33+
expect(result).toEqual(false);
34+
});
35+
36+
test("password contains at least one uppercase English letter", () => {
37+
// Arrange
38+
const password = "1a2345";
39+
// Act
40+
const result = isValidPassword(password);
41+
// Assert
42+
expect(result).toEqual(false);
43+
});
44+
45+
test("password contains at least one uppercase English letter", () => {
46+
// Arrange
47+
const password = "1B2345";
48+
// Act
49+
const result = isValidPassword(password);
50+
// Assert
51+
expect(result).toEqual(false);
52+
});
53+
54+
test("password contains at least one number(0-9)", () => {
55+
// Arrange
56+
const password = "sdkerjJNGk";
57+
// Act
58+
const result = isValidPassword(password);
59+
// Assert
60+
expect(result).toEqual(false);
61+
});
62+
63+
test('password contains at least one of "!", "#", "$", "%", ".", "*", "&"', () => {
64+
// Arrange
65+
const password = "sdkerjJNG23k";
66+
// Act
67+
const result = isValidPassword(password);
68+
// Assert
69+
expect(result).toEqual(false);
70+
});
71+
72+
test("password meets all the condition for a valid password and passwordValidator returns true", () => {
73+
// Arrange
74+
const password = "sdkerjJNG23k&";
75+
// Act
76+
const result = isValidPassword(password);
77+
// Assert
78+
expect(result).toEqual(true);
79+
});

0 commit comments

Comments
 (0)