cpf_cnpj 0.2.1 → 0.3.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +7 -0
- data/README.md +24 -8
- data/Rakefile +10 -1
- data/bin/cnpj +2 -1
- data/bin/cpf +2 -1
- data/cpf_cnpj.gemspec +2 -1
- data/lib/cnpj.rb +27 -23
- data/lib/cnpj/formatter.rb +5 -2
- data/lib/cpf.rb +29 -25
- data/lib/cpf/formatter.rb +5 -2
- data/lib/cpf_cnpj.rb +3 -0
- data/lib/cpf_cnpj/cli.rb +109 -0
- data/lib/cpf_cnpj/generator.rb +12 -0
- data/lib/cpf_cnpj/version.rb +6 -2
- data/test/support/capture_syscall.rb +14 -0
- data/test/test_helper.rb +8 -0
- data/test/unit/cnpj/cli_test.rb +132 -0
- data/test/unit/cnpj/formatter_test.rb +13 -0
- data/test/unit/cnpj/generator_test.rb +11 -0
- data/test/unit/cnpj_test.rb +46 -0
- data/test/unit/cpf/cli_test.rb +134 -0
- data/test/unit/cpf/formatter_test.rb +13 -0
- data/test/unit/cpf/generator_test.rb +11 -0
- data/test/unit/cpf_test.rb +71 -0
- metadata +42 -33
- data/.rspec +0 -1
- data/Gemfile.lock +0 -47
- data/lib/cnpj/cli.rb +0 -102
- data/lib/cnpj/generator.rb +0 -12
- data/lib/cpf/cli.rb +0 -103
- data/lib/cpf/generator.rb +0 -12
- data/spec/cnpj/cli_spec.rb +0 -119
- data/spec/cnpj/formatter_spec.rb +0 -13
- data/spec/cnpj/generator_spec.rb +0 -15
- data/spec/cnpj_spec.rb +0 -46
- data/spec/cpf/cli_spec.rb +0 -119
- data/spec/cpf/formatter_spec.rb +0 -13
- data/spec/cpf/generator_spec.rb +0 -15
- data/spec/cpf_spec.rb +0 -73
- data/spec/spec_helper.rb +0 -6
- data/spec/support/capture_exit.rb +0 -10
- data/spec/support/validation_shared.rb +0 -17
@@ -0,0 +1,12 @@
|
|
1
|
+
module CpfCnpj
|
2
|
+
class Generator
|
3
|
+
NUMBERS = [*0..9].freeze
|
4
|
+
|
5
|
+
def self.generate(size, verifier_digit_generator)
|
6
|
+
numbers = size.times.map { NUMBERS.sample }
|
7
|
+
numbers << verifier_digit_generator.generate(numbers)
|
8
|
+
numbers << verifier_digit_generator.generate(numbers)
|
9
|
+
numbers.join("")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/cpf_cnpj/version.rb
CHANGED
data/test/test_helper.rb
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module CNPJCli
|
4
|
+
class CheckTest < Minitest::Test
|
5
|
+
include CaptureSyscall
|
6
|
+
|
7
|
+
%w[-c --check].each do |switch|
|
8
|
+
test "checks if provided number is valid [using #{switch}]" do
|
9
|
+
exit_status, stdout = capture_syscall do
|
10
|
+
system "./bin/cnpj #{switch} 54550752000155"
|
11
|
+
end
|
12
|
+
|
13
|
+
assert_equal 0, exit_status
|
14
|
+
assert_equal stdout, ""
|
15
|
+
end
|
16
|
+
|
17
|
+
test "outputs error message if provided number is invalid [using #{switch}]" do
|
18
|
+
exit_status, _, stderr = capture_syscall do
|
19
|
+
system "./bin/cnpj #{switch} invalid"
|
20
|
+
end
|
21
|
+
|
22
|
+
assert_equal 1, exit_status
|
23
|
+
assert stderr.include?("Error: Invalid number")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class HelpTest < Minitest::Test
|
29
|
+
include CaptureSyscall
|
30
|
+
|
31
|
+
%w[-h --help].each do |switch|
|
32
|
+
test "outputs help [using #{switch}]" do
|
33
|
+
exit_status, _, stderr = capture_syscall do
|
34
|
+
system "./bin/cnpj #{switch}"
|
35
|
+
end
|
36
|
+
|
37
|
+
assert_equal 1, exit_status
|
38
|
+
assert stderr.include?("Usage: cnpj")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
test "outputs help on tail" do
|
43
|
+
exit_status, _, stderr = capture_syscall do
|
44
|
+
system "./bin/cnpj"
|
45
|
+
end
|
46
|
+
|
47
|
+
assert_equal 1, exit_status
|
48
|
+
assert stderr.include?("Usage: cnpj")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class VersionTest < Minitest::Test
|
53
|
+
include CaptureSyscall
|
54
|
+
|
55
|
+
%w[-v --version].each do |switch|
|
56
|
+
test "outputs version [using #{switch}]" do
|
57
|
+
exit_status, stdout = capture_syscall do
|
58
|
+
system "./bin/cnpj #{switch}"
|
59
|
+
end
|
60
|
+
|
61
|
+
assert_equal 0, exit_status
|
62
|
+
assert stdout.include?(CNPJ::VERSION.to_s)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class GenerateTest < Minitest::Test
|
68
|
+
include CaptureSyscall
|
69
|
+
|
70
|
+
%w[-g --generate].each do |switch|
|
71
|
+
test "generates number [using #{switch}]" do
|
72
|
+
exit_status, stdout = capture_syscall do
|
73
|
+
system "./bin/cnpj #{switch}"
|
74
|
+
end
|
75
|
+
|
76
|
+
assert_equal 0, exit_status
|
77
|
+
assert_match CNPJ::REGEX, stdout
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
test "generates stripped number" do
|
82
|
+
exit_status, stdout = capture_syscall do
|
83
|
+
system "./bin/cnpj -gs"
|
84
|
+
end
|
85
|
+
|
86
|
+
assert_equal 0, exit_status
|
87
|
+
assert_match /\A\d{14}\Z/, stdout
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class FormatTest < Minitest::Test
|
92
|
+
include CaptureSyscall
|
93
|
+
|
94
|
+
%w[-f --format].each do |switch|
|
95
|
+
test "formats argument [using #{switch}]" do
|
96
|
+
exit_status, stdout = capture_syscall do
|
97
|
+
system "./bin/cnpj #{switch} 54550752000155"
|
98
|
+
end
|
99
|
+
|
100
|
+
assert_equal 0, exit_status
|
101
|
+
assert stdout.include?("54.550.752/0001-55")
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
test "formats argument using stdin" do
|
106
|
+
exit_status, stdout = capture_syscall do
|
107
|
+
system "echo 54550752000155 | ./bin/cnpj --format"
|
108
|
+
end
|
109
|
+
|
110
|
+
assert_equal 0, exit_status
|
111
|
+
assert stdout.include?("54.550.752/0001-55")
|
112
|
+
end
|
113
|
+
|
114
|
+
test "fails when providing invalid number" do
|
115
|
+
exit_status, _, stderr = capture_syscall do
|
116
|
+
system "./bin/cnpj --format invalid"
|
117
|
+
end
|
118
|
+
|
119
|
+
assert_equal 1, exit_status
|
120
|
+
assert stderr.include?("Error: Invalid number")
|
121
|
+
end
|
122
|
+
|
123
|
+
test "fails when not providing a number" do
|
124
|
+
exit_status, _, stderr = capture_syscall do
|
125
|
+
system "./bin/cnpj --format"
|
126
|
+
end
|
127
|
+
|
128
|
+
assert_equal 1, exit_status
|
129
|
+
assert stderr.include?("Error: Invalid number")
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class CNPJFormatterTest < Minitest::Test
|
4
|
+
test "formats strings without separators" do
|
5
|
+
number = "12345678901234"
|
6
|
+
assert_equal "12.345.678/9012-34", CNPJ::Formatter.format(number)
|
7
|
+
end
|
8
|
+
|
9
|
+
test "removes any non-numeric characters" do
|
10
|
+
number = "\n12$345[678/9012-34"
|
11
|
+
assert_equal "12345678901234", CNPJ::Formatter.strip(number)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class CNPJGeneratorTest < Minitest::Test
|
4
|
+
test "generates valid numbers" do
|
5
|
+
10.times { assert CNPJ.valid?(CNPJ.generate) }
|
6
|
+
end
|
7
|
+
|
8
|
+
test "generates random numbers" do
|
9
|
+
10.times { refute_equal CNPJ.generate, CNPJ.generate }
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class CnpjTest < Minitest::Test
|
4
|
+
test "blacklists common numbers" do
|
5
|
+
refute CNPJ.valid?("11111111111111")
|
6
|
+
refute CNPJ.valid?("22222222222222")
|
7
|
+
refute CNPJ.valid?("33333333333333")
|
8
|
+
refute CNPJ.valid?("44444444444444")
|
9
|
+
refute CNPJ.valid?("55555555555555")
|
10
|
+
refute CNPJ.valid?("66666666666666")
|
11
|
+
refute CNPJ.valid?("77777777777777")
|
12
|
+
refute CNPJ.valid?("88888888888888")
|
13
|
+
refute CNPJ.valid?("99999999999999")
|
14
|
+
end
|
15
|
+
|
16
|
+
test "rejects blank strings" do
|
17
|
+
refute CNPJ.valid?("")
|
18
|
+
end
|
19
|
+
|
20
|
+
test "rejects nil values" do
|
21
|
+
refute CNPJ.valid?(nil)
|
22
|
+
end
|
23
|
+
|
24
|
+
test "validates formatted strings" do
|
25
|
+
number = "54.550.752/0001-55"
|
26
|
+
assert CNPJ.valid?(number)
|
27
|
+
end
|
28
|
+
|
29
|
+
test "validates unformatted strings" do
|
30
|
+
number = "54550752000155"
|
31
|
+
assert CNPJ.valid?(number)
|
32
|
+
end
|
33
|
+
|
34
|
+
test "validates messed strings" do
|
35
|
+
number = "54550[752#0001..$55"
|
36
|
+
assert CNPJ.valid?(number)
|
37
|
+
end
|
38
|
+
|
39
|
+
test "generates formatted number" do
|
40
|
+
assert_match %r[\A\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}\z], CNPJ.generate(true)
|
41
|
+
end
|
42
|
+
|
43
|
+
test "generates stripped number" do
|
44
|
+
assert_match /\A\d{14}\z/, CNPJ.generate
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module CPFCli
|
4
|
+
class CheckTest < Minitest::Test
|
5
|
+
include CaptureSyscall
|
6
|
+
|
7
|
+
%w[-c --check].each do |switch|
|
8
|
+
test "checks if provided number is valid [using #{switch}]" do
|
9
|
+
exit_status, stdout = capture_syscall do
|
10
|
+
system "./bin/cpf #{switch} 76616598837"
|
11
|
+
end
|
12
|
+
|
13
|
+
assert_equal 0, exit_status
|
14
|
+
assert_equal stdout, ""
|
15
|
+
end
|
16
|
+
|
17
|
+
test "outputs error message if provided number is invalid [using #{switch}]" do
|
18
|
+
exit_status, _, stderr = capture_syscall do
|
19
|
+
system "./bin/cpf #{switch} invalid"
|
20
|
+
end
|
21
|
+
|
22
|
+
assert_equal 1, exit_status
|
23
|
+
assert stderr.include?("Error: Invalid number")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class HelpTest < Minitest::Test
|
29
|
+
include CaptureSyscall
|
30
|
+
|
31
|
+
%w[-h --help].each do |switch|
|
32
|
+
test "outputs help [using #{switch}]" do
|
33
|
+
exit_status, _, stderr = capture_syscall do
|
34
|
+
system "./bin/cpf #{switch}"
|
35
|
+
end
|
36
|
+
|
37
|
+
assert_equal 1, exit_status
|
38
|
+
assert stderr.include?("Usage: cpf")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
test "outputs help on tail" do
|
43
|
+
exit_status, _, stderr = capture_syscall do
|
44
|
+
system "./bin/cpf"
|
45
|
+
end
|
46
|
+
|
47
|
+
assert_equal 1, exit_status
|
48
|
+
assert stderr.include?("Usage: cpf")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class VersionTest < Minitest::Test
|
53
|
+
include CaptureSyscall
|
54
|
+
|
55
|
+
%w[-v --version].each do |switch|
|
56
|
+
test "outputs version [using #{switch}]" do
|
57
|
+
exit_status, stdout, stderr = capture_syscall do
|
58
|
+
system "./bin/cpf #{switch}"
|
59
|
+
end
|
60
|
+
|
61
|
+
assert_equal 0, exit_status
|
62
|
+
assert stdout.include?(CPF::VERSION.to_s)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class GenerateTest < Minitest::Test
|
68
|
+
include CaptureSyscall
|
69
|
+
|
70
|
+
%w[-g --generate].each do |switch|
|
71
|
+
test "generates number [using #{switch}]" do
|
72
|
+
exit_status, stdout = capture_syscall do
|
73
|
+
system "./bin/cpf #{switch}"
|
74
|
+
end
|
75
|
+
|
76
|
+
assert_equal 0, exit_status
|
77
|
+
assert_match CPF::REGEX, stdout
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
test "generates stripped number" do
|
82
|
+
exit_status, stdout = capture_syscall do
|
83
|
+
system "./bin/cpf -gs"
|
84
|
+
end
|
85
|
+
|
86
|
+
assert_equal 0, exit_status
|
87
|
+
assert_match /\A\d{11}\Z/, stdout
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class FormatTest < Minitest::Test
|
92
|
+
include CaptureSyscall
|
93
|
+
|
94
|
+
%w[-f --format].each do |switch|
|
95
|
+
test "formats argument [using #{switch}]" do
|
96
|
+
exit_status, stdout = capture_syscall do
|
97
|
+
system "./bin/cpf #{switch} 76616598837"
|
98
|
+
end
|
99
|
+
|
100
|
+
assert_equal 0, exit_status
|
101
|
+
assert stdout.include?("766.165.988-37")
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
test "formats argument using stdin" do
|
106
|
+
stdin = StringIO.new("76616598837")
|
107
|
+
|
108
|
+
exit_status, stdout = capture_syscall do
|
109
|
+
system "echo 76616598837 | ./bin/cpf --format"
|
110
|
+
end
|
111
|
+
|
112
|
+
assert_equal 0, exit_status
|
113
|
+
assert stdout.include?("766.165.988-37")
|
114
|
+
end
|
115
|
+
|
116
|
+
test "fails when providing invalid number" do
|
117
|
+
exit_status, _, stderr = capture_syscall do
|
118
|
+
system "./bin/cpf --format invalid"
|
119
|
+
end
|
120
|
+
|
121
|
+
assert_equal 1, exit_status
|
122
|
+
assert stderr.include?("Error: Invalid number")
|
123
|
+
end
|
124
|
+
|
125
|
+
test "fails when not providing a number" do
|
126
|
+
exit_status, _, stderr = capture_syscall do
|
127
|
+
system "./bin/cpf --format"
|
128
|
+
end
|
129
|
+
|
130
|
+
assert_equal 1, exit_status
|
131
|
+
assert stderr.include?("Error: Invalid number")
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class CPFFormatterTest < Minitest::Test
|
4
|
+
test "formats strings without separators" do
|
5
|
+
number = "12345678901234"
|
6
|
+
assert_equal "12.345.678/9012-34", CNPJ::Formatter.format(number)
|
7
|
+
end
|
8
|
+
|
9
|
+
test "removes any non-numeric characters" do
|
10
|
+
number = "\n12$345[678/9012-34"
|
11
|
+
assert_equal "12345678901234", CNPJ::Formatter.strip(number)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class CPFGeneratorTest < Minitest::Test
|
4
|
+
test "generates valid numbers" do
|
5
|
+
10.times { assert CNPJ.valid?(CNPJ.generate) }
|
6
|
+
end
|
7
|
+
|
8
|
+
test "generates random numbers" do
|
9
|
+
10.times { refute_equal CNPJ.generate, CNPJ.generate }
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class CpfTest < Minitest::Test
|
4
|
+
test "blacklists common numbers" do
|
5
|
+
refute CPF.valid?("11111111111")
|
6
|
+
refute CPF.valid?("22222222222")
|
7
|
+
refute CPF.valid?("33333333333")
|
8
|
+
refute CPF.valid?("44444444444")
|
9
|
+
refute CPF.valid?("55555555555")
|
10
|
+
refute CPF.valid?("66666666666")
|
11
|
+
refute CPF.valid?("77777777777")
|
12
|
+
refute CPF.valid?("88888888888")
|
13
|
+
refute CPF.valid?("99999999999")
|
14
|
+
refute CPF.valid?("12345678909")
|
15
|
+
end
|
16
|
+
|
17
|
+
test "rejects blank strings" do
|
18
|
+
refute CPF.valid?("")
|
19
|
+
end
|
20
|
+
|
21
|
+
test "rejects nil values" do
|
22
|
+
refute CPF.valid?(nil)
|
23
|
+
end
|
24
|
+
|
25
|
+
test "validates formatted strings" do
|
26
|
+
number = "295.379.955-93"
|
27
|
+
assert CPF.valid?(number)
|
28
|
+
end
|
29
|
+
|
30
|
+
test "validates unformatted strings" do
|
31
|
+
number = "29537995593"
|
32
|
+
assert CPF.valid?(number)
|
33
|
+
end
|
34
|
+
|
35
|
+
test "validates messed strings" do
|
36
|
+
number = "295$379\n955...93"
|
37
|
+
assert CPF.valid?(number)
|
38
|
+
end
|
39
|
+
|
40
|
+
test "strictly validates strings" do
|
41
|
+
refute CPF.valid?("295$379\n955...93", strict: true)
|
42
|
+
assert CPF.valid?("295.379.955-93", strict: true)
|
43
|
+
assert CPF.valid?("29537995593", strict: true)
|
44
|
+
end
|
45
|
+
|
46
|
+
test "returns stripped number" do
|
47
|
+
cpf = CPF.new("295.379.955-93")
|
48
|
+
assert_equal "29537995593", cpf.stripped
|
49
|
+
end
|
50
|
+
|
51
|
+
test "formats number" do
|
52
|
+
cpf = CPF.new("29537995593")
|
53
|
+
assert_equal "295.379.955-93", cpf.formatted
|
54
|
+
end
|
55
|
+
|
56
|
+
test "generates formatted number" do
|
57
|
+
assert_match /\A\d{3}\.\d{3}\.\d{3}-\d{2}\z/, CPF.generate(true)
|
58
|
+
end
|
59
|
+
|
60
|
+
test "generates stripped number" do
|
61
|
+
assert_match /\A\d{11}\z/, CPF.generate
|
62
|
+
end
|
63
|
+
|
64
|
+
test "invalidates memoization cache" do
|
65
|
+
cpf = CPF.new("29537995593")
|
66
|
+
cpf.number = "52139989171"
|
67
|
+
|
68
|
+
assert_equal "52139989171", cpf.stripped
|
69
|
+
assert_equal "521.399.891-71", cpf.formatted
|
70
|
+
end
|
71
|
+
end
|