Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions src/cnh/cnh.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package cnh
import (
"fmt"

"github.com/potatowski/brazilcode/src"
"github.com/potatowski/brazilcode/src/utils"
)

var (
ErrCNHInvalidLength = fmt.Errorf("Invalid CNH length")
ErrCNHInvalid = fmt.Errorf("Invalid CNH")
ErrCNHInvalidLength = fmt.Errorf("invalid CNH length")
ErrCNHInvalid = fmt.Errorf("invalid CNH")
)

/*
Expand All @@ -17,12 +17,12 @@ IsValid check if the CNH is valid
- @return {error}
*/
func IsValid(doc string) error {
doc = src.RemoveChar(doc)
doc = utils.RemoveChar(doc)
if len(doc) != 11 {
return ErrCNHInvalidLength
}

dv1, dv2, err := src.CalculateCNHDVs(doc)
dv1, dv2, err := utils.CalculateCNHDVs(doc)
if err != nil {
return err
}
Expand All @@ -40,8 +40,8 @@ Generate is to create a random CNH
- @return {error}
*/
func Generate() (string, error) {
cnh := src.GenerateRandomDoc(9, 10)
dv1, dv2, err := src.CalculateCNHDVs(cnh)
cnh := utils.GenerateRandomDoc(9, 10)
dv1, dv2, err := utils.CalculateCNHDVs(cnh)
if err != nil {
return "", err
}
Expand Down
26 changes: 13 additions & 13 deletions src/cnpj/cnpj.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import (
"errors"
"fmt"

"github.com/potatowski/brazilcode/src"
"github.com/potatowski/brazilcode/src/utils"
)

var (
ErrCNPJInvalid = errors.New("Invalid CNPJ")
ErrCNPJInvalidLength = errors.New("Invalid CNPJ length")
ErrCNPJInvalid = errors.New("invalid CNPJ")
ErrCNPJInvalidLength = errors.New("invalid CNPJ length")
)

/*
Expand All @@ -18,7 +18,7 @@ IsValid check if the CNPJ is valid
- @return {error}
*/
func IsValid(doc string) error {
doc = src.RemoveChar(doc)
doc = utils.RemoveChar(doc)
if len(doc) != 14 {
return ErrCNPJInvalidLength
}
Expand All @@ -28,23 +28,23 @@ func IsValid(doc string) error {

doc = doc[:12]
var sum int
sum, err := src.Calculator(doc, 5)
sum, err := utils.Calculator(doc, 5)
if err != nil {
return err
}

firstDigit := src.GetDigit(sum)
firstDigit := utils.GetDigit(sum)
if firstDigit != int(firstDigitCheck) {
return ErrCNPJInvalid
}
doc += fmt.Sprintf("%d", firstDigit)

sum, err = src.Calculator(doc, 6)
sum, err = utils.Calculator(doc, 6)
if err != nil {
return err
}

secondDigit := src.GetDigit(sum)
secondDigit := utils.GetDigit(sum)
if secondDigit != int(secondDigitCheck) {
return ErrCNPJInvalid
}
Expand All @@ -69,21 +69,21 @@ Generate is to create a random CNPJ
- @return {string}
*/
func Generate() (string, error) {
cnpj := src.GenerateRandomDoc(12, 9)
cnpj := utils.GenerateRandomDoc(12, 9)

sum, err := src.Calculator(cnpj, 5)
sum, err := utils.Calculator(cnpj, 5)
if err != nil {
return "", err
}

cnpj += fmt.Sprintf("%d", src.GetDigit(sum))
cnpj += fmt.Sprintf("%d", utils.GetDigit(sum))

sum, err = src.Calculator(cnpj, 6)
sum, err = utils.Calculator(cnpj, 6)
if err != nil {
return "", err
}

cnpj += fmt.Sprintf("%d", src.GetDigit(sum))
cnpj += fmt.Sprintf("%d", utils.GetDigit(sum))

if err := IsValid(cnpj); err != nil {
return "", err
Expand Down
22 changes: 11 additions & 11 deletions src/cpf/cpf.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import (
"errors"
"fmt"

"github.com/potatowski/brazilcode/src"
"github.com/potatowski/brazilcode/src/utils"
)

var (
ErrCPFInvalidLength = errors.New("Invalid CPF length")
ErrCPFInvalid = errors.New("Invalid CPF")
ErrCPFInvalidLength = errors.New("invalid CPF length")
ErrCPFInvalid = errors.New("invalid CPF")
)

/*
Expand All @@ -18,7 +18,7 @@ IsValid check if the CPF is valid
- @return {error}
*/
func IsValid(doc string) error {
doc = src.RemoveChar(doc)
doc = utils.RemoveChar(doc)
if len(doc) != 11 {
return ErrCPFInvalidLength
}
Expand All @@ -28,7 +28,7 @@ func IsValid(doc string) error {
sum += int(doc[i]-'0') * (10 - i)
}

firstDigit := src.GetDigit(sum)
firstDigit := utils.GetDigit(sum)
if firstDigit != int(doc[9]-'0') {
return ErrCPFInvalid
}
Expand All @@ -38,7 +38,7 @@ func IsValid(doc string) error {
sum += int(doc[i]-'0') * (11 - i)
}

secondDigit := src.GetDigit(sum)
secondDigit := utils.GetDigit(sum)

if secondDigit != int(doc[10]-'0') {
return ErrCPFInvalid
Expand All @@ -65,21 +65,21 @@ Generate is to create a random CPF
- @return {string, error}
*/
func Generate() (string, error) {
cpf := src.GenerateRandomDoc(9, 9)
cpf := utils.GenerateRandomDoc(9, 9)

sum, err := src.Calculator(cpf, 10)
sum, err := utils.Calculator(cpf, 10)
if err != nil {
return "", err
}

cpf += fmt.Sprintf("%d", src.GetDigit(sum))
cpf += fmt.Sprintf("%d", utils.GetDigit(sum))

sum, err = src.Calculator(cpf, 11)
sum, err = utils.Calculator(cpf, 11)
if err != nil {
return "", err
}

cpf += fmt.Sprintf("%d", src.GetDigit(sum))
cpf += fmt.Sprintf("%d", utils.GetDigit(sum))

if err := IsValid(cpf); err != nil {
return "", err
Expand Down
62 changes: 1 addition & 61 deletions src/utils.go → src/utils/calculator.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package src
package utils

import (
"errors"
"fmt"
"math/rand"
"regexp"
)

/*
Expand Down Expand Up @@ -46,43 +43,6 @@ func Calculator(doc string, first int) (int, error) {
return sum, nil
}

/*
GetDigit returns the digit of the document
- @param {int} sum
- @return {int}
*/
func GetDigit(sum int) int {
rest := sum % 11
if rest < 2 {
return 0
}
return 11 - rest
}

/*
RemoveChar returns the string without special characters
- @param {string} str
- @return {string}
*/
func RemoveChar(str string) string {
return regexp.MustCompile("[^0-9]+").ReplaceAllString(str, "")
}

/*
GenerateRandomDoc returns a random document
- @param {int} len
- @param {int} numberInRand
- @return {string}
*/
func GenerateRandomDoc(len, numberInRand int) string {
var doc string
for i := 0; i < len; i++ {
doc += fmt.Sprintf("%d", rand.Intn(numberInRand))
}

return doc
}

/*
CalculatorCNH returns the sum of the document
- @param {string} doc
Expand Down Expand Up @@ -149,23 +109,3 @@ func CalculateCNHDVs(cnh string) (int, int, error) {

return dv1, dv2, nil
}

/*
GetDigitMoreThen returns the digit of the document
- @param {int} sum
- @param {bool} withAux
- @return {int}
*/
func GetDigitMoreThen(sum int, withAux bool) (result int) {
digitCheck := sum % 11
aux := 0
if digitCheck >= 10 {
digitCheck = 0
if withAux {
aux = 2
}
}

result = digitCheck - aux*2
return result
}
94 changes: 94 additions & 0 deletions src/utils/calculator_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package utils_test

import (
"testing"

"github.com/potatowski/brazilcode/src/utils"
)

func TestCalculator(t *testing.T) {
// Test case 1: doc with less than 10 characters and first positive
result, err := utils.Calculator("1234", 4)
expected := 20
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if result != expected {
t.Errorf("Calculator(\"1234\", 4) = %d; expected %d", result, expected)
}

// Test case 2: doc with more than 10 characters and first positive
result, err = utils.Calculator("12345678901", 1)
expected = 244
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if result != expected {
t.Errorf("Calculator(\"12345678901\", 1) = %d; expected %d", result, expected)
}

// Test case 3: document equals ""
_, err = utils.Calculator("", 1)
if err == nil {
t.Errorf("expected an error about document")
}

// Test case 4: param fisrt more than 0
_, err = utils.Calculator("12345", -2)
if err == nil {
t.Errorf("expected an error about first more than 0")
}

// Test case 5: param first equals 0
_, err = utils.Calculator("12345", 0)
if err == nil {
t.Errorf("expected an error about first equals 0")
}
}
func TestCalculatorCNH(t *testing.T) {
doc := "12345678901"
first := 2
incrementType := "increment"

result, err := utils.CalculatorCNH(doc, first, incrementType)
if err != nil {
t.Errorf("CalculatorCNH(%q, %d, %q) returned an error: %v", doc, first, incrementType, err)
}

expectedResult := 330
if result != expectedResult {
t.Errorf("CalculatorCNH(%q, %d, %q) = %d, expected %d", doc, first, incrementType, result, expectedResult)
}

incrementType = "invalid"
_, err = utils.CalculatorCNH(doc, first, incrementType)
if err == nil {
t.Errorf("CalculatorCNH(%q, %d, %q) did not return an error for invalid incrementType", doc, first, incrementType)
}
}

func TestCalculateCNHDVs(t *testing.T) {
// Test case 1: valid CNH
cnh := "97625655678"

dv1, dv2, err := utils.CalculateCNHDVs(cnh)
if err != nil {
t.Errorf("CalculateCNHDVs(%q) returned an error: %v", cnh, err)
}

expectedDv1 := 7
if dv1 != expectedDv1 {
t.Errorf("CalculateCNHDVs(%q) dv1 = %d, expected %d", cnh, dv1, expectedDv1)
}
expectedDv2 := 8
if dv2 != expectedDv2 {
t.Errorf("CalculateCNHDVs(%q) dv2 = %d, expected %d", cnh, dv2, expectedDv2)
}

// Test case 2: invalid CNH length
cnh = "12345678"
_, _, err = utils.CalculateCNHDVs(cnh)
if err == nil {
t.Errorf("CalculateCNHDVs(%q) did not return an error for invalid CNH", cnh)
}
}
Loading