DEV: First pass of ThemeSettingsObjectValidator (#25624)

Why this change?

This is a first pass at adding an objects validator which main's job is
to validate an object against a defined schema which we will support. In
this pass, we are simply validating that properties that has been marked
as required are present in the object.
This commit is contained in:
Alan Guo Xiang Tan
2024-02-16 09:35:16 +08:00
committed by GitHub
parent ae24e04a5e
commit 64b4e0d08d
3 changed files with 113 additions and 0 deletions
@@ -0,0 +1,72 @@
# frozen_string_literal: true
RSpec.describe ThemeSettingsObjectValidator do
describe "#validate" do
it "should return the right array of error messages when properties are required but missing" do
schema = {
name: "section",
properties: {
title: {
type: "string",
required: true,
},
description: {
type: "string",
required: true,
},
links: {
type: "objects",
schema: {
name: "link",
properties: {
name: {
type: "string",
required: true,
},
child_links: {
type: "objects",
schema: {
name: "child_link",
properties: {
title: {
type: "string",
required: true,
},
not_required: {
type: "string",
},
},
},
},
},
},
},
},
}
errors = described_class.new(schema:, object: {}).validate
expect(errors).to eq(title: ["must be present"], description: ["must be present"])
errors =
described_class.new(
schema: schema,
object: {
links: [{ child_links: [{}, {}] }, {}],
},
).validate
expect(errors).to eq(
title: ["must be present"],
description: ["must be present"],
links: [
{
name: ["must be present"],
child_links: [{ title: ["must be present"] }, { title: ["must be present"] }],
},
{ name: ["must be present"] },
],
)
end
end
end