
이제 남은 것은 한 가지 조건만 충족하거나 모든 조건을 충족하지 않는 경우이다. 이 중에서 먼저 길이가 8글자 이상인 조건만 충족하는 경우를 진행해보자. 이 경우 암호 강도는 약함이다.
[리스트 2.22] 길이가 8글자 이상인 조건만 충족하는 경우를 검증하기 위한 테스트 코드
const PasswordStrengthMeter = require("./PasswordStrengthMeter");
const PasswordStrength = require("./PasswordStrength");
describe("PasswordStrengthMeterTest", () => {
// ...생략
test("길이가 8글자 이상인 조건만 충족하면 암호 강도는 약함", () => {
assertStrength("abdefghi", PasswordStrength.WEAK);
});
});
PasswordStrength 열거 타입에 WEAK 값을 추가하자.
const PasswordStrength = {
INVALID: "INVALID",
STRONG: "STRONG",
NORMAL: "NORMAL",
WEAK: "WEAK",
};
Object.freeze(PasswordStrength);
module.exports = PasswordStrength;
const PasswordStrength = require("./PasswordStrength");
class PasswordStrengthMeter {
meter(s) {
if (s === null || s === "") return PasswordStrength.INVALID;
const lengthEnough = s.length >= 8; // 수정 부분
if (!lengthEnough) return PasswordStrength.NORMAL; // 수정 부분
const containsNum = this.#meetsContainingNumberCreiteria(s);
if (!containsNum) return PasswordStrength.NORMAL;
const containsUpp = this.#meetsContainingUppercaseCreiteria(s);
if (!containsUpp) return PasswordStrength.NORMAL;
return PasswordStrength.STRONG;
}
// ...생략
}
module.exports = PasswordStrengthMeter;
const PasswordStrength = require("./PasswordStrength");
class PasswordStrengthMeter {
meter(s) {
if (s === null || s === "") return PasswordStrength.INVALID;
const lengthEnough = s.length >= 8;
const containsNum = this.#meetsContainingNumberCreiteria(s);
const containsUpp = this.#meetsContainingUppercaseCreiteria(s);
// if 절을 아래로 이동
if (!lengthEnough) return PasswordStrength.NORMAL;
if (!containsNum) return PasswordStrength.NORMAL;
if (!containsUpp) return PasswordStrength.NORMAL;
return PasswordStrength.STRONG;
}
// ...생략
}
module.exports = PasswordStrengthMeter;
if절 위치를 이동한 이유는 다음 두 로직을 구분해서 모으기 위함이다
[리스트 2.23] 길이가 8 이상인 조건만 충족하는 경우를 통과시키기 위한 코드 추가
const PasswordStrength = require("./PasswordStrength");
class PasswordStrengthMeter {
meter(s) {
if (s === null || s === "") return PasswordStrength.INVALID;
const lengthEnough = s.length >= 8;
const containsNum = this.#meetsContainingNumberCreiteria(s);
const containsUpp = this.#meetsContainingUppercaseCreiteria(s);
if (lengthEnough && !containsNum && !containsUpp)
return PasswordStrength.WEAK; // 추가 부분
if (!lengthEnough) return PasswordStrength.NORMAL;
if (!containsNum) return PasswordStrength.NORMAL;
if (!containsUpp) return PasswordStrength.NORMAL;
return PasswordStrength.STRONG;
}
// ...생략
}
module.exports = PasswordStrengthMeter;
이 글은 아래 책을 토대로 작성된 글입니다.
최범균, ⌜테스트 주도 개발 시작하기⌟, 가메, 2020책의 예제는 자바로 작성되어 있어 자바스크립트로 작성된 코드를 보여주는 것이 이 글의 목적이기 때문에 많은 설명들이 빠져 있습니다.
💡 책과 함께 코드를 보는 것을 추천드립니다.