Skip to content
Closed
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
ad58383
wrote password validation tests to check if the password includes num…
alexandru-pocovnicu Feb 9, 2026
8bc912e
implemented password validation function
alexandru-pocovnicu Feb 9, 2026
88e7a16
Add card validator implementation and tests from sprint-3-implement-a…
alexandru-pocovnicu Feb 10, 2026
244ef86
tested for card number length
alexandru-pocovnicu Feb 10, 2026
5658bec
Refactor card validation tests for accuracy and completeness
alexandru-pocovnicu Feb 10, 2026
04e0b3f
Implement card number validation logic
alexandru-pocovnicu Feb 10, 2026
3c7e3ca
Refactor card number validation function for improved readability
alexandru-pocovnicu Feb 10, 2026
e045c33
changed variable declaration method
alexandru-pocovnicu Feb 18, 2026
2fbf4b6
updated tests descriptions for better understanding
alexandru-pocovnicu Feb 18, 2026
9462c1f
refactored for improved performance
alexandru-pocovnicu Feb 18, 2026
f78f11b
updated tests description
alexandru-pocovnicu Feb 18, 2026
74c180e
updated test for password length
alexandru-pocovnicu Feb 18, 2026
ea25ca5
added test to reject previously used passwords
alexandru-pocovnicu Feb 18, 2026
55f0ccc
enhanced passwordValidator to check against previously used passwords
alexandru-pocovnicu Feb 18, 2026
2be0512
updated tests descriptions
alexandru-pocovnicu Feb 19, 2026
3e9b0ba
updated tests descriptions
alexandru-pocovnicu Feb 19, 2026
f266cbe
updated tests to check if the password was used before or not
alexandru-pocovnicu Feb 19, 2026
6e5099c
updated tests descriptons
alexandru-pocovnicu Feb 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions Sprint-3/4-stretch/card-validator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
function validateNumber(number) {
const arrNumber = [...number.toString()];

return arrNumber.length === 16 &&
arrNumber.every((x) => x >= "0" && x <= "9") &&
new Set(arrNumber).size > 1 &&
arrNumber[arrNumber.length - 1] % 2 === 0 &&
arrNumber.reduce((acc, cur) => +acc + +cur, 0) > 16
? true
: false;
}

module.exports = validateNumber;
50 changes: 50 additions & 0 deletions Sprint-3/4-stretch/card-validator.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
const validateNumber = require("./card-validator")
const isValidNumber=require("./card-validator")


test("should return true if the number is 16 digits long",()=>{
expect(validateNumber(1029384756820562)).toEqual(true)
})
test("should return false if the number is less than 16 digits", () => {
expect(validateNumber(10293847568202)).toEqual(false);
});
test("should return false if the number is more than 16 digits long", () => {
expect(validateNumber(1029384756820512348)).toEqual(false);
});



test("should return true if all digits are numbers",()=>{
expect(validateNumber(1036294650361848)).toEqual(true)
})
test("should return false if one or more of the digits aren't numbers", () => {
expect(validateNumber("103629465036184a")).toEqual(false);
});



test("should return true if at least one of the digits isn't the same as the others",()=>{
expect(validateNumber(3636363636363636)).toEqual(true)
})
test("should return true if at least one of the digits isn't the same as the others", () => {
expect(validateNumber(3333333333333336)).toEqual(true);
});
test("should return false if at least one of the digits isn't different from all the others", () => {
expect(validateNumber(2222222222222222)).toEqual(false);
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: Ask an AI tool how these test descriptions can be made more concise.

No change needed. 3



test("should return true if the final digit is even",()=>{
expect(validateNumber(1528056378293456)).toEqual(true)
})
test("should return false if the final digit isn't even", () => {
expect(validateNumber(1528056378293457)).toEqual(false);
});


test("should return true if the sum of all digits is greater than 16",()=>{
expect(validateNumber(1903647295628592)).toEqual(true)
})
test("should return false if the sum of all the digits isn't greater than 16", () => {
expect(validateNumber(1000100000000002)).toEqual(false);
});
18 changes: 14 additions & 4 deletions Sprint-3/4-stretch/password-validator.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
function passwordValidator(password) {
return password.length < 5 ? false : true
}
function passwordValidator(password,oldPasswords=[]) {
if (
/[A-Z]/.test(password) &&
/[a-z]/.test(password) &&
/[0-9]/.test(password) &&
/[!#$%.*&]/.test(password) &&
password.length >= 5 &&
!oldPasswords.includes(password)
)
return true;


return false;
}

module.exports = passwordValidator;
module.exports = passwordValidator;
66 changes: 58 additions & 8 deletions Sprint-3/4-stretch/password-validator.test.js
Comment thread
cjyuan marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,67 @@ To be valid, a password must:
- Have at least one English lowercase letter (a-z)
- Have at least one number (0-9)
- Have at least one of the following non-alphanumeric symbols: ("!", "#", "$", "%", ".", "*", "&")
- Must not be any previous password in the passwords array.
- Must not be any previous password in the passwords array.

You must breakdown this problem in order to solve it. Find one test case first and get that working
*/
const isValidPassword = require("./password-validator");
test("password has at least 5 characters", () => {
// Arrange
const password = "12345";
// Act

describe("Valid passwords", () => {
test("should return true for a valid password with all rules met", () => {
const password = "12345Dpw%";
const result = isValidPassword(password);
// Assert
expect(result).toEqual(true);
}
);
});

test("should return true for another valid password", () => {
const password = "Abc123!";
const result = isValidPassword(password);
expect(result).toEqual(true);
});

test("should return true for a valid password with different special symbol", () => {
const password = "MyPass#1";
const result = isValidPassword(password);
expect(result).toEqual(true);
});
});

describe("Invalid passwords - each breaks one rule", () => {
test("should reject password with less than 5 characters", () => {
const password = "1aS!";
const result = isValidPassword(password);
expect(result).toEqual(false);
});

test("should reject password without an uppercase letter", () => {
const password = "abcde1!";
const result = isValidPassword(password);
expect(result).toEqual(false);
});

test("should reject password without a lowercase letter", () => {
const password = "ABCDE1!";
const result = isValidPassword(password);
expect(result).toEqual(false);
});

test("should reject password without a number", () => {
const password = "abcdeFg!";
const result = isValidPassword(password);
expect(result).toEqual(false);
});

test("should reject password without a special symbol", () => {
const password = "abcde1FG";
const result = isValidPassword(password);
expect(result).toEqual(false);
});

test("should reject password if it was used before", () => {
const password = "12345Dpw%";
const oldPasswords = ["12345Dpw%"];
const result = isValidPassword(password, oldPasswords);
expect(result).toEqual(false);
});
});