Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Digits validation checker and tests to v2. #133

Merged
merged 1 commit into from
Dec 27, 2024
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
42 changes: 42 additions & 0 deletions v2/digits.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Copyright (c) 2023-2024 Onur Cinar.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
// https://github.com/cinar/checker

package v2

import (
"reflect"
"unicode"
)

const (
// nameDigits is the name of the digits check.
nameDigits = "digits"
)

var (
// ErrNotDigits indicates that the given value is not a valid digits string.
ErrNotDigits = NewCheckError("Digits")
)

// IsDigits checks if the value contains only digit characters.
func IsDigits(value string) (string, error) {
for _, r := range value {
if !unicode.IsDigit(r) {
return value, ErrNotDigits
}
}
return value, nil
}

// checkDigits checks if the value contains only digit characters.
func checkDigits(value reflect.Value) (reflect.Value, error) {
_, err := IsDigits(value.Interface().(string))
return value, err
}

// makeDigits makes a checker function for the digits checker.
func makeDigits(_ string) CheckFunc[reflect.Value] {
return checkDigits
}
76 changes: 76 additions & 0 deletions v2/digits_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// Copyright (c) 2023-2024 Onur Cinar.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
// https://github.com/cinar/checker

package v2_test

import (
"fmt"
"testing"

v2 "github.com/cinar/checker/v2"
)

func ExampleIsDigits() {
_, err := v2.IsDigits("123456")
if err != nil {
fmt.Println(err)
}
}

func TestIsDigitsInvalid(t *testing.T) {
_, err := v2.IsDigits("123a456")
if err == nil {
t.Fatal("expected error")
}
}

func TestIsDigitsValid(t *testing.T) {
_, err := v2.IsDigits("123456")
if err != nil {
t.Fatal(err)
}
}

func TestCheckDigitsNonString(t *testing.T) {
defer FailIfNoPanic(t, "expected panic")

type Code struct {
Value int `checkers:"digits"`
}

code := &Code{}

v2.CheckStruct(code)
}

func TestCheckDigitsInvalid(t *testing.T) {
type Code struct {
Value string `checkers:"digits"`
}

code := &Code{
Value: "123a456",
}

_, ok := v2.CheckStruct(code)
if ok {
t.Fatal("expected error")
}
}

func TestCheckDigitsValid(t *testing.T) {
type Code struct {
Value string `checkers:"digits"`
}

code := &Code{
Value: "123456",
}

_, ok := v2.CheckStruct(code)
if !ok {
t.Fatal("expected valid")
}
}
1 change: 1 addition & 0 deletions v2/maker.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ var makers = map[string]MakeCheckFunc{
nameAlphanumeric: makeAlphanumeric,
nameASCII: makeASCII,
nameCIDR: makeCIDR,
nameDigits: makeDigits,
nameMaxLen: makeMaxLen,
nameMinLen: makeMinLen,
nameRequired: makeRequired,
Expand Down
Loading