From 5a9a70380d695a019e25a518e0482a4d27fad6fa Mon Sep 17 00:00:00 2001 From: Mohammed Abdoon Date: Sat, 11 Oct 2025 02:27:56 +0100 Subject: [PATCH 1/2] made the password validator function, all validations finished and tested --- Sprint-3/3-stretch/password-validator.js | 68 ++++++++++++++++++- Sprint-3/3-stretch/password-validator.test.js | 42 +++++++++++- 2 files changed, 107 insertions(+), 3 deletions(-) diff --git a/Sprint-3/3-stretch/password-validator.js b/Sprint-3/3-stretch/password-validator.js index b55d527db..55bcf06ec 100644 --- a/Sprint-3/3-stretch/password-validator.js +++ b/Sprint-3/3-stretch/password-validator.js @@ -1,6 +1,70 @@ function passwordValidator(password) { - return password.length < 5 ? false : true + let index = 0; + let characters = "abcdefghijklmnopqrstuvwxyz"; + let checker = false; + if (password.length < 5) { + return false; + } + while (index <= password.length) { + if (characters.toUpperCase().includes(password[index])) { + checker = true; + } + index++; + } + if(checker == false) + return false; + + checker = false; + index = 0; + while (index <= password.length) { + if (characters.includes(password[index])) { + checker = true; + } + index++; + } + if(checker == false) + return false; + + checker = false; + index = 0; + while (index <= password.length) { + if ("0123456789".includes(password[index])) { + checker = true; + } + index++; + } + if(checker == false) + return false; + + checker = false; + index = 0; + while (index <= password.length) { + if ("!#$%.*&".includes(password[index])) { + checker = true; + } + index++; + } + if(checker == false) + return false; + + index = 0; + while (index <= passwordsArray.length) { + if (passwordsArray[index] === password) { + return false; + } + index++; + } + + return checker; } +const passwordsArray = []; +passwordsArray.push("123HowAreYou?"); +passwordsArray.push("ahmed@pass1"); +passwordsArray.push("123JohnIsHere#"); +passwordsArray.push("This_is_my_password?"); +passwordsArray.push("!!I_Am_Sam_Movie!!1"); + +module.exports = passwordValidator; -module.exports = passwordValidator; \ No newline at end of file +//console.log(passwordValidator("setrwcrat!ahmddAed@pass1")); \ No newline at end of file diff --git a/Sprint-3/3-stretch/password-validator.test.js b/Sprint-3/3-stretch/password-validator.test.js index 8fa3089d6..e51772df7 100644 --- a/Sprint-3/3-stretch/password-validator.test.js +++ b/Sprint-3/3-stretch/password-validator.test.js @@ -17,10 +17,50 @@ You must breakdown this problem in order to solve it. Find one test case first a const isValidPassword = require("./password-validator"); test("password has at least 5 characters", () => { // Arrange - const password = "12345"; + const password = "1!Hel"; // Act const result = isValidPassword(password); // Assert expect(result).toEqual(true); } +); + +test("Have at least one English uppercase letter (A-Z)", () => { + // Arrange + const password = "1!HelloWorld_A"; + // Act + const result = isValidPassword(password); + // Assert + expect(result).toEqual(true); +} +); + +test("Have at least one English lowercase letter (a-z)", () => { + // Arrange + const password = "1!HelloWorld_a"; + // Act + const result = isValidPassword(password); + // Assert + expect(result).toEqual(true); +} +); + +test("Have at least one number (0-9)", () => { + // Arrange + const password = "1!HelloWorld_1"; + // Act + const result = isValidPassword(password); + // Assert + expect(result).toEqual(true); +} +); + +test(`Have at least one of the following non-alphanumeric symbols: ("!", "#", "$", "%", ".", "*", "&")`, () => { + // Arrange + const password = "!!I_Am_Sam_Movie!!1"; + // Act + const result = isValidPassword(password); + // Assert + expect(result).toEqual(false); +} ); \ No newline at end of file From 36813433f22dd7ffdbfd4f7fc67714ebbcf63dcc Mon Sep 17 00:00:00 2001 From: Mohammed Abdoon Date: Sat, 11 Oct 2025 12:11:32 +0100 Subject: [PATCH 2/2] Completed the credit card validator --- Sprint-3/3-stretch/credit-card-validator.js | 40 +++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Sprint-3/3-stretch/credit-card-validator.js diff --git a/Sprint-3/3-stretch/credit-card-validator.js b/Sprint-3/3-stretch/credit-card-validator.js new file mode 100644 index 000000000..09e693ad6 --- /dev/null +++ b/Sprint-3/3-stretch/credit-card-validator.js @@ -0,0 +1,40 @@ +function validateCreditCard(cardNumber) +{ + let sum = 0; + let allSame = ""; + cardNumber = String(cardNumber); + + if(cardNumber.length != 16) + return false; + + if((cardNumber.slice(-1) % 2) != 0) + return false; + + for (let i = 0; i < cardNumber.length; i++) { + sum += Number(cardNumber[i]); + if( cardNumber[i] < "0" || cardNumber[i] > "9" ) { + return false; + } + } + + for (let i = 0; i < cardNumber.length; i++) { + if("0123456789".includes(cardNumber[i]) && !String(allSame).includes(cardNumber[i])) { + allSame += cardNumber[i]; + } + } + if(allSame.length < 2) { + return false; + } + + if(sum < 16) + return false; + + return true; +} + +console.log(validateCreditCard("9999777788880000")); // true +console.log(validateCreditCard("6666666666661666")); // true +console.log(validateCreditCard("a92332119c011112")); // false +console.log(validateCreditCard("4444444444444444")); // false +console.log(validateCreditCard("1111111111111110")); // false +console.log(validateCreditCard("6666666666666661")); // false