cpf_cnpj 0.4.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@
3
3
  require "test_helper"
4
4
 
5
5
  class CnpjTest < Minitest::Test
6
- test "blacklists common numbers" do
6
+ test "rejects common numbers" do
7
7
  refute CNPJ.valid?("00000000000000")
8
8
  refute CNPJ.valid?("11111111111111")
9
9
  refute CNPJ.valid?("22222222222222")
@@ -26,16 +26,26 @@ class CnpjTest < Minitest::Test
26
26
 
27
27
  test "validates formatted strings" do
28
28
  number = "54.550.752/0001-55"
29
+
29
30
  assert CNPJ.valid?(number)
30
31
  end
31
32
 
33
+ test "formats number" do
34
+ cnpj = CNPJ.new("54550752000155")
35
+
36
+ assert_equal "54.550.752/0001-55", cnpj.formatted
37
+ assert_equal "54.550.752/0001-55", CNPJ.format("54550752000155")
38
+ end
39
+
32
40
  test "validates unformatted strings" do
33
41
  number = "54550752000155"
42
+
34
43
  assert CNPJ.valid?(number)
35
44
  end
36
45
 
37
46
  test "validates messed strings" do
38
47
  number = "54550[752#0001..$55"
48
+
39
49
  assert CNPJ.valid?(number)
40
50
  end
41
51
 
@@ -51,7 +61,27 @@ class CnpjTest < Minitest::Test
51
61
  refute CNPJ.valid?("aa.bb.ccc/dddd-ee")
52
62
  end
53
63
 
54
- test "rejects strings (strict)" do
64
+ test "strictly validates strings" do
55
65
  refute CNPJ.valid?("aa.bb.ccc/dddd-ee", strict: true)
66
+ refute CNPJ.valid?("54....550....752///0001---55", strict: true)
67
+ assert CNPJ.valid?("54.550.752/0001-55", strict: true)
68
+ assert CNPJ.valid?("54550752000155", strict: true)
69
+ end
70
+
71
+ test "compare objects by their numeric value" do
72
+ one = CNPJ.new("54550752000155")
73
+ other = CNPJ.new("54550752000155")
74
+ different = CNPJ.new("32228235377")
75
+
76
+ assert_equal one, other
77
+
78
+ refute_equal one, different
79
+ refute_equal other, different
80
+ end
81
+
82
+ test "returns number without verifier" do
83
+ cnpj = CNPJ.new("54550752000155")
84
+
85
+ assert_equal "545507520001", cnpj.number_without_verifier
56
86
  end
57
87
  end
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module CPFCli
6
+ class CheckTest < Minitest::Test
7
+ include RunCommand
8
+
9
+ %w[-c --check].each do |switch|
10
+ test "checks if provided number is valid [using #{switch}]" do
11
+ exit_status, stdout = run_command([switch, "76616598837"])
12
+
13
+ assert_equal 0, exit_status
14
+ assert_equal "", stdout
15
+ end
16
+
17
+ test "outputs error if provided number is invalid [using #{switch}]" do
18
+ exit_status, _, stderr = run_command([switch, "invalid"])
19
+
20
+ assert_equal 1, exit_status
21
+ assert_includes stderr, "Error: Invalid number"
22
+ end
23
+ end
24
+ end
25
+
26
+ class HelpTest < Minitest::Test
27
+ include RunCommand
28
+
29
+ %w[-h --help].each do |switch|
30
+ test "outputs help [using #{switch}]" do
31
+ exit_status, _, stderr = run_command([switch])
32
+
33
+ assert_equal 1, exit_status
34
+ assert_includes stderr, "Usage: cpf"
35
+ end
36
+ end
37
+
38
+ test "outputs help on tail" do
39
+ exit_status, _, stderr = run_command([])
40
+
41
+ assert_equal 1, exit_status
42
+ assert_includes stderr, "Usage: cpf"
43
+ end
44
+ end
45
+
46
+ class VersionTest < Minitest::Test
47
+ include RunCommand
48
+
49
+ %w[-v --version].each do |switch|
50
+ test "outputs version [using #{switch}]" do
51
+ exit_status, stdout, _stderr = run_command([switch])
52
+
53
+ assert_equal 0, exit_status
54
+ assert_includes stdout, CPF::VERSION.to_s
55
+ end
56
+ end
57
+ end
58
+
59
+ class GenerateTest < Minitest::Test
60
+ include RunCommand
61
+
62
+ %w[-g --generate].each do |switch|
63
+ test "generates number [using #{switch}]" do
64
+ exit_status, stdout = run_command([switch])
65
+
66
+ assert_equal 0, exit_status
67
+ assert_match CPF::REGEX, stdout
68
+ end
69
+ end
70
+
71
+ test "generates stripped number" do
72
+ exit_status, stdout = run_command(["-gs"])
73
+
74
+ assert_equal 0, exit_status
75
+ assert_match(/\A\d{11}\Z/, stdout)
76
+ end
77
+ end
78
+
79
+ class FormatTest < Minitest::Test
80
+ include RunCommand
81
+
82
+ %w[-f --format].each do |switch|
83
+ test "formats argument [using #{switch}]" do
84
+ exit_status, stdout = run_command([switch, "76616598837"])
85
+
86
+ assert_equal 0, exit_status
87
+ assert_includes stdout, "766.165.988-37"
88
+ end
89
+ end
90
+
91
+ test "formats argument using stdin" do
92
+ exit_status, stdout = run_command(["--format"], input: "76616598837")
93
+
94
+ assert_equal 0, exit_status
95
+ assert_includes stdout, "766.165.988-37"
96
+ end
97
+
98
+ test "fails when providing invalid number" do
99
+ exit_status, _, stderr = run_command(["--format", "invalid"])
100
+
101
+ assert_equal 1, exit_status
102
+ assert_includes stderr, "Error: Invalid number"
103
+ end
104
+
105
+ test "fails when not providing a number" do
106
+ exit_status, _, stderr = run_command(["--format"])
107
+
108
+ assert_equal 1, exit_status
109
+ assert_includes stderr, "Error: Invalid number"
110
+ end
111
+ end
112
+ end
@@ -4,12 +4,14 @@ require "test_helper"
4
4
 
5
5
  class CPFFormatterTest < Minitest::Test
6
6
  test "formats strings without separators" do
7
- number = "12345678901234"
8
- assert_equal "12.345.678/9012-34", CNPJ::Formatter.format(number)
7
+ number = "12345678901"
8
+
9
+ assert_equal "123.456.789-01", CPF::Formatter.format(number)
9
10
  end
10
11
 
11
12
  test "removes any non-numeric characters" do
12
- number = "\n12$345[678/9012-34"
13
- assert_equal "12345678901234", CNPJ::Formatter.strip(number)
13
+ number = "\n12$345[678/901-"
14
+
15
+ assert_equal "12345678901", CPF::Formatter.strip(number)
14
16
  end
15
17
  end
@@ -3,8 +3,7 @@
3
3
  require "test_helper"
4
4
 
5
5
  class CpfTest < Minitest::Test
6
- test "blacklists common numbers" do
7
- refute CPF.valid?("01234567890")
6
+ test "rejects common numbers" do
8
7
  refute CPF.valid?("11111111111")
9
8
  refute CPF.valid?("22222222222")
10
9
  refute CPF.valid?("33333333333")
@@ -14,6 +13,7 @@ class CpfTest < Minitest::Test
14
13
  refute CPF.valid?("77777777777")
15
14
  refute CPF.valid?("88888888888")
16
15
  refute CPF.valid?("99999999999")
16
+ refute CPF.valid?("00000000000")
17
17
  refute CPF.valid?("12345678909")
18
18
  end
19
19
 
@@ -31,21 +31,25 @@ class CpfTest < Minitest::Test
31
31
 
32
32
  test "validates formatted strings" do
33
33
  number = "295.379.955-93"
34
+
34
35
  assert CPF.valid?(number)
35
36
  end
36
37
 
37
38
  test "validates unformatted strings" do
38
39
  number = "29537995593"
40
+
39
41
  assert CPF.valid?(number)
40
42
  end
41
43
 
42
44
  test "validates messed strings" do
43
45
  number = "295$379\n955...93"
46
+
44
47
  assert CPF.valid?(number)
45
48
  end
46
49
 
47
50
  test "strictly validates strings" do
48
51
  refute CPF.valid?("295$379\n955...93", strict: true)
52
+ refute CPF.valid?("295.......379.......955-----93", strict: true)
49
53
  assert CPF.valid?("295.379.955-93", strict: true)
50
54
  assert CPF.valid?("29537995593", strict: true)
51
55
  end
@@ -56,12 +60,15 @@ class CpfTest < Minitest::Test
56
60
 
57
61
  test "returns stripped number" do
58
62
  cpf = CPF.new("295.379.955-93")
63
+
59
64
  assert_equal "29537995593", cpf.stripped
60
65
  end
61
66
 
62
67
  test "formats number" do
63
68
  cpf = CPF.new("29537995593")
69
+
64
70
  assert_equal "295.379.955-93", cpf.formatted
71
+ assert_equal "295.379.955-93", CPF.format("29537995593")
65
72
  end
66
73
 
67
74
  test "generates formatted number" do
@@ -79,4 +86,21 @@ class CpfTest < Minitest::Test
79
86
  assert_equal "52139989171", cpf.stripped
80
87
  assert_equal "521.399.891-71", cpf.formatted
81
88
  end
89
+
90
+ test "compare objects by their numeric value" do
91
+ one = CPF.new("29537995593")
92
+ other = CPF.new("29537995593")
93
+ different = CPF.new("76556868310")
94
+
95
+ assert_equal one, other
96
+
97
+ refute_equal one, different
98
+ refute_equal other, different
99
+ end
100
+
101
+ test "returns number without verifier" do
102
+ cpf = CPF.new("29537995593")
103
+
104
+ assert_equal "295379955", cpf.number_without_verifier
105
+ end
82
106
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RunCommand
4
+ class TTYStringIO < StringIO
5
+ def tty?
6
+ true
7
+ end
8
+ end
9
+
10
+ def run_command(args, input: nil)
11
+ stdout = StringIO.new
12
+ stderr = StringIO.new
13
+ stdin = input ? StringIO.new(input) : TTYStringIO.new
14
+ exit_status = 0
15
+
16
+ mod = if self.class.name.start_with?("CPF")
17
+ CPF
18
+ else
19
+ CNPJ
20
+ end
21
+
22
+ begin
23
+ CpfCnpj::CLI.new(mod, args, stdin, stdout, stderr).start
24
+ rescue SystemExit => error
25
+ exit_status = error.status
26
+ end
27
+
28
+ [exit_status, stdout.tap(&:rewind).read, stderr.tap(&:rewind).read]
29
+ end
30
+ end
data/test/test_helper.rb CHANGED
@@ -6,4 +6,4 @@ Bundler.require
6
6
  require "minitest/utils"
7
7
  require "minitest/autorun"
8
8
 
9
- require_relative "./support/capture_syscall"
9
+ require_relative "support/run_command"
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cpf_cnpj
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-26 00:00:00.000000000 Z
11
+ date: 2024-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest-utils
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: pry-meta
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +53,21 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: minitest-utils
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-fnando
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - ">="
@@ -62,9 +90,11 @@ executables:
62
90
  extensions: []
63
91
  extra_rdoc_files: []
64
92
  files:
93
+ - ".github/FUNDING.yml"
94
+ - ".github/dependabot.yml"
95
+ - ".github/workflows/ruby-tests.yml"
65
96
  - ".gitignore"
66
97
  - ".rubocop.yml"
67
- - ".travis.yml"
68
98
  - Gemfile
69
99
  - LICENSE
70
100
  - README.md
@@ -82,20 +112,23 @@ files:
82
112
  - lib/cpf_cnpj/cli.rb
83
113
  - lib/cpf_cnpj/generator.rb
84
114
  - lib/cpf_cnpj/version.rb
85
- - test/support/capture_syscall.rb
115
+ - test/cnpj/cli_test.rb
116
+ - test/cnpj/formatter_test.rb
117
+ - test/cnpj/generator_test.rb
118
+ - test/cnpj_test.rb
119
+ - test/cpf/cli_test.rb
120
+ - test/cpf/formatter_test.rb
121
+ - test/cpf/generator_test.rb
122
+ - test/cpf_test.rb
123
+ - test/support/run_command.rb
86
124
  - test/test_helper.rb
87
- - test/unit/cnpj/cli_test.rb
88
- - test/unit/cnpj/formatter_test.rb
89
- - test/unit/cnpj/generator_test.rb
90
- - test/unit/cnpj_test.rb
91
- - test/unit/cpf/cli_test.rb
92
- - test/unit/cpf/formatter_test.rb
93
- - test/unit/cpf/generator_test.rb
94
- - test/unit/cpf_test.rb
95
- homepage:
125
+ homepage: https://github.com/fnando/cpf_cnpj
96
126
  licenses: []
97
- metadata: {}
98
- post_install_message:
127
+ metadata:
128
+ homepage_uri: https://github.com/fnando/cpf_cnpj
129
+ source_code_uri: https://github.com/fnando/cpf_cnpj
130
+ rubygems_mfa_required: 'true'
131
+ post_install_message:
99
132
  rdoc_options: []
100
133
  require_paths:
101
134
  - lib
@@ -103,26 +136,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
136
  requirements:
104
137
  - - ">="
105
138
  - !ruby/object:Gem::Version
106
- version: '0'
139
+ version: 2.7.0
107
140
  required_rubygems_version: !ruby/object:Gem::Requirement
108
141
  requirements:
109
142
  - - ">="
110
143
  - !ruby/object:Gem::Version
111
144
  version: '0'
112
145
  requirements: []
113
- rubyforge_project:
114
- rubygems_version: 2.6.13
115
- signing_key:
146
+ rubygems_version: 3.5.16
147
+ signing_key:
116
148
  specification_version: 4
117
149
  summary: Validate, generate and format CPF/CNPJ numbers. Include command-line tools.
118
- test_files:
119
- - test/support/capture_syscall.rb
120
- - test/test_helper.rb
121
- - test/unit/cnpj/cli_test.rb
122
- - test/unit/cnpj/formatter_test.rb
123
- - test/unit/cnpj/generator_test.rb
124
- - test/unit/cnpj_test.rb
125
- - test/unit/cpf/cli_test.rb
126
- - test/unit/cpf/formatter_test.rb
127
- - test/unit/cpf/generator_test.rb
128
- - test/unit/cpf_test.rb
150
+ test_files: []
data/.travis.yml DELETED
@@ -1,8 +0,0 @@
1
- language: ruby
2
- sudo: false
3
- cache: bundler
4
- notifications:
5
- email: false
6
- rvm:
7
- - '2.4.2'
8
- - '2.3.5'
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "timeout"
4
-
5
- module CaptureSyscall
6
- def capture_syscall
7
- exit_status = nil
8
-
9
- stdout, stderr = Timeout.timeout(1) do
10
- capture_subprocess_io do
11
- yield
12
- exit_status = $CHILD_STATUS.exitstatus
13
- end
14
- end
15
-
16
- [exit_status, stdout, stderr]
17
- end
18
- end
@@ -1,134 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "test_helper"
4
-
5
- module CNPJCli
6
- class CheckTest < Minitest::Test
7
- include CaptureSyscall
8
-
9
- %w[-c --check].each do |switch|
10
- test "checks if provided number is valid [using #{switch}]" do
11
- exit_status, stdout = capture_syscall do
12
- system "./bin/cnpj #{switch} 54550752000155"
13
- end
14
-
15
- assert_equal 0, exit_status
16
- assert_equal stdout, ""
17
- end
18
-
19
- test "outputs error message if provided number is invalid [using #{switch}]" do
20
- exit_status, _, stderr = capture_syscall do
21
- system "./bin/cnpj #{switch} invalid"
22
- end
23
-
24
- assert_equal 1, exit_status
25
- assert stderr.include?("Error: Invalid number")
26
- end
27
- end
28
- end
29
-
30
- class HelpTest < Minitest::Test
31
- include CaptureSyscall
32
-
33
- %w[-h --help].each do |switch|
34
- test "outputs help [using #{switch}]" do
35
- exit_status, _, stderr = capture_syscall do
36
- system "./bin/cnpj #{switch}"
37
- end
38
-
39
- assert_equal 1, exit_status
40
- assert stderr.include?("Usage: cnpj")
41
- end
42
- end
43
-
44
- test "outputs help on tail" do
45
- exit_status, _, stderr = capture_syscall do
46
- system "./bin/cnpj"
47
- end
48
-
49
- assert_equal 1, exit_status
50
- assert stderr.include?("Usage: cnpj")
51
- end
52
- end
53
-
54
- class VersionTest < Minitest::Test
55
- include CaptureSyscall
56
-
57
- %w[-v --version].each do |switch|
58
- test "outputs version [using #{switch}]" do
59
- exit_status, stdout = capture_syscall do
60
- system "./bin/cnpj #{switch}"
61
- end
62
-
63
- assert_equal 0, exit_status
64
- assert stdout.include?(CNPJ::VERSION.to_s)
65
- end
66
- end
67
- end
68
-
69
- class GenerateTest < Minitest::Test
70
- include CaptureSyscall
71
-
72
- %w[-g --generate].each do |switch|
73
- test "generates number [using #{switch}]" do
74
- exit_status, stdout = capture_syscall do
75
- system "./bin/cnpj #{switch}"
76
- end
77
-
78
- assert_equal 0, exit_status
79
- assert_match CNPJ::REGEX, stdout
80
- end
81
- end
82
-
83
- test "generates stripped number" do
84
- exit_status, stdout = capture_syscall do
85
- system "./bin/cnpj -gs"
86
- end
87
-
88
- assert_equal 0, exit_status
89
- assert_match(/\A\d{14}\Z/, stdout)
90
- end
91
- end
92
-
93
- class FormatTest < Minitest::Test
94
- include CaptureSyscall
95
-
96
- %w[-f --format].each do |switch|
97
- test "formats argument [using #{switch}]" do
98
- exit_status, stdout = capture_syscall do
99
- system "./bin/cnpj #{switch} 54550752000155"
100
- end
101
-
102
- assert_equal 0, exit_status
103
- assert stdout.include?("54.550.752/0001-55")
104
- end
105
- end
106
-
107
- test "formats argument using stdin" do
108
- exit_status, stdout = capture_syscall do
109
- system "echo 54550752000155 | ./bin/cnpj --format"
110
- end
111
-
112
- assert_equal 0, exit_status
113
- assert stdout.include?("54.550.752/0001-55")
114
- end
115
-
116
- test "fails when providing invalid number" do
117
- exit_status, _, stderr = capture_syscall do
118
- system "./bin/cnpj --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/cnpj --format"
128
- end
129
-
130
- assert_equal 1, exit_status
131
- assert stderr.include?("Error: Invalid number")
132
- end
133
- end
134
- end