An ATProto Lexicon validator for Gleam.
at main 3.3 kB view raw
1import gleam/json 2import gleeunit 3import gleeunit/should 4import honk/validation/context 5import honk/validation/meta/token 6 7pub fn main() { 8 gleeunit.main() 9} 10 11// ========== SCHEMA VALIDATION TESTS ========== 12 13pub fn valid_token_schema_test() { 14 let schema = json.object([#("type", json.string("token"))]) 15 16 let assert Ok(ctx) = context.builder() |> context.build 17 18 token.validate_schema(schema, ctx) |> should.be_ok 19} 20 21pub fn valid_token_schema_with_description_test() { 22 let schema = 23 json.object([ 24 #("type", json.string("token")), 25 #("description", json.string("A token for discrimination")), 26 ]) 27 28 let assert Ok(ctx) = context.builder() |> context.build 29 30 token.validate_schema(schema, ctx) |> should.be_ok 31} 32 33pub fn invalid_token_schema_extra_fields_test() { 34 let schema = 35 json.object([ 36 #("type", json.string("token")), 37 #("extraField", json.string("not allowed")), 38 ]) 39 40 let assert Ok(ctx) = context.builder() |> context.build 41 42 token.validate_schema(schema, ctx) |> should.be_error 43} 44 45// ========== DATA VALIDATION TESTS ========== 46 47pub fn valid_token_data_simple_string_test() { 48 let schema = json.object([#("type", json.string("token"))]) 49 let data = json.string("example.lexicon.record#demoToken") 50 51 let assert Ok(ctx) = context.builder() |> context.build 52 53 token.validate_data(data, schema, ctx) |> should.be_ok 54} 55 56pub fn valid_token_data_local_ref_test() { 57 let schema = json.object([#("type", json.string("token"))]) 58 let data = json.string("#myToken") 59 60 let assert Ok(ctx) = context.builder() |> context.build 61 62 token.validate_data(data, schema, ctx) |> should.be_ok 63} 64 65pub fn invalid_token_data_empty_string_test() { 66 let schema = json.object([#("type", json.string("token"))]) 67 let data = json.string("") 68 69 let assert Ok(ctx) = context.builder() |> context.build 70 71 token.validate_data(data, schema, ctx) |> should.be_error 72} 73 74pub fn invalid_token_data_integer_test() { 75 let schema = json.object([#("type", json.string("token"))]) 76 let data = json.int(123) 77 78 let assert Ok(ctx) = context.builder() |> context.build 79 80 token.validate_data(data, schema, ctx) |> should.be_error 81} 82 83pub fn invalid_token_data_boolean_test() { 84 let schema = json.object([#("type", json.string("token"))]) 85 let data = json.bool(True) 86 87 let assert Ok(ctx) = context.builder() |> context.build 88 89 token.validate_data(data, schema, ctx) |> should.be_error 90} 91 92pub fn invalid_token_data_object_test() { 93 let schema = json.object([#("type", json.string("token"))]) 94 let data = json.object([#("token", json.string("value"))]) 95 96 let assert Ok(ctx) = context.builder() |> context.build 97 98 token.validate_data(data, schema, ctx) |> should.be_error 99} 100 101pub fn invalid_token_data_array_test() { 102 let schema = json.object([#("type", json.string("token"))]) 103 let data = 104 json.preprocessed_array([json.string("token1"), json.string("token2")]) 105 106 let assert Ok(ctx) = context.builder() |> context.build 107 108 token.validate_data(data, schema, ctx) |> should.be_error 109} 110 111pub fn invalid_token_data_null_test() { 112 let schema = json.object([#("type", json.string("token"))]) 113 let data = json.null() 114 115 let assert Ok(ctx) = context.builder() |> context.build 116 117 token.validate_data(data, schema, ctx) |> should.be_error 118}