1// Copyright 2015 go-swagger maintainers 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package errors 16 17import ( 18 "errors" 19 "fmt" 20 "testing" 21 22 "github.com/stretchr/testify/assert" 23) 24 25func TestSchemaErrors(t *testing.T) { 26 err := InvalidType("confirmed", "query", "boolean", nil) 27 assert.Error(t, err) 28 assert.EqualValues(t, InvalidTypeCode, err.Code()) 29 assert.Equal(t, "confirmed in query must be of type boolean", err.Error()) 30 31 err = InvalidType("confirmed", "", "boolean", nil) 32 assert.Error(t, err) 33 assert.EqualValues(t, InvalidTypeCode, err.Code()) 34 assert.Equal(t, "confirmed must be of type boolean", err.Error()) 35 36 err = InvalidType("confirmed", "query", "boolean", "hello") 37 assert.Error(t, err) 38 assert.EqualValues(t, InvalidTypeCode, err.Code()) 39 assert.Equal(t, "confirmed in query must be of type boolean: \"hello\"", err.Error()) 40 41 err = InvalidType("confirmed", "query", "boolean", errors.New("hello")) 42 assert.Error(t, err) 43 assert.EqualValues(t, InvalidTypeCode, err.Code()) 44 assert.Equal(t, "confirmed in query must be of type boolean, because: hello", err.Error()) 45 46 err = InvalidType("confirmed", "", "boolean", "hello") 47 assert.Error(t, err) 48 assert.EqualValues(t, InvalidTypeCode, err.Code()) 49 assert.Equal(t, "confirmed must be of type boolean: \"hello\"", err.Error()) 50 51 err = InvalidType("confirmed", "", "boolean", errors.New("hello")) 52 assert.Error(t, err) 53 assert.EqualValues(t, InvalidTypeCode, err.Code()) 54 assert.Equal(t, "confirmed must be of type boolean, because: hello", err.Error()) 55 56 err = DuplicateItems("uniques", "query") 57 assert.Error(t, err) 58 assert.EqualValues(t, UniqueFailCode, err.Code()) 59 assert.Equal(t, "uniques in query shouldn't contain duplicates", err.Error()) 60 61 err = DuplicateItems("uniques", "") 62 assert.Error(t, err) 63 assert.EqualValues(t, UniqueFailCode, err.Code()) 64 assert.Equal(t, "uniques shouldn't contain duplicates", err.Error()) 65 66 err = TooManyItems("something", "query", 5) 67 assert.Error(t, err) 68 assert.EqualValues(t, MaxItemsFailCode, err.Code()) 69 assert.Equal(t, "something in query should have at most 5 items", err.Error()) 70 71 err = TooManyItems("something", "", 5) 72 assert.Error(t, err) 73 assert.EqualValues(t, MaxItemsFailCode, err.Code()) 74 assert.Equal(t, "something should have at most 5 items", err.Error()) 75 76 err = TooFewItems("something", "", 5) 77 assert.Error(t, err) 78 assert.EqualValues(t, MinItemsFailCode, err.Code()) 79 assert.Equal(t, "something should have at least 5 items", err.Error()) 80 81 err = ExceedsMaximumInt("something", "query", 5, false) 82 assert.Error(t, err) 83 assert.EqualValues(t, MaxFailCode, err.Code()) 84 assert.Equal(t, "something in query should be less than or equal to 5", err.Error()) 85 86 err = ExceedsMaximumInt("something", "", 5, false) 87 assert.Error(t, err) 88 assert.EqualValues(t, MaxFailCode, err.Code()) 89 assert.Equal(t, "something should be less than or equal to 5", err.Error()) 90 91 err = ExceedsMaximumInt("something", "query", 5, true) 92 assert.Error(t, err) 93 assert.EqualValues(t, MaxFailCode, err.Code()) 94 assert.Equal(t, "something in query should be less than 5", err.Error()) 95 96 err = ExceedsMaximumInt("something", "", 5, true) 97 assert.Error(t, err) 98 assert.EqualValues(t, MaxFailCode, err.Code()) 99 assert.Equal(t, "something should be less than 5", err.Error()) 100 101 err = ExceedsMaximumUint("something", "query", 5, false) 102 assert.Error(t, err) 103 assert.EqualValues(t, MaxFailCode, err.Code()) 104 assert.Equal(t, "something in query should be less than or equal to 5", err.Error()) 105 106 err = ExceedsMaximumUint("something", "", 5, false) 107 assert.Error(t, err) 108 assert.EqualValues(t, MaxFailCode, err.Code()) 109 assert.Equal(t, "something should be less than or equal to 5", err.Error()) 110 111 err = ExceedsMaximumUint("something", "query", 5, true) 112 assert.Error(t, err) 113 assert.EqualValues(t, MaxFailCode, err.Code()) 114 assert.Equal(t, "something in query should be less than 5", err.Error()) 115 116 err = ExceedsMaximumUint("something", "", 5, true) 117 assert.Error(t, err) 118 assert.EqualValues(t, MaxFailCode, err.Code()) 119 assert.Equal(t, "something should be less than 5", err.Error()) 120 121 err = ExceedsMaximum("something", "query", 5, false) 122 assert.Error(t, err) 123 assert.EqualValues(t, MaxFailCode, err.Code()) 124 assert.Equal(t, "something in query should be less than or equal to 5", err.Error()) 125 126 err = ExceedsMaximum("something", "", 5, false) 127 assert.Error(t, err) 128 assert.EqualValues(t, MaxFailCode, err.Code()) 129 assert.Equal(t, "something should be less than or equal to 5", err.Error()) 130 131 err = ExceedsMaximum("something", "query", 5, true) 132 assert.Error(t, err) 133 assert.EqualValues(t, MaxFailCode, err.Code()) 134 assert.Equal(t, "something in query should be less than 5", err.Error()) 135 136 err = ExceedsMaximum("something", "", 5, true) 137 assert.Error(t, err) 138 assert.EqualValues(t, MaxFailCode, err.Code()) 139 assert.Equal(t, "something should be less than 5", err.Error()) 140 141 err = ExceedsMinimumInt("something", "query", 5, false) 142 assert.Error(t, err) 143 assert.EqualValues(t, MinFailCode, err.Code()) 144 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error()) 145 146 err = ExceedsMinimumInt("something", "", 5, false) 147 assert.Error(t, err) 148 assert.EqualValues(t, MinFailCode, err.Code()) 149 assert.Equal(t, "something should be greater than or equal to 5", err.Error()) 150 151 err = ExceedsMinimumInt("something", "query", 5, true) 152 assert.Error(t, err) 153 assert.EqualValues(t, MinFailCode, err.Code()) 154 assert.Equal(t, "something in query should be greater than 5", err.Error()) 155 156 err = ExceedsMinimumInt("something", "", 5, true) 157 assert.Error(t, err) 158 assert.EqualValues(t, MinFailCode, err.Code()) 159 assert.Equal(t, "something should be greater than 5", err.Error()) 160 161 err = ExceedsMinimumUint("something", "query", 5, false) 162 assert.Error(t, err) 163 assert.EqualValues(t, MinFailCode, err.Code()) 164 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error()) 165 166 err = ExceedsMinimumUint("something", "", 5, false) 167 assert.Error(t, err) 168 assert.EqualValues(t, MinFailCode, err.Code()) 169 assert.Equal(t, "something should be greater than or equal to 5", err.Error()) 170 171 err = ExceedsMinimumUint("something", "query", 5, true) 172 assert.Error(t, err) 173 assert.EqualValues(t, MinFailCode, err.Code()) 174 assert.Equal(t, "something in query should be greater than 5", err.Error()) 175 176 err = ExceedsMinimumUint("something", "", 5, true) 177 assert.Error(t, err) 178 assert.EqualValues(t, MinFailCode, err.Code()) 179 assert.Equal(t, "something should be greater than 5", err.Error()) 180 181 err = ExceedsMinimum("something", "query", 5, false) 182 assert.Error(t, err) 183 assert.EqualValues(t, MinFailCode, err.Code()) 184 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error()) 185 186 err = ExceedsMinimum("something", "", 5, false) 187 assert.Error(t, err) 188 assert.EqualValues(t, MinFailCode, err.Code()) 189 assert.Equal(t, "something should be greater than or equal to 5", err.Error()) 190 191 err = ExceedsMinimum("something", "query", 5, true) 192 assert.Error(t, err) 193 assert.EqualValues(t, MinFailCode, err.Code()) 194 assert.Equal(t, "something in query should be greater than 5", err.Error()) 195 196 err = ExceedsMinimum("something", "", 5, true) 197 assert.Error(t, err) 198 assert.EqualValues(t, MinFailCode, err.Code()) 199 assert.Equal(t, "something should be greater than 5", err.Error()) 200 201 err = NotMultipleOf("something", "query", 5) 202 assert.Error(t, err) 203 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 204 assert.Equal(t, "something in query should be a multiple of 5", err.Error()) 205 206 err = NotMultipleOf("something", "query", float64(5)) 207 assert.Error(t, err) 208 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 209 assert.Equal(t, "something in query should be a multiple of 5", err.Error()) 210 211 err = NotMultipleOf("something", "query", uint64(5)) 212 assert.Error(t, err) 213 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 214 assert.Equal(t, "something in query should be a multiple of 5", err.Error()) 215 216 err = NotMultipleOf("something", "", 5) 217 assert.Error(t, err) 218 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 219 assert.Equal(t, "something should be a multiple of 5", err.Error()) 220 221 err = EnumFail("something", "query", "yada", []interface{}{"hello", "world"}) 222 assert.Error(t, err) 223 assert.EqualValues(t, EnumFailCode, err.Code()) 224 assert.Equal(t, "something in query should be one of [hello world]", err.Error()) 225 226 err = EnumFail("something", "", "yada", []interface{}{"hello", "world"}) 227 assert.Error(t, err) 228 assert.EqualValues(t, EnumFailCode, err.Code()) 229 assert.Equal(t, "something should be one of [hello world]", err.Error()) 230 231 err = Required("something", "query") 232 assert.Error(t, err) 233 assert.EqualValues(t, RequiredFailCode, err.Code()) 234 assert.Equal(t, "something in query is required", err.Error()) 235 236 err = Required("something", "") 237 assert.Error(t, err) 238 assert.EqualValues(t, RequiredFailCode, err.Code()) 239 assert.Equal(t, "something is required", err.Error()) 240 241 err = TooLong("something", "query", 5) 242 assert.Error(t, err) 243 assert.EqualValues(t, TooLongFailCode, err.Code()) 244 assert.Equal(t, "something in query should be at most 5 chars long", err.Error()) 245 246 err = TooLong("something", "", 5) 247 assert.Error(t, err) 248 assert.EqualValues(t, TooLongFailCode, err.Code()) 249 assert.Equal(t, "something should be at most 5 chars long", err.Error()) 250 251 err = TooShort("something", "query", 5) 252 assert.Error(t, err) 253 assert.EqualValues(t, TooShortFailCode, err.Code()) 254 assert.Equal(t, "something in query should be at least 5 chars long", err.Error()) 255 256 err = TooShort("something", "", 5) 257 assert.Error(t, err) 258 assert.EqualValues(t, TooShortFailCode, err.Code()) 259 assert.Equal(t, "something should be at least 5 chars long", err.Error()) 260 261 err = FailedPattern("something", "query", "\\d+") 262 assert.Error(t, err) 263 assert.EqualValues(t, PatternFailCode, err.Code()) 264 assert.Equal(t, "something in query should match '\\d+'", err.Error()) 265 266 err = FailedPattern("something", "", "\\d+") 267 assert.Error(t, err) 268 assert.EqualValues(t, PatternFailCode, err.Code()) 269 assert.Equal(t, "something should match '\\d+'", err.Error()) 270 271 err = InvalidTypeName("something") 272 assert.Error(t, err) 273 assert.EqualValues(t, InvalidTypeCode, err.Code()) 274 assert.Equal(t, "something is an invalid type name", err.Error()) 275 276 err = AdditionalItemsNotAllowed("something", "query") 277 assert.Error(t, err) 278 assert.EqualValues(t, NoAdditionalItemsCode, err.Code()) 279 assert.Equal(t, "something in query can't have additional items", err.Error()) 280 281 err = AdditionalItemsNotAllowed("something", "") 282 assert.Error(t, err) 283 assert.EqualValues(t, NoAdditionalItemsCode, err.Code()) 284 assert.Equal(t, "something can't have additional items", err.Error()) 285 286 err = InvalidCollectionFormat("something", "query", "yada") 287 assert.Error(t, err) 288 assert.EqualValues(t, InvalidTypeCode, err.Code()) 289 assert.Equal(t, "the collection format \"yada\" is not supported for the query param \"something\"", err.Error()) 290 291 err2 := CompositeValidationError() 292 assert.Error(t, err2) 293 assert.EqualValues(t, CompositeErrorCode, err2.Code()) 294 assert.Equal(t, "validation failure list", err2.Error()) 295 296 err2 = CompositeValidationError(fmt.Errorf("first error"), fmt.Errorf("second error")) 297 assert.Error(t, err2) 298 assert.EqualValues(t, CompositeErrorCode, err2.Code()) 299 assert.Equal(t, "validation failure list:\nfirst error\nsecond error", err2.Error()) 300 301 //func MultipleOfMustBePositive(name, in string, factor interface{}) *Validation { 302 err = MultipleOfMustBePositive("path", "body", float64(-10)) 303 assert.Error(t, err) 304 assert.EqualValues(t, MultipleOfMustBePositiveCode, err.Code()) 305 assert.Equal(t, `factor MultipleOf declared for path must be positive: -10`, err.Error()) 306 307 err = MultipleOfMustBePositive("path", "body", int64(-10)) 308 assert.Error(t, err) 309 assert.EqualValues(t, MultipleOfMustBePositiveCode, err.Code()) 310 assert.Equal(t, `factor MultipleOf declared for path must be positive: -10`, err.Error()) 311 312 // func PropertyNotAllowed(name, in, key string) *Validation { 313 err = PropertyNotAllowed("path", "body", "key") 314 assert.Error(t, err) 315 assert.EqualValues(t, UnallowedPropertyCode, err.Code()) 316 //unallowedProperty = "%s.%s in %s is a forbidden property" 317 assert.Equal(t, "path.key in body is a forbidden property", err.Error()) 318 319 err = PropertyNotAllowed("path", "", "key") 320 assert.Error(t, err) 321 assert.EqualValues(t, UnallowedPropertyCode, err.Code()) 322 //unallowedPropertyNoIn = "%s.%s is a forbidden property" 323 assert.Equal(t, "path.key is a forbidden property", err.Error()) 324 325 //func TooManyProperties(name, in string, n int64) *Validation { 326 err = TooManyProperties("path", "body", 10) 327 assert.Error(t, err) 328 assert.EqualValues(t, TooManyPropertiesCode, err.Code()) 329 //tooManyProperties = "%s in %s should have at most %d properties" 330 assert.Equal(t, "path in body should have at most 10 properties", err.Error()) 331 332 err = TooManyProperties("path", "", 10) 333 assert.Error(t, err) 334 assert.EqualValues(t, TooManyPropertiesCode, err.Code()) 335 //tooManyPropertiesNoIn = "%s should have at most %d properties" 336 assert.Equal(t, "path should have at most 10 properties", err.Error()) 337 338 err = TooFewProperties("path", "body", 10) 339 // func TooFewProperties(name, in string, n int64) *Validation { 340 assert.Error(t, err) 341 assert.EqualValues(t, TooFewPropertiesCode, err.Code()) 342 //tooFewProperties = "%s in %s should have at least %d properties" 343 assert.Equal(t, "path in body should have at least 10 properties", err.Error()) 344 345 err = TooFewProperties("path", "", 10) 346 // func TooFewProperties(name, in string, n int64) *Validation { 347 assert.Error(t, err) 348 assert.EqualValues(t, TooFewPropertiesCode, err.Code()) 349 //tooFewPropertiesNoIn = "%s should have at least %d properties" 350 assert.Equal(t, "path should have at least 10 properties", err.Error()) 351 352 //func FailedAllPatternProperties(name, in, key string) *Validation { 353 err = FailedAllPatternProperties("path", "body", "key") 354 assert.Error(t, err) 355 assert.EqualValues(t, FailedAllPatternPropsCode, err.Code()) 356 //failedAllPatternProps = "%s.%s in %s failed all pattern properties" 357 assert.Equal(t, "path.key in body failed all pattern properties", err.Error()) 358 359 err = FailedAllPatternProperties("path", "", "key") 360 assert.Error(t, err) 361 assert.EqualValues(t, FailedAllPatternPropsCode, err.Code()) 362 //failedAllPatternPropsNoIn = "%s.%s failed all pattern properties" 363 assert.Equal(t, "path.key failed all pattern properties", err.Error()) 364} 365