Skip to content

Commit

Permalink
fixes #1; fixes tests
Browse files Browse the repository at this point in the history
  • Loading branch information
philippmoehler0440 committed Sep 5, 2016
1 parent 55bb5d8 commit 53f9f65
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 38 deletions.
61 changes: 33 additions & 28 deletions document_base.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,9 @@ func (self *DocumentBase) DefaultValidate() (bool, []error) {

isSet := false

if fieldValue.Kind() == reflect.Ptr && !fieldValue.IsNil() {
if !fieldValue.IsValid() {
isSet = false
} else if fieldValue.Kind() == reflect.Ptr && !fieldValue.IsNil() {

isSet = true

Expand All @@ -178,62 +180,65 @@ func (self *DocumentBase) DefaultValidate() (bool, []error) {

} else {

isSet = fieldValue.Interface() != reflect.Zero(reflect.TypeOf(fieldValue.Interface())).Interface()
isSet = !reflect.DeepEqual(fieldValue.Interface(), reflect.Zero(reflect.TypeOf(fieldValue.Interface())).Interface())
}

if required && !isSet {

self.AppendError(&validationErrors, L("validation.field_required", validationName))
}

if stringFieldValue, ok := fieldValue.Interface().(string); ok {
if fieldValue.IsValid() {
if stringFieldValue, ok := fieldValue.Interface().(string); ok {

// Regex to match a regex
regex := regexp.MustCompile(`\/((?)(?:[^\r\n\[\/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+)\/((?:g(?:im?|m)?|i(?:gm?|m)?|m(?:gi?|i)?)?)`)
isRegex := regex.MatchString(validation)
// Regex to match a regex
regex := regexp.MustCompile(`\/((?)(?:[^\r\n\[\/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+)\/((?:g(?:im?|m)?|i(?:gm?|m)?|m(?:gi?|i)?)?)`)
isRegex := regex.MatchString(validation)

if isSet && minLen > 0 && len(stringFieldValue) < minLen {
if isSet && minLen > 0 && len(stringFieldValue) < minLen {

self.AppendError(&validationErrors, L("validation.field_minlen", validationName, minLen))
self.AppendError(&validationErrors, L("validation.field_minlen", validationName, minLen))

} else if isSet && maxLen > 0 && len(stringFieldValue) > maxLen {
} else if isSet && maxLen > 0 && len(stringFieldValue) > maxLen {

self.AppendError(&validationErrors, L("validation.field_maxlen", validationName, maxLen))
}
self.AppendError(&validationErrors, L("validation.field_maxlen", validationName, maxLen))
}

if isSet && isRegex && !validateRegexp(validation, stringFieldValue) {
if isSet && isRegex && !validateRegexp(validation, stringFieldValue) {

self.AppendError(&validationErrors, L("validation.field_invalid", validationName))
}
self.AppendError(&validationErrors, L("validation.field_invalid", validationName))
}

if isSet && validation == "email" && !validateEmail(stringFieldValue) {
if isSet && validation == "email" && !validateEmail(stringFieldValue) {

self.AppendError(&validationErrors, L("validation.field_invalid", validationName))
}
self.AppendError(&validationErrors, L("validation.field_invalid", validationName))
}

if len(modelTag) > 0 {
if len(modelTag) > 0 {

if !isSet || !bson.IsObjectIdHex(stringFieldValue) {
if !isSet || !bson.IsObjectIdHex(stringFieldValue) {

self.AppendError(&validationErrors, L("validation.field_invalid_id", validationName))
self.AppendError(&validationErrors, L("validation.field_invalid_id", validationName))
}
}
}
} else if fieldValue.Kind() == reflect.Interface && fieldValue.Elem().Kind() == reflect.Slice {
} else if fieldValue.Kind() == reflect.Interface && fieldValue.Elem().Kind() == reflect.Slice {

slice := fieldValue.Elem()
slice := fieldValue.Elem()

for index := 0; index < slice.Len(); index++ {
for index := 0; index < slice.Len(); index++ {

if objectIdString, ok := slice.Index(index).Interface().(string); ok {
if objectIdString, ok := slice.Index(index).Interface().(string); ok {

if !bson.IsObjectIdHex(objectIdString) {
if !bson.IsObjectIdHex(objectIdString) {

self.AppendError(&validationErrors, L("validation.field_invalid_id", validationName))
break
self.AppendError(&validationErrors, L("validation.field_invalid_id", validationName))
break
}
}
}
}
}

}

return len(validationErrors) == 0, validationErrors
Expand Down
26 changes: 16 additions & 10 deletions mongodm_test.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package mongodm

import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"testing"

"github.com/nicksnyder/go-i18n/i18n"

"gopkg.in/mgo.v2/bson"
)

const (
DBHost string = "127.0.0.1"
DBName string = "mongodm_sample"
DBName string = "mongodm_test"
DBTestCollection string = "_testCollection"
DBTestRelCollection string = "_testRelationCollection"
)
Expand Down Expand Up @@ -42,24 +43,29 @@ type (
var dbConnection *Connection
var testRequest = []byte(`{"testmodel" : {"Name":"Max","Number":1337}}`)
var testInvalidRequest = []byte(`{"testmodel" : {"Name":"M"}}`)
var localsFile []byte

func init() {
//init localisation
err := i18n.LoadTranslationFile("en-US.error.locals.json")

var err error

localsFile, err = ioutil.ReadFile("locals.json")

if err != nil {
fmt.Println("%v", err)
fmt.Printf("File error: %v\n", err)
os.Exit(1)
}

//get localisation
L = i18n.MustTfunc("en-US")
}

func TestConnection(t *testing.T) {

var localMap map[string]map[string]string
json.Unmarshal(localsFile, &localMap)

dbConfig := &Config{
DatabaseHost: DBHost,
DatabaseName: DBName,
Locals: localMap["en-US"],
}

db, err := Connect(dbConfig)
Expand Down Expand Up @@ -349,7 +355,7 @@ func TestValidation(t *testing.T) {

if valid, issues := testModel.Validate(); valid {
t.Error("DB: model validation failed, expected invalid request")
} else if len(issues) != 2 {
} else if len(issues) != 3 {
t.Error("DB: model validation failed, expected two issues", issues)
}
}

0 comments on commit 53f9f65

Please sign in to comment.