validation-br 0.8.3 → 1.0.0-b

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.
Files changed (109) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc.js +76 -11
  3. package/.github/workflows/test.yml +39 -0
  4. package/.prettierignore +1 -0
  5. package/.prettierrc.js +7 -0
  6. package/dist/cnh.js +123 -0
  7. package/dist/cnh.js.map +1 -0
  8. package/dist/cnh.test.js +117 -0
  9. package/dist/cnh.test.js.map +1 -0
  10. package/dist/cnpj.js +112 -0
  11. package/dist/cnpj.js.map +1 -0
  12. package/dist/cnpj.test.js +141 -0
  13. package/dist/cnpj.test.js.map +1 -0
  14. package/dist/cpf.js +134 -0
  15. package/dist/cpf.js.map +1 -0
  16. package/dist/cpf.test.js +130 -0
  17. package/dist/cpf.test.js.map +1 -0
  18. package/dist/index.js +24 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/index.test.js +33 -0
  21. package/dist/index.test.js.map +1 -0
  22. package/dist/judicialProcess.js +153 -0
  23. package/dist/judicialProcess.js.map +1 -0
  24. package/dist/judicialProcess.test.js +123 -0
  25. package/dist/judicialProcess.test.js.map +1 -0
  26. package/dist/pisPasep.js +113 -0
  27. package/dist/pisPasep.js.map +1 -0
  28. package/dist/pisPasep.test.js +129 -0
  29. package/dist/pisPasep.test.js.map +1 -0
  30. package/dist/postalCode.js +150 -0
  31. package/dist/postalCode.js.map +1 -0
  32. package/dist/postalCode.test.js +135 -0
  33. package/dist/postalCode.test.js.map +1 -0
  34. package/dist/renavam.js +108 -0
  35. package/dist/renavam.js.map +1 -0
  36. package/dist/renavam.test.js +113 -0
  37. package/dist/renavam.test.js.map +1 -0
  38. package/dist/tituloEleitor.js +130 -0
  39. package/dist/tituloEleitor.js.map +1 -0
  40. package/dist/tituloEleitor.test.js +132 -0
  41. package/dist/tituloEleitor.test.js.map +1 -0
  42. package/dist/utils-applyMask.test.js +17 -0
  43. package/dist/utils-applyMask.test.js.map +1 -0
  44. package/dist/utils-clearValue.test.js +50 -0
  45. package/dist/utils-clearValue.test.js.map +1 -0
  46. package/dist/utils-fakeNumber.test.js +17 -0
  47. package/dist/utils-fakeNumber.test.js.map +1 -0
  48. package/dist/utils-insertAtPosition.test.js +16 -0
  49. package/dist/utils-insertAtPosition.test.js.map +1 -0
  50. package/dist/utils-invalidListGenerator.test.js +23 -0
  51. package/dist/utils-invalidListGenerator.test.js.map +1 -0
  52. package/dist/utils-removeFromPosition.test.js +16 -0
  53. package/dist/utils-removeFromPosition.test.js.map +1 -0
  54. package/dist/utils-sumElementsByMultipliers.test.js +32 -0
  55. package/dist/utils-sumElementsByMultipliers.test.js.map +1 -0
  56. package/dist/utils-sumToDV.test.js +16 -0
  57. package/dist/utils-sumToDV.test.js.map +1 -0
  58. package/dist/utils.js +167 -0
  59. package/dist/utils.js.map +1 -0
  60. package/jest.config.js +14 -0
  61. package/package.json +40 -48
  62. package/readme.md +243 -88
  63. package/src/cnh.test.ts +114 -0
  64. package/src/cnh.ts +140 -0
  65. package/src/cnpj.test.ts +136 -0
  66. package/{dist/documents/cnpj.js → src/cnpj.ts} +74 -21
  67. package/src/cpf.test.ts +125 -0
  68. package/src/cpf.ts +150 -0
  69. package/src/index.test.ts +35 -0
  70. package/src/index.ts +19 -0
  71. package/src/judicialProcess.test.ts +118 -0
  72. package/src/judicialProcess.ts +167 -0
  73. package/src/pisPasep.test.ts +124 -0
  74. package/src/pisPasep.ts +128 -0
  75. package/src/postalCode.test.ts +132 -0
  76. package/src/postalCode.ts +164 -0
  77. package/src/renavam.test.ts +110 -0
  78. package/src/renavam.ts +122 -0
  79. package/src/tituloEleitor.test.ts +129 -0
  80. package/src/tituloEleitor.ts +146 -0
  81. package/src/utils-applyMask.test.ts +17 -0
  82. package/src/utils-clearValue.test.ts +55 -0
  83. package/src/utils-fakeNumber.test.ts +19 -0
  84. package/src/utils-insertAtPosition.test.ts +15 -0
  85. package/src/utils-invalidListGenerator.test.ts +27 -0
  86. package/src/utils-removeFromPosition.test.ts +15 -0
  87. package/src/utils-sumElementsByMultipliers.test.ts +34 -0
  88. package/src/utils-sumToDV.test.ts +16 -0
  89. package/src/utils.ts +172 -0
  90. package/tsconfig.json +23 -0
  91. package/.babelrc +0 -15
  92. package/.prettierrc +0 -9
  93. package/dist/documents/cnh.js +0 -77
  94. package/dist/documents/cnh.js.map +0 -1
  95. package/dist/documents/cnpj.js.map +0 -1
  96. package/dist/documents/cpf.js +0 -83
  97. package/dist/documents/cpf.js.map +0 -1
  98. package/dist/documents/index.js +0 -23
  99. package/dist/documents/index.js.map +0 -1
  100. package/dist/documents/pis-pasep.js +0 -71
  101. package/dist/documents/pis-pasep.js.map +0 -1
  102. package/dist/documents/postal-code.js +0 -72
  103. package/dist/documents/postal-code.js.map +0 -1
  104. package/dist/documents/titulo-eleitor.js +0 -74
  105. package/dist/documents/titulo-eleitor.js.map +0 -1
  106. package/dist/lib/utils.js +0 -60
  107. package/dist/lib/utils.js.map +0 -1
  108. package/docs.md +0 -0
  109. package/index.js +0 -3
@@ -0,0 +1,110 @@
1
+ import isRenavam, { dv, fake, mask, validate, validateOrFail } from './renavam'
2
+
3
+ describe('Renavam', () => {
4
+ test('isRenavam() - Números válidos', () => {
5
+ const list = [
6
+ // valores com máscara
7
+ '1952519770-3',
8
+ '3394038959-9',
9
+ // valores como inteiros
10
+ 3607626105,
11
+ 64090416160,
12
+ // valores como string sem máscara
13
+ '80499688374',
14
+ '40650543741',
15
+ ]
16
+
17
+ list.forEach((renavam) => {
18
+ expect(isRenavam(renavam)).toBeTruthy()
19
+ })
20
+ })
21
+
22
+ test('validate() - Números válidos', () => {
23
+ const list = [
24
+ // valores com máscara
25
+ '1952519770-3',
26
+ '3394038959-9',
27
+ // valores como inteiros
28
+ 3607626105,
29
+ 64090416160,
30
+ // valores como string sem máscara
31
+ '80499688374',
32
+ '40650543741',
33
+ ]
34
+
35
+ list.forEach((renavam) => {
36
+ expect(validate(renavam)).toBeTruthy()
37
+ })
38
+ })
39
+
40
+ test('validate() - Números inválidos', () => {
41
+ const list = ['19525227703', '33940229599', '03607226105', '64090226160', '80499228374']
42
+
43
+ list.forEach((renavam) => {
44
+ expect(validate(renavam)).toBeFalsy()
45
+ })
46
+ })
47
+
48
+ test('validateOrFail() - Números inválidos', () => {
49
+ const list = ['19525227703', '33940229599', '03607226105', '64090226160', '80499228374']
50
+
51
+ list.forEach((renavam) => {
52
+ expect(() => validateOrFail(renavam)).toThrow()
53
+ })
54
+ })
55
+
56
+ test('Parâmetro não informado', () => {
57
+ expect(isRenavam('')).toBeFalsy()
58
+ expect(validate('')).toBeFalsy()
59
+ expect(() => validateOrFail('')).toThrow()
60
+ expect(() => dv('')).toThrow()
61
+ })
62
+
63
+ test('fake() - Gera fakes sem máscara', () => {
64
+ for (let i = 0; i < 5; i += 1) {
65
+ const renavam = fake()
66
+
67
+ expect(validate(renavam)).toBeTruthy()
68
+ expect(renavam).toHaveLength(11)
69
+ }
70
+ })
71
+
72
+ test('fake() - Gera fakes com máscara', () => {
73
+ for (let i = 0; i < 5; i += 1) {
74
+ const renavam = fake(true)
75
+
76
+ expect(validate(renavam)).toBeTruthy()
77
+ expect(renavam).toHaveLength(12)
78
+ }
79
+ })
80
+
81
+ test('dv() - Verificando se o DV gerado está correto', () => {
82
+ const list = [
83
+ { num: '1952519770', expected: '3' },
84
+ { num: 952519770, expected: '6' },
85
+ { num: 52519770, expected: '2' },
86
+ ]
87
+
88
+ list.forEach((item) => {
89
+ const calcDv = dv(item.num)
90
+
91
+ expect(calcDv).toBe(item.expected)
92
+ expect(typeof calcDv).toBe('string')
93
+ })
94
+ })
95
+
96
+ test('mask() - Testando se a máscara foi gerada corretamente', () => {
97
+ const list = [
98
+ { num: '19525197703', expected: '1952519770-3' },
99
+ { num: 9525197703, expected: '0952519770-3' },
100
+ { num: 525197703, expected: '0052519770-3' },
101
+ ]
102
+
103
+ list.forEach((item) => {
104
+ const masked = mask(item.num)
105
+
106
+ expect(masked).toBe(item.expected)
107
+ expect(masked).toHaveLength(12)
108
+ })
109
+ })
110
+ })
package/src/renavam.ts ADDED
@@ -0,0 +1,122 @@
1
+ /**
2
+ * RENAVAM
3
+ * Funções auxiliares para cálculo de máscaras, validação, dígito verificador e criaçãode
4
+ * números fake.
5
+ *
6
+ * @doc
7
+ * - O número de RENAVAM deve possuir 11 caracteres
8
+ *
9
+ * - Os caracteres de 1 a 10 são a numeração documento
10
+ *
11
+ * - O caractere 11 é o dígito verificador.
12
+ *
13
+ * 1) Partes do número
14
+ * _______________________________________________
15
+ * | Número | D V |
16
+ * | 2 6 8 2 7 6 4 9 9 6 - 0 |
17
+ * |_________________________________________|_____|
18
+ *
19
+ * 2) Cálculo do DV.
20
+ *
21
+ * - Soma-se o produto das algarismos 3 a 10 pelos números 3, 2, 9, 8, 7, 6, 5, 4, 3, 2
22
+ *
23
+ * 2 6 8 2 7 6 4 9 9 6
24
+ * x x x x x x x x x x
25
+ * 3 2 9 8 7 6 5 4 3 2
26
+ * = 6 +12 +72 +16 +49 +12 +20 +36 +27 +12 = 234
27
+ *
28
+ * - O somatório encontrado é multiplicado por 10 e ao resultado
29
+ * é aplicado o cálculo do MOD 11.
30
+ *
31
+ * ( 234 * 10 ) / 11 tem resto 8. DV = 8. Caso o resto seja maior ou igual a
32
+ * 10, DV será 0.
33
+ *
34
+ *
35
+ */
36
+
37
+ import {
38
+ sumElementsByMultipliers,
39
+ clearValue,
40
+ fakeNumber,
41
+ applyMask,
42
+ invalidListGenerator,
43
+ } from './utils'
44
+
45
+ /**
46
+ * dv()
47
+ * Calcula o dígito verificador
48
+ *
49
+ * @param {Number|String} value
50
+ * @returns {String}
51
+ */
52
+ export const dv = (value: string | number): string => {
53
+ if (!value) throw new Error('Renavam não informado')
54
+
55
+ const renavam = clearValue(value, 10) // só 10 para remover o DV
56
+
57
+ const invalidList = invalidListGenerator(10)
58
+ if (invalidList.includes(renavam)) {
59
+ throw new Error('RENAVAM não pode ser uma sequência de números iguais')
60
+ }
61
+
62
+ const sum1 = sumElementsByMultipliers(renavam, [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]) * 10
63
+ const dv1 = sum1 % 11 >= 10 ? 0 : sum1 % 11
64
+ return `${dv1}`
65
+ }
66
+
67
+ /**
68
+ * Aplica uma máscara ao número informado
69
+ *
70
+ * @param {String} value Número de Processo
71
+ * @returns {String} Valor com a máscara
72
+ */
73
+ export const mask = (value: string | number): string => applyMask(value, '0000000000-0')
74
+
75
+ /**
76
+ * fake()
77
+ * Gera um número válido
78
+ *
79
+ * @returns {String}
80
+ */
81
+ export const fake = (withMask: boolean = false): string => {
82
+ const value = fakeNumber(10, true)
83
+
84
+ const renavam = `${value}${dv(value)}`
85
+
86
+ if (withMask) return mask(renavam)
87
+
88
+ return renavam
89
+ }
90
+
91
+ /**
92
+ * validateOrFail()
93
+ * Valida se um número de processo está correto e
94
+ * retorna uma exceção se não estiver
95
+ *
96
+ * @returns {Boolean}
97
+ */
98
+ export const validateOrFail = (value: string | number): boolean => {
99
+ const renavam = clearValue(value, 11)
100
+
101
+ if (dv(renavam) !== renavam.substring(10, 11)) {
102
+ throw new Error('Dígito verificador inválido')
103
+ }
104
+
105
+ return true
106
+ }
107
+
108
+ /**
109
+ * validate()
110
+ * Valida se um número de processo está correto
111
+ *
112
+ * @returns {Boolean}
113
+ */
114
+ export const validate = (value: string | number): boolean => {
115
+ try {
116
+ return validateOrFail(value)
117
+ } catch (error) {
118
+ return false
119
+ }
120
+ }
121
+
122
+ export default validate
@@ -0,0 +1,129 @@
1
+ import isTituloEleitor, { dv, fake, mask, validate, validateOrFail } from './tituloEleitor'
2
+
3
+ describe('TituloEleitor', () => {
4
+ test('isTituloEleitor() - Números válidos', () => {
5
+ const list = [
6
+ // masked
7
+ '1023.8501.0671',
8
+ '8365.7137.1619',
9
+ // string
10
+ '153036161686',
11
+ '525028881694',
12
+ // integer
13
+ 11122223360,
14
+ 1122223336,
15
+ ]
16
+
17
+ list.forEach((tituloEleitor) => {
18
+ expect(isTituloEleitor(tituloEleitor)).toBeTruthy()
19
+ })
20
+ })
21
+
22
+ test('validate() - Números válidos', () => {
23
+ const list = [
24
+ // masked
25
+ '1023.8501.0671',
26
+ '8365.7137.1619',
27
+ // string
28
+ '153036161686',
29
+ '525028881694',
30
+ // integer
31
+ 11122223360,
32
+ 1122223336,
33
+ ]
34
+
35
+ list.forEach((tituloEleitor) => {
36
+ expect(validate(tituloEleitor)).toBeTruthy()
37
+ })
38
+ })
39
+
40
+ test('validate() - Números inválidos', () => {
41
+ const list = [
42
+ '836531371619',
43
+ '743620641660',
44
+ '153016161686',
45
+ '525078881694',
46
+ '026367681660',
47
+ '558647441635',
48
+ '222222222222',
49
+ ]
50
+
51
+ list.forEach((tituloEleitor) => {
52
+ expect(validate(tituloEleitor)).toBeFalsy()
53
+ })
54
+ })
55
+
56
+ test('validateOrFail() - Números inválidos', () => {
57
+ const list = [
58
+ '836531371619',
59
+ '743620641660',
60
+ '153016161686',
61
+ '525078881694',
62
+ '026367681660',
63
+ '558647441635',
64
+ '222222222222',
65
+ ]
66
+
67
+ list.forEach((tituloEleitor) => {
68
+ expect(() => validateOrFail(tituloEleitor)).toThrow()
69
+ })
70
+ })
71
+
72
+ test('Parâmetro não informado', () => {
73
+ expect(isTituloEleitor('')).toBeFalsy()
74
+ expect(validate('')).toBeFalsy()
75
+ expect(() => validateOrFail('')).toThrow()
76
+ expect(() => dv('')).toThrow()
77
+ })
78
+
79
+ test('fake() - Gera fakes sem máscara', () => {
80
+ for (let i = 0; i < 5; i += 1) {
81
+ const tituloEleitor = fake()
82
+
83
+ expect(validate(tituloEleitor)).toBeTruthy()
84
+ expect(tituloEleitor).toHaveLength(12)
85
+ }
86
+ })
87
+
88
+ test('fake() - Gera fakes com máscara', () => {
89
+ for (let i = 0; i < 5; i += 1) {
90
+ const tituloEleitor = fake(true)
91
+
92
+ expect(validate(tituloEleitor)).toBeTruthy()
93
+ expect(tituloEleitor).toHaveLength(14)
94
+ }
95
+ })
96
+
97
+ test('dv() - Verificando se o DV gerado está correto', () => {
98
+ const list = [
99
+ { num: '1023850106', expected: '71' },
100
+ { num: '8365713716', expected: '19' },
101
+ { num: '7436506416', expected: '60' },
102
+ { num: 11222233, expected: '36' },
103
+ ]
104
+
105
+ list.forEach((item) => {
106
+ const calcDv = dv(item.num)
107
+
108
+ expect(calcDv).toBe(item.expected)
109
+ expect(typeof calcDv).toBe('string')
110
+ })
111
+ })
112
+
113
+ test('mask() - Testando se a máscara foi gerada corretamente', () => {
114
+ const list = [
115
+ { num: '102385010671', expected: '1023.8501.0671' },
116
+ { num: '836571371619', expected: '8365.7137.1619' },
117
+ { num: '743650641660', expected: '7436.5064.1660' },
118
+ { num: 11122223360, expected: '0111.2222.3360' },
119
+ { num: 1122223336, expected: '0011.2222.3336' },
120
+ ]
121
+
122
+ list.forEach((item) => {
123
+ const masked = mask(item.num)
124
+
125
+ expect(masked).toBe(item.expected)
126
+ expect(masked).toHaveLength(14)
127
+ })
128
+ })
129
+ })
@@ -0,0 +1,146 @@
1
+ /**
2
+ * isTitulo()
3
+ * Calcula se um título eleitoral é válido
4
+ *
5
+ * @doc
6
+ * Título de eleitor deve possuir 12 dígitos.
7
+ *
8
+ * - Os caracteres 1 a 8 são números sequenciais.
9
+ *
10
+ * - Os caracteres 9 e 10 representam os estados da federação onde o título
11
+ * foi emitido (01 = SP, 02 = MG, 03 = RJ, 04 = RS, 05 = BA, 06 = PR, 07 = CE, 08 = PE,
12
+ * 09 = SC, 10 = GO, 11 = MA12 = PB, 13 = PA, 14 = ES, 15 = PI, 16 = RN, 17 = AL,
13
+ * 18 = MT, 19 = MS, 20 = DF, 21 = SE, 22 = AM, 23 = RO, 24 = AC, 25 = AP, 26 = RR,
14
+ * 27 = TO, 28 = Exterior(ZZ).
15
+ *
16
+ * - Os caracteres 11 e 12 são dígitos verificadores.
17
+ *
18
+ * 1) Partes do número
19
+ * ------------------------------------------------
20
+ * | Número Sequencial | UF | DV |
21
+ * 1 0 2 3 8 5 0 1 0 6 7 1
22
+ *
23
+ * 2) Cálculo do primeiro DV.
24
+ *
25
+ * - Soma-se o produto das algarismos 1 a 8 pelos números 2, 3, 4, 5, 6, 7, 8 e 9.
26
+ *
27
+ * 1 0 2 3 8 5 0 1
28
+ * x x x x x x x x
29
+ * 2 3 4 5 6 7 8 9
30
+ * = 2 + 0 + 8 +15 +48 +35 + 0 + 9 = 117
31
+ *
32
+ * - O somatório encontrado é dividido por 11. O DV1 é o resto da divisão. Se o
33
+ * resto for 10, o DV1 é 0.
34
+ *
35
+ * 2.1) 117 / 11 tem resto igual a 7.
36
+ *
37
+ * 3) Cálculo do segundo DV
38
+ *
39
+ * - Soma-se o produto dos algarismos 9 a 11 (relativos aos 2 dígitos da UF e o novo
40
+ * DV1 que acabou de ser calculado) e os multiplicam pelos números 7, 8 e 9. Se o
41
+ * resto for 10, DV2 será 0.
42
+ * 0 6 7
43
+ * x x x
44
+ * 7 8 9
45
+ * = 0 +48 +63 = 111
46
+ *
47
+ * 3.1) 111 / 11 tem resto igual a 1.
48
+ *
49
+ * Fonte: http://clubes.obmep.org.br/blog/a-matematica-nos-documentos-titulo-de-eleitor/
50
+ *
51
+ * @param {String} value Título eleitoral
52
+ * @returns {Boolean}
53
+ */
54
+
55
+ import {
56
+ sumElementsByMultipliers,
57
+ clearValue,
58
+ fakeNumber,
59
+ applyMask,
60
+ invalidListGenerator,
61
+ } from './utils'
62
+
63
+ /**
64
+ * dv()
65
+ * Calcula o dígito verificador
66
+ *
67
+ * @param {Number|String} value
68
+ * @returns {String}
69
+ */
70
+ export const dv = (value: string | number): string => {
71
+ if (!value) throw new Error('CPF não informado')
72
+
73
+ const titulo = clearValue(value, 10)
74
+
75
+ const invalidList = invalidListGenerator(10)
76
+ if (invalidList.includes(titulo)) {
77
+ throw new Error('Título não pode ser uma sequência de números iguais')
78
+ }
79
+
80
+ const sum1 = sumElementsByMultipliers(titulo.substring(0, 8), [2, 3, 4, 5, 6, 7, 8, 9])
81
+ const dv1 = sum1 % 11 >= 10 ? 0 : sum1 % 11
82
+
83
+ const sum2 = sumElementsByMultipliers(titulo.substring(8, 10) + dv1, [7, 8, 9])
84
+ const dv2 = sum2 % 11 >= 10 ? 0 : sum2 % 11
85
+
86
+ return `${dv1}${dv2}`
87
+ }
88
+
89
+ /**
90
+ * Aplica uma máscara ao número informado
91
+ *
92
+ * @param {String} value Número de Processo
93
+ * @returns {String} Valor com a máscara
94
+ */
95
+ export const mask = (value: string | number): string => applyMask(value, '0000.0000.0000')
96
+ // const mask = (value) => applyMask(value, '0000.0000.0000');
97
+
98
+ /**
99
+ * fake()
100
+ * Gera um número válido
101
+ *
102
+ * @returns {String}
103
+ */
104
+ export const fake = (withMask: boolean = false): string => {
105
+ const num = fakeNumber(8, true)
106
+
107
+ const uf = (Math.random() * 27 + 1).toFixed(0).padStart(2, '0')
108
+
109
+ const titulo = `${num}${uf}${dv(num + uf)}`
110
+
111
+ if (withMask) return mask(titulo)
112
+ return titulo
113
+ }
114
+
115
+ /**
116
+ * validateOrFail()
117
+ * Valida se um número de processo está correto e
118
+ * retorna uma exceção se não estiver
119
+ *
120
+ * @returns {Boolean}
121
+ */
122
+ export const validateOrFail = (value: string | number): boolean => {
123
+ const titulo = clearValue(value, 12)
124
+
125
+ if (dv(titulo) !== titulo.substring(10, 12)) {
126
+ throw new Error('Dígito verificador inválido')
127
+ }
128
+
129
+ return true
130
+ }
131
+
132
+ /**
133
+ * validate()
134
+ * Valida se um número de processo está correto
135
+ *
136
+ * @returns {Boolean}
137
+ */
138
+ export const validate = (value: string | number): boolean => {
139
+ try {
140
+ return validateOrFail(value)
141
+ } catch (error) {
142
+ return false
143
+ }
144
+ }
145
+
146
+ export default validate
@@ -0,0 +1,17 @@
1
+ const { applyMask } = require('./utils')
2
+
3
+ describe('applyMask()', () => {
4
+ const items = [
5
+ { value: '123456', mask: '00000-0', expected: '12345-6' },
6
+ { value: '12345', mask: '00000-0', expected: '01234-5' },
7
+ { value: '123456789', mask: '00000-0', expected: '12345-6' },
8
+ { value: 123456789, mask: '00000-0', expected: '12345-6' },
9
+ ]
10
+
11
+ test('Máscara deve ser aplicada com o valor e tamanho correto', () => {
12
+ items.forEach((item) => {
13
+ expect(item.expected.length).toBe(item.mask.length)
14
+ expect(applyMask(item.value, item.mask)).toBe(item.expected)
15
+ })
16
+ })
17
+ })
@@ -0,0 +1,55 @@
1
+ import { clearValue } from './utils'
2
+
3
+ describe('clearValue()', () => {
4
+ test('Deve limpar o valor - Strings do Mesmo tamanho', () => {
5
+ //
6
+ const valid = [
7
+ { value: 1234567890, size: 10, expected: '1234567890' },
8
+ { value: '1234567890', size: 10, expected: '1234567890' },
9
+ { value: '12.345.678-90', size: 10, expected: '1234567890' },
10
+ ]
11
+
12
+ valid.forEach((item) => {
13
+ expect(clearValue(item.value, item.size)).toBe(item.expected)
14
+ })
15
+ })
16
+
17
+ test('Deve limpar os caracteres não numéricos sem verificar o tamanho da string', () => {
18
+ //
19
+ const valid = [
20
+ { value: 1234567890123, size: null, expected: '1234567890123' },
21
+ { value: '4567890', size: null, expected: '4567890' },
22
+ { value: '345.678-90', size: null, expected: '34567890' },
23
+ ]
24
+
25
+ valid.forEach((item) => {
26
+ expect(clearValue(item.value, item.size)).toBe(item.expected)
27
+ })
28
+ })
29
+
30
+ test('Deve limpar o valor os caracteres não numéricos e completar com zeros à esquerda', () => {
31
+ //
32
+ const valid = [
33
+ { value: 1234, size: 10, expected: '0000001234' },
34
+ { value: '1234', size: 10, expected: '0000001234' },
35
+ { value: '123-4', size: 10, expected: '0000001234' },
36
+ ]
37
+
38
+ valid.forEach((item) => {
39
+ expect(clearValue(item.value, item.size)).toBe(item.expected)
40
+ })
41
+ })
42
+
43
+ test('Deve limpar o valor os caracteres não numéricos e remover os caracteres que passarem de size', () => {
44
+ //
45
+ const valid = [
46
+ { value: 123456789, size: 4, expected: '1234' },
47
+ { value: '1234567890', size: 4, expected: '1234' },
48
+ { value: '12.345.678-90', size: 4, expected: '1234' },
49
+ ]
50
+
51
+ valid.forEach((item) => {
52
+ expect(clearValue(item.value, item.size)).toBe(item.expected)
53
+ })
54
+ })
55
+ })
@@ -0,0 +1,19 @@
1
+ const { fakeNumber } = require('./utils')
2
+
3
+ describe('fakeNumber()', () => {
4
+ test('forceLength = true', () => {
5
+ const num = fakeNumber(4, true)
6
+
7
+ expect(num).toHaveLength(4)
8
+ expect(typeof num).toBe('string')
9
+ expect(num).toMatch(/^[\d]+$/)
10
+ })
11
+
12
+ test('forceLength = false', () => {
13
+ const num = fakeNumber(4)
14
+
15
+ expect(num).toBeLessThanOrEqual(9999)
16
+ expect(num).toBeGreaterThanOrEqual(0)
17
+ expect(typeof num).toBe('number')
18
+ })
19
+ })
@@ -0,0 +1,15 @@
1
+ import { insertAtPosition } from './utils'
2
+
3
+ describe('insertAtPosition()', () => {
4
+ test('Deve inserir um caractere em uma determinada posição da string', () => {
5
+ //
6
+ const list = [
7
+ { value: 'AAABBB', insert: 'C', position: 3, expected: 'AAACBBB' },
8
+ { value: 'J Med', insert: 'Cl ', position: 2, expected: 'J Cl Med' },
9
+ ]
10
+
11
+ list.forEach((item) => {
12
+ expect(insertAtPosition(item.value, item.insert, item.position)).toBe(item.expected)
13
+ })
14
+ })
15
+ })
@@ -0,0 +1,27 @@
1
+ const { invalidListGenerator } = require('./utils')
2
+
3
+ describe('invalidListGenerator()', () => {
4
+ test('invalidListGenerator - Número de itens', () => {
5
+ const list = invalidListGenerator(4)
6
+
7
+ expect(1).toBe(1)
8
+ expect(Array.isArray(list)).toBeTruthy()
9
+ })
10
+
11
+ test('invalidListGenerator - Tamanho dos itens', () => {
12
+ const valid = [
13
+ { length: 10, size: 8 },
14
+ { length: 10, size: 4 },
15
+ ]
16
+
17
+ valid.forEach((item) => {
18
+ const list = invalidListGenerator(item.size)
19
+
20
+ expect(list).toHaveLength(10)
21
+
22
+ list.forEach((num: string) => {
23
+ expect(num).toHaveLength(item.size)
24
+ })
25
+ })
26
+ })
27
+ })
@@ -0,0 +1,15 @@
1
+ import { removeFromPosition } from './utils'
2
+
3
+ describe('removeFromPosition()', () => {
4
+ test('', () => {
5
+ //
6
+ const list = [
7
+ { value: 'Jossé', start: 2, end: 3, expected: 'José' },
8
+ { value: 'Cláuudio', start: 4, end: 5, expected: 'Cláudio' },
9
+ ]
10
+
11
+ list.forEach((item) => {
12
+ expect(removeFromPosition(item.value, item.start, item.end)).toBe(item.expected)
13
+ })
14
+ })
15
+ })
@@ -0,0 +1,34 @@
1
+ const { sumElementsByMultipliers } = require('./utils')
2
+
3
+ describe('sumElementsByMultipliers()', () => {
4
+ test('Tipo do retorno', () => {
5
+ const sum = sumElementsByMultipliers('1234', '9876')
6
+
7
+ expect(typeof sum).toBe('number')
8
+ expect(sum).toBe(70)
9
+ })
10
+
11
+ test('Valores retornados', () => {
12
+ ;[
13
+ { input: '1234', multipliers: '9876', expected: 70 },
14
+ { input: '1234', multipliers: [9, 8, 7, 6], expected: 70 },
15
+ // cnpj
16
+ { input: '112223330001', multipliers: [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2], expected: 102 },
17
+ { input: '1122233300018', multipliers: '6543298765432', expected: 120 },
18
+ // cpf
19
+ { input: '280012389', multipliers: [10, 9, 8, 7, 6, 5, 4, 3, 2], expected: 162 },
20
+ { input: '2800123893', multipliers: [11, 10, 9, 8, 7, 6, 5, 4, 3, 2], expected: 201 },
21
+ // titulo
22
+ { input: '10238501', multipliers: '23456789', expected: 117 },
23
+ { input: '067', multipliers: '789', expected: 111 },
24
+ ].forEach((item) => {
25
+ const sum = sumElementsByMultipliers(item.input, item.multipliers)
26
+ expect(sum).toBe(item.expected)
27
+ })
28
+
29
+ const sum = sumElementsByMultipliers('1234', '9876')
30
+
31
+ expect(typeof sum).toBe('number')
32
+ expect(sum).toBe(70)
33
+ })
34
+ })