| 7 | |
| 8 | #[test] |
| 9 | fn test_enum_validation_query_parameter() { |
| 10 | let yaml_content = r#" |
| 11 | openapi: 3.0.0 |
| 12 | info: |
| 13 | title: Test API |
| 14 | version: 1.0.0 |
| 15 | paths: |
| 16 | /test: |
| 17 | get: |
| 18 | parameters: |
| 19 | - name: status |
| 20 | in: query |
| 21 | required: true |
| 22 | schema: |
| 23 | type: string |
| 24 | enum: ["active", "inactive", "pending"] |
| 25 | - name: priority |
| 26 | in: query |
| 27 | required: false |
| 28 | enum: [1, 2, 3] |
| 29 | components: {} |
| 30 | "#; |
| 31 | |
| 32 | let open_api: OpenAPI = serde_yaml::from_str(yaml_content).unwrap(); |
| 33 | |
| 34 | let mut valid_query = HashMap::new(); |
| 35 | valid_query.insert("status".to_string(), "active".to_string()); |
| 36 | valid_query.insert("priority".to_string(), "2".to_string()); |
| 37 | |
| 38 | let result = query("/test", &valid_query, &open_api); |
| 39 | if let Err(ref e) = result { |
| 40 | println!("Error message: {}", e); |
| 41 | } |
| 42 | assert!(result.is_ok(), "Valid enum values should pass validation"); |
| 43 | |
| 44 | let mut invalid_query = HashMap::new(); |
| 45 | invalid_query.insert("status".to_string(), "unknown".to_string()); |
| 46 | |
| 47 | let result = query("/test", &invalid_query, &open_api); |
| 48 | assert!(result.is_err(), "Invalid enum values should be rejected"); |
| 49 | |
| 50 | let error_msg = result.unwrap_err().to_string(); |
| 51 | assert!( |
| 52 | error_msg.contains("not in allowed enum values"), |
| 53 | "Error message should contain enum validation hint" |
| 54 | ); |
| 55 | assert!( |
| 56 | error_msg.contains("active"), |
| 57 | "Error message should show allowed enum values" |
| 58 | ); |
| 59 | } |
| 60 | |
| 61 | #[test] |
| 62 | fn test_enum_validation_with_different_types() { |