github.com/bitcubate/cryptojournal@v1.2.5-0.20171102134152-f578b3d788ab/src/lib/resource/resource_test.go (about) 1 package resource 2 3 import ( 4 "testing" 5 ) 6 7 var r = Base{ID: 99, TableName: "images", KeyName: "id"} 8 9 func TestValidate(t *testing.T) { 10 11 // TEST NIL VALUES in db 12 // most validation is to ensure nil db columns return zero values rather than panic 13 14 // Test against nil bool 15 if ValidateBoolean(nil) != false { 16 t.Fatalf("Validate does not match expected:%v got:%v", false, ValidateBoolean(nil)) 17 } 18 19 // Test against nil float 20 if ValidateFloat(nil) != 0 { 21 t.Fatalf("Validate does not match expected:%v got:%v", 0, ValidateFloat(nil)) 22 } 23 24 // Test against nil int64 25 if ValidateInt(nil) != 0 { 26 t.Fatalf("Validate does not match expected:%v got:%v", 0, ValidateInt(nil)) 27 } 28 29 // Test against nil time 30 if !ValidateTime(nil).IsZero() { 31 t.Fatalf("Validate does not match expected:%v got:%v", "zero time", ValidateTime(nil)) 32 } 33 34 // Test against nil string 35 if ValidateString(nil) != "" { 36 t.Fatalf("Validate does not match expected:%v got:%v", "", ValidateString(nil)) 37 } 38 39 // TEST VALUES 40 41 if ValidateBoolean(true) != true { // yes, I know! 42 t.Fatalf("Validate does not match expected:%v got:%v", true, ValidateBoolean(true)) 43 } 44 45 // Test against range of ints as sanity check on casts 46 ints := []int{99, 5, 0, 1, 1110011, -1200} 47 for _, i := range ints { 48 if ValidateInt(i) != int64(i) { 49 t.Fatalf("Validate float does not match expected:%v got:%v", i, ValidateInt(i)) 50 } 51 } 52 53 // Test against range of floats as sanity check 54 floats := []float64{5.0, 0.0, 0.0001, -0.40} 55 for _, f := range floats { 56 if ValidateFloat(f) != f { 57 t.Fatalf("Validate float does not match expected:%v got:%v", f, ValidateFloat(f)) 58 } 59 } 60 // Check success of cast of int column values to floats 61 for _, f := range ints { 62 if ValidateFloat(f) != float64(f) { 63 t.Fatalf("Validate float does not match expected:%v got:%v", f, ValidateFloat(f)) 64 } 65 } 66 67 } 68 69 // TestValidateParams tests we remove params correctly when not authorised 70 // the default set is an empty set 71 func TestValidateParams(t *testing.T) { 72 allowed := []string{"name"} 73 params := map[string]string{"name_asdfasdf_name": "asdf", "name": "foo", "bar": "baz"} 74 params = r.ValidateParams(params, allowed) 75 if len(params) > 1 { 76 t.Fatalf("Validate params does not match expected:%v got:%v", "[]", params) 77 } 78 } 79 80 // We should probably have an in-memory adapter for query which lets us test creation etc easily 81 82 // TestURLs tests the url functions in urls.go 83 func TestURLs(t *testing.T) { 84 85 expected := "/images" 86 if r.IndexURL() != expected { 87 t.Fatalf("URL does not match expected:%s got:%s", expected, r.IndexURL()) 88 } 89 expected = "/images/create" 90 if r.CreateURL() != expected { 91 t.Fatalf("URL does not match expected:%s got:%s", expected, r.CreateURL()) 92 } 93 expected = "/images/99/update" 94 if r.UpdateURL() != expected { 95 t.Fatalf("URL does not match expected:%s got:%s", expected, r.UpdateURL()) 96 } 97 expected = "/images/99" 98 if r.ShowURL() != expected { 99 t.Fatalf("URL does not match expected:%s got:%s", expected, r.ShowURL()) 100 } 101 expected = "/images/99/destroy" 102 if r.DestroyURL() != expected { 103 t.Fatalf("URL does not match expected:%s got:%s", expected, r.DestroyURL()) 104 } 105 106 }