Something went wrong. Try again.
An ATProto Lexicon validator for Gleam.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217import gleam/jsonimport gleeunitimport gleeunit/shouldimport honk/validation/contextimport honk/validation/primitive/string
pub fn main() { gleeunit.main()}
// Test valid string schemapub fn valid_string_schema_test() { let schema = json.object([ #("type", json.string("string")), #("minLength", json.int(1)), #("maxLength", json.int(100)), ])
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_schema(schema, ctx) result |> should.be_ok}
// Test string schema with formatpub fn string_with_format_test() { let schema = json.object([ #("type", json.string("string")), #("format", json.string("uri")), ])
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_schema(schema, ctx) result |> should.be_ok}
// Test string schema with enumpub fn string_with_enum_test() { let schema = json.object([ #("type", json.string("string")), #( "enum", json.array( [json.string("red"), json.string("green"), json.string("blue")], fn(x) { x }, ), ), ])
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_schema(schema, ctx) result |> should.be_ok}
// Test invalid string schema (minLength > maxLength)pub fn invalid_length_constraints_test() { let schema = json.object([ #("type", json.string("string")), #("minLength", json.int(100)), #("maxLength", json.int(10)), ])
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_schema(schema, ctx) result |> should.be_error}
// Test valid string datapub fn valid_string_data_test() { let schema = json.object([ #("type", json.string("string")), #("minLength", json.int(1)), #("maxLength", json.int(10)), ])
let data = json.string("hello")
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_data(data, schema, ctx) result |> should.be_ok}
// Test string data below minLengthpub fn string_below_min_length_test() { let schema = json.object([ #("type", json.string("string")), #("minLength", json.int(10)), ])
let data = json.string("short")
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_data(data, schema, ctx) result |> should.be_error}
// Test string data above maxLengthpub fn string_above_max_length_test() { let schema = json.object([ #("type", json.string("string")), #("maxLength", json.int(5)), ])
let data = json.string("this is too long")
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_data(data, schema, ctx) result |> should.be_error}
// Test string data with enum validationpub fn string_enum_valid_test() { let schema = json.object([ #("type", json.string("string")), #( "enum", json.array([json.string("red"), json.string("blue")], fn(x) { x }), ), ])
let data = json.string("red")
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_data(data, schema, ctx) result |> should.be_ok}
// Test string data with enum validation (invalid value)pub fn string_enum_invalid_test() { let schema = json.object([ #("type", json.string("string")), #( "enum", json.array([json.string("red"), json.string("blue")], fn(x) { x }), ), ])
let data = json.string("green")
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_data(data, schema, ctx) result |> should.be_error}
// Test wrong type (number instead of string)pub fn wrong_type_test() { let schema = json.object([#("type", json.string("string"))])
let data = json.int(42)
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_data(data, schema, ctx) result |> should.be_error}
// ========== NEGATIVE VALUE SCHEMA VALIDATION TESTS ==========
// Test invalid string schema with negative minLengthpub fn invalid_negative_min_length_test() { let schema = json.object([ #("type", json.string("string")), #("minLength", json.int(-1)), ])
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_schema(schema, ctx) result |> should.be_error}
// Test invalid string schema with negative maxLengthpub fn invalid_negative_max_length_test() { let schema = json.object([ #("type", json.string("string")), #("maxLength", json.int(-5)), ])
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_schema(schema, ctx) result |> should.be_error}
// Test invalid string schema with negative minGraphemespub fn invalid_negative_min_graphemes_test() { let schema = json.object([ #("type", json.string("string")), #("minGraphemes", json.int(-10)), ])
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_schema(schema, ctx) result |> should.be_error}
// Test invalid string schema with negative maxGraphemespub fn invalid_negative_max_graphemes_test() { let schema = json.object([ #("type", json.string("string")), #("maxGraphemes", json.int(-3)), ])
let assert Ok(ctx) = context.builder() |> context.build let result = string.validate_schema(schema, ctx) result |> should.be_error}