devtoolz-library 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/baseFactory.d.ts +12 -0
- package/dist/baseFactory.js +33 -0
- package/dist/constants/regexPatterns.d.ts +2 -0
- package/dist/constants/regexPatterns.js +9 -0
- package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.d.ts +4 -0
- package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.factory.d.ts +4 -0
- package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.factory.js +2 -0
- package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.js +2 -0
- package/dist/converters/numeric-systems/numericSystem.converter.d.ts +5 -0
- package/dist/converters/numeric-systems/numericSystem.converter.factory.d.ts +8 -0
- package/dist/converters/numeric-systems/numericSystem.converter.factory.js +17 -0
- package/dist/converters/numeric-systems/numericSystem.converter.js +17 -0
- package/dist/converters/numeric-systems/provider.d.ts +2 -0
- package/dist/converters/numeric-systems/provider.js +11 -0
- package/dist/converters/numeric-systems/services/binary/binary.converter.d.ts +5 -0
- package/dist/converters/numeric-systems/services/binary/binary.converter.js +16 -0
- package/dist/converters/numeric-systems/services/binary/binary.converter.test.d.ts +1 -0
- package/dist/converters/numeric-systems/services/binary/binary.converter.test.js +252 -0
- package/dist/converters/numeric-systems/services/decimal/decimal.converter.d.ts +5 -0
- package/dist/converters/numeric-systems/services/decimal/decimal.converter.js +16 -0
- package/dist/converters/numeric-systems/services/decimal/decimal.converter.test.d.ts +1 -0
- package/dist/converters/numeric-systems/services/decimal/decimal.converter.test.js +199 -0
- package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.d.ts +5 -0
- package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.js +18 -0
- package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.test.d.ts +1 -0
- package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.test.js +130 -0
- package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.d.ts +5 -0
- package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.js +15 -0
- package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.test.d.ts +1 -0
- package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.test.js +151 -0
- package/dist/converters/numeric-systems/services/roman/roman.converter.d.ts +7 -0
- package/dist/converters/numeric-systems/services/roman/roman.converter.js +77 -0
- package/dist/converters/numeric-systems/services/roman/roman.converter.test.d.ts +1 -0
- package/dist/converters/numeric-systems/services/roman/roman.converter.test.js +105 -0
- package/dist/converters/serialization/interfaces/ISerialization.converter.d.ts +5 -0
- package/dist/converters/serialization/interfaces/ISerialization.converter.factory.d.ts +4 -0
- package/dist/converters/serialization/interfaces/ISerialization.converter.factory.js +2 -0
- package/dist/converters/serialization/interfaces/ISerialization.converter.js +2 -0
- package/dist/converters/serialization/interfaces/ISerializationOptions.d.ts +4 -0
- package/dist/converters/serialization/interfaces/ISerializationOptions.js +2 -0
- package/dist/converters/serialization/provider.d.ts +2 -0
- package/dist/converters/serialization/provider.js +7 -0
- package/dist/converters/serialization/serialization.converter.d.ts +6 -0
- package/dist/converters/serialization/serialization.converter.factory.d.ts +9 -0
- package/dist/converters/serialization/serialization.converter.factory.js +20 -0
- package/dist/converters/serialization/serialization.converter.js +17 -0
- package/dist/converters/serialization/services/csv/csv.converter.d.ts +6 -0
- package/dist/converters/serialization/services/csv/csv.converter.js +68 -0
- package/dist/converters/serialization/services/csv/csv.converter.test.d.ts +1 -0
- package/dist/converters/serialization/services/csv/csv.converter.test.js +295 -0
- package/dist/converters/serialization/services/json/json.converter.d.ts +5 -0
- package/dist/converters/serialization/services/json/json.converter.js +12 -0
- package/dist/converters/text-format/inteface/ITextFormatConverter.converter.d.ts +4 -0
- package/dist/converters/text-format/inteface/ITextFormatConverter.converter.factory.d.ts +4 -0
- package/dist/converters/text-format/inteface/ITextFormatConverter.converter.factory.js +2 -0
- package/dist/converters/text-format/inteface/ITextFormatConverter.converter.js +2 -0
- package/dist/converters/text-format/provider.d.ts +2 -0
- package/dist/converters/text-format/provider.js +8 -0
- package/dist/converters/text-format/services/binary/binary-format.converter.d.ts +5 -0
- package/dist/converters/text-format/services/binary/binary-format.converter.js +40 -0
- package/dist/converters/text-format/services/binary/binary-format.converter.test.d.ts +1 -0
- package/dist/converters/text-format/services/binary/binary-format.converter.test.js +174 -0
- package/dist/converters/text-format/services/morse/morse-format.converter.d.ts +6 -0
- package/dist/converters/text-format/services/morse/morse-format.converter.js +85 -0
- package/dist/converters/text-format/services/morse/morse-format.converter.test.d.ts +1 -0
- package/dist/converters/text-format/services/morse/morse-format.converter.test.js +518 -0
- package/dist/converters/text-format/services/text/text-format.converter.d.ts +5 -0
- package/dist/converters/text-format/services/text/text-format.converter.js +12 -0
- package/dist/converters/text-format/textFormatConverter.converter.d.ts +5 -0
- package/dist/converters/text-format/textFormatConverter.converter.factory.d.ts +8 -0
- package/dist/converters/text-format/textFormatConverter.converter.factory.js +17 -0
- package/dist/converters/text-format/textFormatConverter.converter.js +17 -0
- package/dist/converters/unit-converter/converter-base.d.ts +19 -0
- package/dist/converters/unit-converter/converter-base.js +56 -0
- package/dist/converters/unit-converter/interfaces/IUnitConverter.d.ts +9 -0
- package/dist/converters/unit-converter/interfaces/IUnitConverter.js +2 -0
- package/dist/converters/unit-converter/interfaces/IUnitConverterFactory.d.ts +4 -0
- package/dist/converters/unit-converter/interfaces/IUnitConverterFactory.js +2 -0
- package/dist/converters/unit-converter/models/unit.d.ts +7 -0
- package/dist/converters/unit-converter/models/unit.js +2 -0
- package/dist/converters/unit-converter/provider.d.ts +2 -0
- package/dist/converters/unit-converter/provider.js +16 -0
- package/dist/converters/unit-converter/services/angle/angle.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/angle/angle.converter.js +15 -0
- package/dist/converters/unit-converter/services/angle/angle.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/angle/angle.converter.test.js +112 -0
- package/dist/converters/unit-converter/services/area/area.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/area/area.converter.js +24 -0
- package/dist/converters/unit-converter/services/area/area.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/area/area.converter.test.js +439 -0
- package/dist/converters/unit-converter/services/data/data.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/data/data.converter.js +30 -0
- package/dist/converters/unit-converter/services/data/data.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/data/data.converter.test.js +209 -0
- package/dist/converters/unit-converter/services/energy/energy.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/energy/energy.converter.js +20 -0
- package/dist/converters/unit-converter/services/energy/energy.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/energy/energy.converter.test.js +154 -0
- package/dist/converters/unit-converter/services/length/length.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/length/length.converter.js +31 -0
- package/dist/converters/unit-converter/services/length/length.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/length/length.converter.test.js +186 -0
- package/dist/converters/unit-converter/services/power/power.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/power/power.converter.js +17 -0
- package/dist/converters/unit-converter/services/power/power.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/power/power.converter.test.js +223 -0
- package/dist/converters/unit-converter/services/pressure/pressure.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/pressure/pressure.converter.js +18 -0
- package/dist/converters/unit-converter/services/pressure/pressure.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/pressure/pressure.converter.test.js +107 -0
- package/dist/converters/unit-converter/services/speed/speed.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/speed/speed.converter.js +22 -0
- package/dist/converters/unit-converter/services/speed/speed.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/speed/speed.converter.test.js +257 -0
- package/dist/converters/unit-converter/services/temperature/temperature.converter.d.ts +7 -0
- package/dist/converters/unit-converter/services/temperature/temperature.converter.js +46 -0
- package/dist/converters/unit-converter/services/temperature/temperature.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/temperature/temperature.converter.test.js +279 -0
- package/dist/converters/unit-converter/services/time/time.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/time/time.converter.js +26 -0
- package/dist/converters/unit-converter/services/volume/volume.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/volume/volume.converter.js +39 -0
- package/dist/converters/unit-converter/services/volume/volume.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/volume/volume.converter.test.js +295 -0
- package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.js +29 -0
- package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.test.js +218 -0
- package/dist/converters/unit-converter/unit.converter.factory.d.ts +9 -0
- package/dist/converters/unit-converter/unit.converter.factory.js +20 -0
- package/dist/crypt.d.ts +0 -0
- package/dist/crypt.js +77 -0
- package/dist/documents/cnpj/cnpj.d.ts +14 -0
- package/dist/documents/cnpj/cnpj.formatter.d.ts +5 -0
- package/dist/documents/cnpj/cnpj.formatter.js +12 -0
- package/dist/documents/cnpj/cnpj.generator.d.ts +9 -0
- package/dist/documents/cnpj/cnpj.generator.js +43 -0
- package/dist/documents/cnpj/cnpj.js +47 -0
- package/dist/documents/cnpj/cnpj.validator.d.ts +11 -0
- package/dist/documents/cnpj/cnpj.validator.js +49 -0
- package/dist/documents/cnpj/tests/cnpj.formatter.test.d.ts +1 -0
- package/dist/documents/cnpj/tests/cnpj.formatter.test.js +62 -0
- package/dist/documents/cnpj/tests/cnpj.generator.test.d.ts +1 -0
- package/dist/documents/cnpj/tests/cnpj.generator.test.js +51 -0
- package/dist/documents/cnpj/tests/cnpj.test.d.ts +1 -0
- package/dist/documents/cnpj/tests/cnpj.test.js +162 -0
- package/dist/documents/cnpj/tests/cnpj.validator.test.d.ts +1 -0
- package/dist/documents/cnpj/tests/cnpj.validator.test.js +104 -0
- package/dist/documents/cpf/cpf.d.ts +14 -0
- package/dist/documents/cpf/cpf.formatter.d.ts +5 -0
- package/dist/documents/cpf/cpf.formatter.js +12 -0
- package/dist/documents/cpf/cpf.generator.d.ts +9 -0
- package/dist/documents/cpf/cpf.generator.js +40 -0
- package/dist/documents/cpf/cpf.js +50 -0
- package/dist/documents/cpf/cpf.validator.d.ts +11 -0
- package/dist/documents/cpf/cpf.validator.js +46 -0
- package/dist/documents/cpf/tests/cpf.formatter.test.d.ts +1 -0
- package/dist/documents/cpf/tests/cpf.formatter.test.js +71 -0
- package/dist/documents/cpf/tests/cpf.generator.test.d.ts +1 -0
- package/dist/documents/cpf/tests/cpf.generator.test.js +71 -0
- package/dist/documents/cpf/tests/cpf.test.d.ts +1 -0
- package/dist/documents/cpf/tests/cpf.test.js +151 -0
- package/dist/documents/cpf/tests/cpf.validator.test.d.ts +1 -0
- package/dist/documents/cpf/tests/cpf.validator.test.js +113 -0
- package/dist/documents/interfaces/formatter.interface.d.ts +4 -0
- package/dist/documents/interfaces/formatter.interface.js +2 -0
- package/dist/documents/interfaces/generator.interface.d.ts +3 -0
- package/dist/documents/interfaces/generator.interface.js +2 -0
- package/dist/documents/interfaces/validator.interface.d.ts +4 -0
- package/dist/documents/interfaces/validator.interface.js +2 -0
- package/dist/documents/models/validation-result.model.d.ts +4 -0
- package/dist/documents/models/validation-result.model.js +2 -0
- package/dist/enums/cryptProvider.d.ts +6 -0
- package/dist/enums/cryptProvider.js +10 -0
- package/dist/extensions/array.extensions.d.ts +6 -0
- package/dist/extensions/array.extensions.js +7 -0
- package/dist/extensions/boolean.extensions.d.ts +6 -0
- package/dist/extensions/boolean.extensions.js +5 -0
- package/dist/extensions/number.extensions.d.ts +11 -0
- package/dist/extensions/number.extensions.js +24 -0
- package/dist/extensions/string.extensions.d.ts +13 -0
- package/dist/extensions/string.extensions.js +28 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +39 -0
- package/dist/interfaces/IFactory.d.ts +3 -0
- package/dist/interfaces/IFactory.js +2 -0
- package/dist/interfaces/IServiceCategory.d.ts +3 -0
- package/dist/interfaces/IServiceCategory.js +2 -0
- package/dist/interfaces/validator.d.ts +5 -0
- package/dist/interfaces/validator.js +2 -0
- package/dist/interfaces/value.d.ts +3 -0
- package/dist/interfaces/value.js +2 -0
- package/dist/interfaces/valueGenerator.d.ts +4 -0
- package/dist/interfaces/valueGenerator.js +2 -0
- package/dist/random.d.ts +12 -0
- package/dist/random.js +29 -0
- package/package.json +25 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const cnpj_validator_1 = require("../cnpj.validator");
|
|
4
|
+
describe("CnpjValidator", () => {
|
|
5
|
+
let validator;
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
validator = new cnpj_validator_1.CnpjValidator();
|
|
8
|
+
});
|
|
9
|
+
// -------------------------------------------------------------------------
|
|
10
|
+
// Casos inválidos — estrutura
|
|
11
|
+
// -------------------------------------------------------------------------
|
|
12
|
+
describe("Dado um CNPJ vazio", () => {
|
|
13
|
+
it("deve retornar inválido ao receber string vazia", () => {
|
|
14
|
+
const result = validator.validate("");
|
|
15
|
+
expect(result.isValid).toBe(false);
|
|
16
|
+
expect(result.message).toBe("CNPJ está vazio.");
|
|
17
|
+
});
|
|
18
|
+
it("deve retornar inválido ao receber apenas espaços", () => {
|
|
19
|
+
const result = validator.validate(" ");
|
|
20
|
+
expect(result.isValid).toBe(false);
|
|
21
|
+
expect(result.message).toBe("CNPJ está vazio.");
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
describe("Dado um CNPJ com formato inválido", () => {
|
|
25
|
+
it("deve retornar inválido para letras", () => {
|
|
26
|
+
const result = validator.validate("ab.cde.fgh/ijkl-mn");
|
|
27
|
+
expect(result.isValid).toBe(false);
|
|
28
|
+
expect(result.message).toBe("CNPJ com formato inválido.");
|
|
29
|
+
});
|
|
30
|
+
it("deve retornar inválido para menos de 14 dígitos", () => {
|
|
31
|
+
const result = validator.validate("1234567");
|
|
32
|
+
expect(result.isValid).toBe(false);
|
|
33
|
+
expect(result.message).toBe("CNPJ com formato inválido.");
|
|
34
|
+
});
|
|
35
|
+
it("deve retornar inválido para mais de 14 dígitos", () => {
|
|
36
|
+
const result = validator.validate("112223330001810");
|
|
37
|
+
expect(result.isValid).toBe(false);
|
|
38
|
+
expect(result.message).toBe("CNPJ com formato inválido.");
|
|
39
|
+
});
|
|
40
|
+
it("deve retornar inválido para máscara incorreta", () => {
|
|
41
|
+
const result = validator.validate("11-222-333/0001.81");
|
|
42
|
+
expect(result.isValid).toBe(false);
|
|
43
|
+
expect(result.message).toBe("CNPJ com formato inválido.");
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe("Dado um CNPJ com todos os dígitos iguais", () => {
|
|
47
|
+
it.each([
|
|
48
|
+
"00.000.000/0000-00",
|
|
49
|
+
"11.111.111/1111-11",
|
|
50
|
+
"22.222.222/2222-22",
|
|
51
|
+
"33.333.333/3333-33",
|
|
52
|
+
"44.444.444/4444-44",
|
|
53
|
+
"55.555.555/5555-55",
|
|
54
|
+
"66.666.666/6666-66",
|
|
55
|
+
"77.777.777/7777-77",
|
|
56
|
+
"88.888.888/8888-88",
|
|
57
|
+
"99.999.999/9999-99",
|
|
58
|
+
])("deve rejeitar %s", (cnpj) => {
|
|
59
|
+
const result = validator.validate(cnpj);
|
|
60
|
+
expect(result.isValid).toBe(false);
|
|
61
|
+
expect(result.message).toBe("CNPJ não pode ter todos os dígitos iguais.");
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
// -------------------------------------------------------------------------
|
|
65
|
+
// Dígitos verificadores inválidos
|
|
66
|
+
// -------------------------------------------------------------------------
|
|
67
|
+
describe("Dado um CNPJ com dígitos verificadores inválidos", () => {
|
|
68
|
+
it("deve retornar inválido quando o primeiro dígito verificador está errado", () => {
|
|
69
|
+
const result = validator.validate("11.222.333/0001-91");
|
|
70
|
+
expect(result.isValid).toBe(false);
|
|
71
|
+
expect(result.message).toBe("Primeiro dígito verificador é inválido.");
|
|
72
|
+
});
|
|
73
|
+
it("deve retornar inválido quando o segundo dígito verificador está errado", () => {
|
|
74
|
+
const result = validator.validate("11.222.333/0001-80");
|
|
75
|
+
expect(result.isValid).toBe(false);
|
|
76
|
+
expect(result.message).toBe("Segundo dígito verificador é inválido.");
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
// -------------------------------------------------------------------------
|
|
80
|
+
// CNPJs válidos
|
|
81
|
+
// -------------------------------------------------------------------------
|
|
82
|
+
describe("Dado um CNPJ válido", () => {
|
|
83
|
+
it("deve aceitar CNPJ sem máscara", () => {
|
|
84
|
+
const result = validator.validate("11222333000181");
|
|
85
|
+
expect(result.isValid).toBe(true);
|
|
86
|
+
expect(result.message).toBe("Válido");
|
|
87
|
+
});
|
|
88
|
+
it("deve aceitar CNPJ com máscara", () => {
|
|
89
|
+
const result = validator.validate("11.222.333/0001-81");
|
|
90
|
+
expect(result.isValid).toBe(true);
|
|
91
|
+
expect(result.message).toBe("Válido");
|
|
92
|
+
});
|
|
93
|
+
it("deve aceitar múltiplos CNPJs válidos conhecidos", () => {
|
|
94
|
+
const validos = [
|
|
95
|
+
"11222333000181",
|
|
96
|
+
"11.222.333/0001-81",
|
|
97
|
+
];
|
|
98
|
+
validos.forEach(cnpj => {
|
|
99
|
+
const result = validator.validate(cnpj);
|
|
100
|
+
expect(result.isValid).toBe(true);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IValidationResult } from "../models/validation-result.model";
|
|
2
|
+
export declare class Cpf {
|
|
3
|
+
readonly baseDigits: string;
|
|
4
|
+
readonly regionDigit: string;
|
|
5
|
+
readonly firstVerifyDigit: string;
|
|
6
|
+
readonly secondVerifyDigit: string;
|
|
7
|
+
private constructor();
|
|
8
|
+
toString(): string;
|
|
9
|
+
toFormatted(): string;
|
|
10
|
+
static validate(value: string): IValidationResult;
|
|
11
|
+
static generate(formatted?: boolean): Cpf;
|
|
12
|
+
static parse(value: string): Cpf;
|
|
13
|
+
static tryParse(value: string): Cpf | null;
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CpfFormatter = void 0;
|
|
4
|
+
class CpfFormatter {
|
|
5
|
+
applyMask(cpf) {
|
|
6
|
+
return cpf.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/, "$1.$2.$3-$4");
|
|
7
|
+
}
|
|
8
|
+
removeMask(cpf) {
|
|
9
|
+
return cpf.replace(/[^\d]/g, "");
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.CpfFormatter = CpfFormatter;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import "../../extensions/string.extensions";
|
|
2
|
+
import { IGenerator } from "../interfaces/generator.interface";
|
|
3
|
+
export declare class CpfGenerator implements IGenerator {
|
|
4
|
+
private readonly _formatter;
|
|
5
|
+
private _isRepeatedDigits;
|
|
6
|
+
private _calcVerifyingDigit;
|
|
7
|
+
private _generateCalculatingDigits;
|
|
8
|
+
generate(formatted?: boolean): string;
|
|
9
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CpfGenerator = void 0;
|
|
4
|
+
const random_1 = require("../../random");
|
|
5
|
+
require("../../extensions/string.extensions");
|
|
6
|
+
const cpf_formatter_1 = require("./cpf.formatter");
|
|
7
|
+
class CpfGenerator {
|
|
8
|
+
constructor() {
|
|
9
|
+
this._formatter = new cpf_formatter_1.CpfFormatter();
|
|
10
|
+
}
|
|
11
|
+
_isRepeatedDigits(cpf) {
|
|
12
|
+
return /^(\d)\1{8}$/.test(cpf);
|
|
13
|
+
}
|
|
14
|
+
_calcVerifyingDigit(startCounter, digits) {
|
|
15
|
+
let result = 0;
|
|
16
|
+
digits.forEach(digit => {
|
|
17
|
+
result += digit.toNumber() * startCounter--;
|
|
18
|
+
});
|
|
19
|
+
const rest = result % 11;
|
|
20
|
+
return (rest < 2 ? 0 : 11 - rest).toString();
|
|
21
|
+
}
|
|
22
|
+
_generateCalculatingDigits() {
|
|
23
|
+
const random = new random_1.Random(0, 9, true);
|
|
24
|
+
let digits = "";
|
|
25
|
+
do {
|
|
26
|
+
digits = "";
|
|
27
|
+
for (let i = 0; i < 9; i++)
|
|
28
|
+
digits += random.generate(true).toString();
|
|
29
|
+
} while (this._isRepeatedDigits(digits));
|
|
30
|
+
return digits;
|
|
31
|
+
}
|
|
32
|
+
generate(formatted = false) {
|
|
33
|
+
const calculating = this._generateCalculatingDigits();
|
|
34
|
+
const first = this._calcVerifyingDigit(10, calculating);
|
|
35
|
+
const second = this._calcVerifyingDigit(11, calculating + first);
|
|
36
|
+
const cpf = calculating + first + second;
|
|
37
|
+
return formatted ? this._formatter.applyMask(cpf) : cpf;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.CpfGenerator = CpfGenerator;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Cpf = void 0;
|
|
4
|
+
const cpf_validator_1 = require("./cpf.validator");
|
|
5
|
+
const cpf_generator_1 = require("./cpf.generator");
|
|
6
|
+
const cpf_formatter_1 = require("./cpf.formatter");
|
|
7
|
+
class Cpf {
|
|
8
|
+
// private _value: string = EMPTY_STRING;
|
|
9
|
+
constructor(baseDigits, regionDigit, firstVerifyDigit, secondVerifyDigit) {
|
|
10
|
+
this.baseDigits = baseDigits;
|
|
11
|
+
this.regionDigit = regionDigit;
|
|
12
|
+
// this.estados = getEstadosPorDigito(Number(regionDigit));
|
|
13
|
+
this.firstVerifyDigit = firstVerifyDigit;
|
|
14
|
+
this.secondVerifyDigit = secondVerifyDigit;
|
|
15
|
+
Object.freeze(this);
|
|
16
|
+
}
|
|
17
|
+
toString() {
|
|
18
|
+
return this.baseDigits + this.regionDigit + this.firstVerifyDigit + this.secondVerifyDigit;
|
|
19
|
+
}
|
|
20
|
+
toFormatted() {
|
|
21
|
+
const raw = this.toString();
|
|
22
|
+
const formatter = new cpf_formatter_1.CpfFormatter();
|
|
23
|
+
return formatter.applyMask(this.toString());
|
|
24
|
+
}
|
|
25
|
+
static validate(value) {
|
|
26
|
+
const validator = new cpf_validator_1.CpfValidator();
|
|
27
|
+
return validator.validate(value ?? "");
|
|
28
|
+
}
|
|
29
|
+
static generate(formatted) {
|
|
30
|
+
const generator = new cpf_generator_1.CpfGenerator();
|
|
31
|
+
const generatedValue = generator.generate(formatted);
|
|
32
|
+
return this.parse(generatedValue);
|
|
33
|
+
}
|
|
34
|
+
static parse(value) {
|
|
35
|
+
const result = this.validate(value);
|
|
36
|
+
if (!result.isValid)
|
|
37
|
+
throw new Error(result.message);
|
|
38
|
+
const digits = value.replace(/[^\d]/g, "");
|
|
39
|
+
return new Cpf(digits.substring(0, 8), digits[8], digits[9], digits[10]);
|
|
40
|
+
}
|
|
41
|
+
static tryParse(value) {
|
|
42
|
+
try {
|
|
43
|
+
return Cpf.parse(value);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.Cpf = Cpf;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import "../../extensions/string.extensions";
|
|
2
|
+
import { IValidator } from "../interfaces/validator.interface";
|
|
3
|
+
import { IValidationResult } from "../models/validation-result.model";
|
|
4
|
+
export declare class CpfValidator implements IValidator {
|
|
5
|
+
private readonly _formatter;
|
|
6
|
+
private _isRepeatedDigits;
|
|
7
|
+
private _isFormatValid;
|
|
8
|
+
private _calcVerifyingDigit;
|
|
9
|
+
private _fail;
|
|
10
|
+
validate(value: string): IValidationResult;
|
|
11
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CpfValidator = void 0;
|
|
4
|
+
const regexPatterns_1 = require("../../constants/regexPatterns");
|
|
5
|
+
require("../../extensions/string.extensions");
|
|
6
|
+
const cpf_formatter_1 = require("./cpf.formatter");
|
|
7
|
+
class CpfValidator {
|
|
8
|
+
constructor() {
|
|
9
|
+
this._formatter = new cpf_formatter_1.CpfFormatter();
|
|
10
|
+
}
|
|
11
|
+
_isRepeatedDigits(cpf) {
|
|
12
|
+
return /^(\d)\1{10}$/.test(cpf);
|
|
13
|
+
}
|
|
14
|
+
_isFormatValid(cpf) {
|
|
15
|
+
return regexPatterns_1.cpfPattern.test(cpf);
|
|
16
|
+
}
|
|
17
|
+
_calcVerifyingDigit(startCounter, digits) {
|
|
18
|
+
let result = 0;
|
|
19
|
+
digits.forEach(digit => {
|
|
20
|
+
result += digit.toNumber() * startCounter--;
|
|
21
|
+
});
|
|
22
|
+
const rest = result % 11;
|
|
23
|
+
return (rest < 2 ? 0 : 11 - rest).toString();
|
|
24
|
+
}
|
|
25
|
+
_fail(message) {
|
|
26
|
+
return { isValid: false, message };
|
|
27
|
+
}
|
|
28
|
+
validate(value) {
|
|
29
|
+
if (!value || value.isEmpty())
|
|
30
|
+
return this._fail("CPF está vazio.");
|
|
31
|
+
if (!this._isFormatValid(value))
|
|
32
|
+
return this._fail("CPF com formato inválido.");
|
|
33
|
+
const cpf = this._formatter.removeMask(value);
|
|
34
|
+
if (this._isRepeatedDigits(cpf))
|
|
35
|
+
return this._fail("CPF não pode ter todos os dígitos iguais.");
|
|
36
|
+
const calculating = cpf.substring(0, 9);
|
|
37
|
+
const first = cpf[9];
|
|
38
|
+
const second = cpf[10];
|
|
39
|
+
if (this._calcVerifyingDigit(10, calculating) !== first)
|
|
40
|
+
return this._fail("Primeiro dígito verificador é inválido.");
|
|
41
|
+
if (this._calcVerifyingDigit(11, calculating + first) !== second)
|
|
42
|
+
return this._fail("Segundo dígito verificador é inválido.");
|
|
43
|
+
return { isValid: true, message: "Válido" };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.CpfValidator = CpfValidator;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// import { CpfFormatter } from "./cpf.formatter";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const cpf_formatter_1 = require("../cpf.formatter");
|
|
5
|
+
describe("CpfFormatter", () => {
|
|
6
|
+
let formatter;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
formatter = new cpf_formatter_1.CpfFormatter();
|
|
9
|
+
});
|
|
10
|
+
// -------------------------------------------------------------------------
|
|
11
|
+
// applyMask
|
|
12
|
+
// -------------------------------------------------------------------------
|
|
13
|
+
describe("applyMask", () => {
|
|
14
|
+
it("deve formatar CPF sem máscara para o padrão NNN.NNN.NNN-NN", () => {
|
|
15
|
+
expect(formatter.applyMask("52998224725")).toBe("529.982.247-25");
|
|
16
|
+
});
|
|
17
|
+
it("deve formatar CPF com dígito verificador zero", () => {
|
|
18
|
+
expect(formatter.applyMask("87129210740")).toBe("871.292.107-40");
|
|
19
|
+
});
|
|
20
|
+
it("deve formatar CPF iniciado com zero", () => {
|
|
21
|
+
expect(formatter.applyMask("01234567890")).toBe("012.345.678-90");
|
|
22
|
+
});
|
|
23
|
+
it("deve retornar string vazia ao receber string vazia", () => {
|
|
24
|
+
expect(formatter.applyMask("")).toBe("");
|
|
25
|
+
});
|
|
26
|
+
it("não deve alterar entrada com menos de 11 dígitos", () => {
|
|
27
|
+
expect(formatter.applyMask("1234567")).toBe("1234567");
|
|
28
|
+
});
|
|
29
|
+
it("não deve alterar entrada com mais de 11 dígitos", () => {
|
|
30
|
+
// A regex captura apenas os primeiros 11 dígitos — o excedente fica sem máscara
|
|
31
|
+
const result = formatter.applyMask("529982247250");
|
|
32
|
+
expect(result).toMatch(/^\d{3}\.\d{3}\.\d{3}-\d{2}/);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
// -------------------------------------------------------------------------
|
|
36
|
+
// removeMask
|
|
37
|
+
// -------------------------------------------------------------------------
|
|
38
|
+
describe("removeMask", () => {
|
|
39
|
+
it("deve remover pontos e traço do CPF formatado", () => {
|
|
40
|
+
expect(formatter.removeMask("529.982.247-25")).toBe("52998224725");
|
|
41
|
+
});
|
|
42
|
+
it("deve retornar o mesmo valor se não houver máscara", () => {
|
|
43
|
+
expect(formatter.removeMask("52998224725")).toBe("52998224725");
|
|
44
|
+
});
|
|
45
|
+
it("deve remover qualquer caractere não numérico", () => {
|
|
46
|
+
expect(formatter.removeMask("529 982 247 25")).toBe("52998224725");
|
|
47
|
+
});
|
|
48
|
+
it("deve retornar string vazia ao receber string vazia", () => {
|
|
49
|
+
expect(formatter.removeMask("")).toBe("");
|
|
50
|
+
});
|
|
51
|
+
it("deve retornar string vazia ao receber apenas caracteres não numéricos", () => {
|
|
52
|
+
expect(formatter.removeMask("...--")).toBe("");
|
|
53
|
+
});
|
|
54
|
+
it("deve preservar zeros à esquerda", () => {
|
|
55
|
+
expect(formatter.removeMask("012.345.678-90")).toBe("01234567890");
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
// -------------------------------------------------------------------------
|
|
59
|
+
// Simetria — applyMask ↔ removeMask
|
|
60
|
+
// -------------------------------------------------------------------------
|
|
61
|
+
describe("simetria entre applyMask e removeMask", () => {
|
|
62
|
+
it("removeMask(applyMask(raw)) deve retornar o valor original", () => {
|
|
63
|
+
const raw = "52998224725";
|
|
64
|
+
expect(formatter.removeMask(formatter.applyMask(raw))).toBe(raw);
|
|
65
|
+
});
|
|
66
|
+
it("applyMask(removeMask(formatted)) deve retornar o valor original", () => {
|
|
67
|
+
const formatted = "529.982.247-25";
|
|
68
|
+
expect(formatter.applyMask(formatter.removeMask(formatted))).toBe(formatted);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const cpf_generator_1 = require("../cpf.generator");
|
|
4
|
+
const cpf_validator_1 = require("../cpf.validator");
|
|
5
|
+
describe("CpfGenerator", () => {
|
|
6
|
+
let generator;
|
|
7
|
+
let validator;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
generator = new cpf_generator_1.CpfGenerator();
|
|
10
|
+
validator = new cpf_validator_1.CpfValidator();
|
|
11
|
+
});
|
|
12
|
+
// -------------------------------------------------------------------------
|
|
13
|
+
// generate — sem máscara
|
|
14
|
+
// -------------------------------------------------------------------------
|
|
15
|
+
describe("generate sem formatação", () => {
|
|
16
|
+
it("deve retornar uma string com 11 dígitos", () => {
|
|
17
|
+
const result = generator.generate();
|
|
18
|
+
expect(result).toHaveLength(11);
|
|
19
|
+
expect(result).toMatch(/^\d{11}$/);
|
|
20
|
+
});
|
|
21
|
+
it("deve gerar um CPF matematicamente válido", () => {
|
|
22
|
+
const result = generator.generate();
|
|
23
|
+
const validation = validator.validate(result);
|
|
24
|
+
expect(validation.isValid).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
it("não deve gerar CPF com todos os dígitos iguais", () => {
|
|
27
|
+
for (let i = 0; i < 20; i++) {
|
|
28
|
+
const result = generator.generate();
|
|
29
|
+
expect(result).not.toMatch(/^(\d)\1{10}$/);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
it("deve gerar CPFs diferentes entre chamadas", () => {
|
|
33
|
+
const results = new Set(Array.from({ length: 20 }, () => generator.generate()));
|
|
34
|
+
expect(results.size).toBeGreaterThan(1);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
// -------------------------------------------------------------------------
|
|
38
|
+
// generate — com máscara
|
|
39
|
+
// -------------------------------------------------------------------------
|
|
40
|
+
describe("generate com formatação", () => {
|
|
41
|
+
it("deve retornar CPF no formato NNN.NNN.NNN-NN", () => {
|
|
42
|
+
const result = generator.generate(true);
|
|
43
|
+
expect(result).toMatch(/^\d{3}\.\d{3}\.\d{3}-\d{2}$/);
|
|
44
|
+
});
|
|
45
|
+
it("deve gerar um CPF formatado matematicamente válido", () => {
|
|
46
|
+
const result = generator.generate(true);
|
|
47
|
+
const validation = validator.validate(result);
|
|
48
|
+
expect(validation.isValid).toBe(true);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
// -------------------------------------------------------------------------
|
|
52
|
+
// Consistência entre chamadas
|
|
53
|
+
// -------------------------------------------------------------------------
|
|
54
|
+
describe("consistência", () => {
|
|
55
|
+
it("deve gerar 50 CPFs válidos consecutivos", () => {
|
|
56
|
+
for (let i = 0; i < 50; i++) {
|
|
57
|
+
const cpf = generator.generate();
|
|
58
|
+
const result = validator.validate(cpf);
|
|
59
|
+
expect(result.isValid).toBe(true);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
it("CPF gerado sem máscara e com máscara devem representar o mesmo número", () => {
|
|
63
|
+
// Gera os dois e compara apenas os dígitos
|
|
64
|
+
const raw = generator.generate(false);
|
|
65
|
+
const formatted = generator.generate(true);
|
|
66
|
+
const formattedDigits = formatted.replace(/[^\d]/g, "");
|
|
67
|
+
expect(raw).toHaveLength(11);
|
|
68
|
+
expect(formattedDigits).toHaveLength(11);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const cpf_1 = require("../cpf");
|
|
4
|
+
describe("Cpf", () => {
|
|
5
|
+
// -------------------------------------------------------------------------
|
|
6
|
+
// parse
|
|
7
|
+
// -------------------------------------------------------------------------
|
|
8
|
+
describe("parse", () => {
|
|
9
|
+
it("deve criar um Cpf a partir de um valor formatado válido", () => {
|
|
10
|
+
const cpf = cpf_1.Cpf.parse("529.982.247-25");
|
|
11
|
+
expect(cpf).toBeInstanceOf(cpf_1.Cpf);
|
|
12
|
+
});
|
|
13
|
+
it("deve criar um Cpf a partir de um valor sem máscara válido", () => {
|
|
14
|
+
const cpf = cpf_1.Cpf.parse("52998224725");
|
|
15
|
+
expect(cpf).toBeInstanceOf(cpf_1.Cpf);
|
|
16
|
+
});
|
|
17
|
+
it("deve preencher baseDigits com os 8 primeiros dígitos", () => {
|
|
18
|
+
const cpf = cpf_1.Cpf.parse("529.982.247-25");
|
|
19
|
+
expect(cpf.baseDigits).toBe("52998224");
|
|
20
|
+
});
|
|
21
|
+
it("deve preencher regionDigit com o nono dígito", () => {
|
|
22
|
+
const cpf = cpf_1.Cpf.parse("529.982.247-25");
|
|
23
|
+
expect(cpf.regionDigit).toBe("7");
|
|
24
|
+
});
|
|
25
|
+
it("deve preencher firstVerifyDigit com o décimo dígito", () => {
|
|
26
|
+
const cpf = cpf_1.Cpf.parse("529.982.247-25");
|
|
27
|
+
expect(cpf.firstVerifyDigit).toBe("2");
|
|
28
|
+
});
|
|
29
|
+
it("deve preencher secondVerifyDigit com o décimo primeiro dígito", () => {
|
|
30
|
+
const cpf = cpf_1.Cpf.parse("529.982.247-25");
|
|
31
|
+
expect(cpf.secondVerifyDigit).toBe("5");
|
|
32
|
+
});
|
|
33
|
+
it("deve lançar erro ao receber CPF inválido", () => {
|
|
34
|
+
expect(() => cpf_1.Cpf.parse("000.000.000-00")).toThrow();
|
|
35
|
+
});
|
|
36
|
+
it("deve lançar erro ao receber string vazia", () => {
|
|
37
|
+
expect(() => cpf_1.Cpf.parse("")).toThrow("CPF está vazio.");
|
|
38
|
+
});
|
|
39
|
+
it("deve lançar erro ao receber formato inválido", () => {
|
|
40
|
+
expect(() => cpf_1.Cpf.parse("123")).toThrow("CPF com formato inválido.");
|
|
41
|
+
});
|
|
42
|
+
it("deve lançar erro com mensagem correta para dígito verificador errado", () => {
|
|
43
|
+
expect(() => cpf_1.Cpf.parse("529.982.247-99")).toThrow("Primeiro dígito verificador é inválido.");
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
// -------------------------------------------------------------------------
|
|
47
|
+
// tryParse
|
|
48
|
+
// -------------------------------------------------------------------------
|
|
49
|
+
describe("tryParse", () => {
|
|
50
|
+
it("deve retornar instância de Cpf para valor válido", () => {
|
|
51
|
+
const cpf = cpf_1.Cpf.tryParse("529.982.247-25");
|
|
52
|
+
expect(cpf).toBeInstanceOf(cpf_1.Cpf);
|
|
53
|
+
});
|
|
54
|
+
it("deve retornar null para CPF inválido", () => {
|
|
55
|
+
const cpf = cpf_1.Cpf.tryParse("000.000.000-00");
|
|
56
|
+
expect(cpf).toBeNull();
|
|
57
|
+
});
|
|
58
|
+
it("deve retornar null para string vazia", () => {
|
|
59
|
+
const cpf = cpf_1.Cpf.tryParse("");
|
|
60
|
+
expect(cpf).toBeNull();
|
|
61
|
+
});
|
|
62
|
+
it("deve retornar null para formato inválido", () => {
|
|
63
|
+
const cpf = cpf_1.Cpf.tryParse("abc");
|
|
64
|
+
expect(cpf).toBeNull();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
// -------------------------------------------------------------------------
|
|
68
|
+
// validate
|
|
69
|
+
// -------------------------------------------------------------------------
|
|
70
|
+
describe("validate", () => {
|
|
71
|
+
it("deve retornar isValid true para CPF válido", () => {
|
|
72
|
+
const result = cpf_1.Cpf.validate("529.982.247-25");
|
|
73
|
+
expect(result.isValid).toBe(true);
|
|
74
|
+
});
|
|
75
|
+
it("deve retornar isValid false para CPF inválido", () => {
|
|
76
|
+
const result = cpf_1.Cpf.validate("000.000.000-00");
|
|
77
|
+
expect(result.isValid).toBe(false);
|
|
78
|
+
});
|
|
79
|
+
it("deve retornar mensagem descritiva no resultado", () => {
|
|
80
|
+
const result = cpf_1.Cpf.validate("529.982.247-25");
|
|
81
|
+
expect(result.message).toBe("Válido");
|
|
82
|
+
});
|
|
83
|
+
it("deve retornar mensagem de erro para CPF vazio", () => {
|
|
84
|
+
const result = cpf_1.Cpf.validate("");
|
|
85
|
+
expect(result.message).toBe("CPF está vazio.");
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
// -------------------------------------------------------------------------
|
|
89
|
+
// generate
|
|
90
|
+
// -------------------------------------------------------------------------
|
|
91
|
+
describe("generate", () => {
|
|
92
|
+
it("deve retornar uma instância de Cpf", () => {
|
|
93
|
+
const cpf = cpf_1.Cpf.generate();
|
|
94
|
+
expect(cpf).toBeInstanceOf(cpf_1.Cpf);
|
|
95
|
+
});
|
|
96
|
+
it("deve gerar um CPF com baseDigits de 8 caracteres", () => {
|
|
97
|
+
const cpf = cpf_1.Cpf.generate();
|
|
98
|
+
expect(cpf.baseDigits).toHaveLength(8);
|
|
99
|
+
});
|
|
100
|
+
it("deve gerar um CPF com regionDigit de 1 caractere numérico", () => {
|
|
101
|
+
const cpf = cpf_1.Cpf.generate();
|
|
102
|
+
expect(cpf.regionDigit).toMatch(/^\d$/);
|
|
103
|
+
});
|
|
104
|
+
it("deve gerar um CPF com firstVerifyDigit de 1 caractere numérico", () => {
|
|
105
|
+
const cpf = cpf_1.Cpf.generate();
|
|
106
|
+
expect(cpf.firstVerifyDigit).toMatch(/^\d$/);
|
|
107
|
+
});
|
|
108
|
+
it("deve gerar um CPF com secondVerifyDigit de 1 caractere numérico", () => {
|
|
109
|
+
const cpf = cpf_1.Cpf.generate();
|
|
110
|
+
expect(cpf.secondVerifyDigit).toMatch(/^\d$/);
|
|
111
|
+
});
|
|
112
|
+
it("deve gerar CPF matematicamente válido", () => {
|
|
113
|
+
const cpf = cpf_1.Cpf.generate();
|
|
114
|
+
const result = cpf_1.Cpf.validate(cpf.toString());
|
|
115
|
+
expect(result.isValid).toBe(true);
|
|
116
|
+
});
|
|
117
|
+
it("deve gerar CPF formatado matematicamente válido ao passar formatted=true", () => {
|
|
118
|
+
const cpf = cpf_1.Cpf.generate(true);
|
|
119
|
+
const result = cpf_1.Cpf.validate(cpf.toString());
|
|
120
|
+
expect(result.isValid).toBe(true);
|
|
121
|
+
});
|
|
122
|
+
it("deve gerar CPFs diferentes entre chamadas", () => {
|
|
123
|
+
const results = new Set(Array.from({ length: 20 }, () => cpf_1.Cpf.generate().toString()));
|
|
124
|
+
expect(results.size).toBeGreaterThan(1);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
// -------------------------------------------------------------------------
|
|
128
|
+
// toString / toFormatted
|
|
129
|
+
// -------------------------------------------------------------------------
|
|
130
|
+
describe("toString", () => {
|
|
131
|
+
it("deve retornar 11 dígitos sem máscara", () => {
|
|
132
|
+
const cpf = cpf_1.Cpf.parse("529.982.247-25");
|
|
133
|
+
expect(cpf.toString()).toBe("52998224725");
|
|
134
|
+
});
|
|
135
|
+
it("deve retornar apenas dígitos", () => {
|
|
136
|
+
const cpf = cpf_1.Cpf.parse("529.982.247-25");
|
|
137
|
+
expect(cpf.toString()).toMatch(/^\d{11}$/);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe("toFormatted", () => {
|
|
141
|
+
it("deve retornar o CPF no formato NNN.NNN.NNN-NN", () => {
|
|
142
|
+
const cpf = cpf_1.Cpf.parse("52998224725");
|
|
143
|
+
expect(cpf.toFormatted()).toBe("529.982.247-25");
|
|
144
|
+
});
|
|
145
|
+
it("deve retornar o mesmo resultado independente de o input ter máscara", () => {
|
|
146
|
+
const semMascara = cpf_1.Cpf.parse("52998224725").toFormatted();
|
|
147
|
+
const comMascara = cpf_1.Cpf.parse("529.982.247-25").toFormatted();
|
|
148
|
+
expect(semMascara).toBe(comMascara);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|