Something went wrong. Try again.
An ATProto Lexicon validator for Gleam.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180import gleam/jsonimport gleeunitimport gleeunit/shouldimport honk/validation/contextimport honk/validation/field
pub fn main() { gleeunit.main()}
// Test valid array schema with string itemspub fn valid_string_array_schema_test() { let schema = json.object([ #("type", json.string("array")), #("items", json.object([#("type", json.string("string"))])), #("minLength", json.int(1)), #("maxLength", json.int(10)), ])
let assert Ok(ctx) = context.builder() |> context.build let result = field.validate_array_schema(schema, ctx) result |> should.be_ok}
// Test array schema with object itemspub fn array_with_object_items_test() { let schema = json.object([ #("type", json.string("array")), #( "items", json.object([ #("type", json.string("object")), #( "properties", json.object([ #("name", json.object([#("type", json.string("string"))])), ]), ), ]), ), ])
let assert Ok(ctx) = context.builder() |> context.build let result = field.validate_array_schema(schema, ctx) result |> should.be_ok}
// Test array schema with nested array itemspub fn nested_array_schema_test() { let schema = json.object([ #("type", json.string("array")), #( "items", json.object([ #("type", json.string("array")), #("items", json.object([#("type", json.string("integer"))])), ]), ), ])
let assert Ok(ctx) = context.builder() |> context.build let result = field.validate_array_schema(schema, ctx) result |> should.be_ok}
// Test array schema missing items fieldpub fn missing_items_field_test() { let schema = json.object([ #("type", json.string("array")), #("maxLength", json.int(10)), ])
let assert Ok(ctx) = context.builder() |> context.build let result = field.validate_array_schema(schema, ctx) result |> should.be_error}
// Test array schema with invalid length constraintspub fn invalid_length_constraints_test() { let schema = json.object([ #("type", json.string("array")), #("items", json.object([#("type", json.string("string"))])), #("minLength", json.int(10)), #("maxLength", json.int(5)), ])
let assert Ok(ctx) = context.builder() |> context.build let result = field.validate_array_schema(schema, ctx) result |> should.be_error}
// Test valid array datapub fn valid_array_data_test() { let schema = json.object([ #("type", json.string("array")), #("items", json.object([#("type", json.string("string"))])), #("minLength", json.int(1)), #("maxLength", json.int(5)), ])
let data = json.array([json.string("hello"), json.string("world")], fn(x) { x })
let assert Ok(ctx) = context.builder() |> context.build let result = field.validate_array_data(data, schema, ctx) result |> should.be_ok}
// Test array data below minLengthpub fn array_below_min_length_test() { let schema = json.object([ #("type", json.string("array")), #("items", json.object([#("type", json.string("string"))])), #("minLength", json.int(3)), ])
let data = json.array([json.string("hello")], fn(x) { x })
let assert Ok(ctx) = context.builder() |> context.build let result = field.validate_array_data(data, schema, ctx) result |> should.be_error}
// Test array data above maxLengthpub fn array_above_max_length_test() { let schema = json.object([ #("type", json.string("array")), #("items", json.object([#("type", json.string("string"))])), #("maxLength", json.int(2)), ])
let data = json.array([json.string("a"), json.string("b"), json.string("c")], fn(x) { x })
let assert Ok(ctx) = context.builder() |> context.build let result = field.validate_array_data(data, schema, ctx) result |> should.be_error}
// Test array data with invalid item typepub fn invalid_item_type_test() { let schema = json.object([ #("type", json.string("array")), #("items", json.object([#("type", json.string("string"))])), ])
let data = json.array([json.string("hello"), json.int(42)], fn(x) { x })
let assert Ok(ctx) = context.builder() |> context.build let result = field.validate_array_data(data, schema, ctx) result |> should.be_error}
// Test empty array with minLengthpub fn empty_array_with_min_length_test() { let schema = json.object([ #("type", json.string("array")), #("items", json.object([#("type", json.string("string"))])), #("minLength", json.int(1)), ])
let data = json.array([], fn(x) { x })
let assert Ok(ctx) = context.builder() |> context.build let result = field.validate_array_data(data, schema, ctx) result |> should.be_error}