Something went wrong. Try again.
An ATProto Lexicon validator for Gleam.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232import gleam/jsonimport gleeunitimport gleeunit/shouldimport honk/validation/contextimport honk/validation/primary/query
pub fn main() { gleeunit.main()}
// Test valid query parameterspub fn valid_query_parameters_test() { let schema = json.object([ #("type", json.string("query")), #( "parameters", json.object([ #("type", json.string("params")), #( "properties", json.object([ #( "limit", json.object([ #("type", json.string("integer")), #("minimum", json.int(1)), #("maximum", json.int(100)), ]), ), #("cursor", json.object([#("type", json.string("string"))])), ]), ), ]), ), ])
let data = json.object([#("limit", json.int(50)), #("cursor", json.string("abc123"))])
let assert Ok(ctx) = context.builder() |> context.build() query.validate_data(data, schema, ctx) |> should.be_ok}
// Test query with required parameterpub fn valid_query_with_required_test() { let schema = json.object([ #("type", json.string("query")), #( "parameters", json.object([ #("type", json.string("params")), #( "properties", json.object([ #("repo", json.object([#("type", json.string("string"))])), ]), ), #("required", json.array([json.string("repo")], fn(x) { x })), ]), ), ])
let data = json.object([#("repo", json.string("did:plc:abc123"))])
let assert Ok(ctx) = context.builder() |> context.build() query.validate_data(data, schema, ctx) |> should.be_ok}
// Test invalid: missing required parameterpub fn invalid_query_missing_required_test() { let schema = json.object([ #("type", json.string("query")), #( "parameters", json.object([ #("type", json.string("params")), #( "properties", json.object([ #("repo", json.object([#("type", json.string("string"))])), #("collection", json.object([#("type", json.string("string"))])), ]), ), #("required", json.array([json.string("repo")], fn(x) { x })), ]), ), ])
let data = json.object([#("collection", json.string("app.bsky.feed.post"))])
let assert Ok(ctx) = context.builder() |> context.build() query.validate_data(data, schema, ctx) |> should.be_error}
// Test invalid: wrong parameter typepub fn invalid_query_wrong_type_test() { let schema = json.object([ #("type", json.string("query")), #( "parameters", json.object([ #("type", json.string("params")), #( "properties", json.object([ #( "limit", json.object([ #("type", json.string("integer")), #("minimum", json.int(1)), ]), ), ]), ), ]), ), ])
let data = json.object([#("limit", json.string("not-a-number"))])
let assert Ok(ctx) = context.builder() |> context.build() query.validate_data(data, schema, ctx) |> should.be_error}
// Test invalid: data not an objectpub fn invalid_query_not_object_test() { let schema = json.object([ #("type", json.string("query")), #( "parameters", json.object([ #("type", json.string("params")), #("properties", json.object([])), ]), ), ])
let data = json.array([], fn(x) { x })
let assert Ok(ctx) = context.builder() |> context.build() query.validate_data(data, schema, ctx) |> should.be_error}
// Test parameter constraint violationpub fn invalid_query_constraint_violation_test() { let schema = json.object([ #("type", json.string("query")), #( "parameters", json.object([ #("type", json.string("params")), #( "properties", json.object([ #( "limit", json.object([ #("type", json.string("integer")), #("maximum", json.int(100)), ]), ), ]), ), ]), ), ])
let data = json.object([#("limit", json.int(200))])
let assert Ok(ctx) = context.builder() |> context.build() query.validate_data(data, schema, ctx) |> should.be_error}
// Test array parameterpub fn valid_query_array_parameter_test() { let schema = json.object([ #("type", json.string("query")), #( "parameters", json.object([ #("type", json.string("params")), #( "properties", json.object([ #( "tags", json.object([ #("type", json.string("array")), #( "items", json.object([ #("type", json.string("string")), #("maxLength", json.int(50)), ]), ), ]), ), ]), ), ]), ), ])
let data = json.object([ #( "tags", json.array([json.string("tag1"), json.string("tag2")], fn(x) { x }), ), ])
let assert Ok(ctx) = context.builder() |> context.build() query.validate_data(data, schema, ctx) |> should.be_ok}
// Test query with no parameterspub fn valid_query_no_parameters_test() { let schema = json.object([#("type", json.string("query"))])
let data = json.object([])
let assert Ok(ctx) = context.builder() |> context.build() query.validate_data(data, schema, ctx) |> should.be_ok}