Skip to content

Commit

Permalink
fix: ensure that event data can be an array, number, boolean or null (#…
Browse files Browse the repository at this point in the history
…281)

The schema incorrectly limits data values to only object and string. This is
incorrect, since JSON can be an array, boolean, a single number or null as well.

This commit modifies the schema to allow for array, boolean and null, and adds
tests.

Fixes: #280

Signed-off-by: Lance Ball <lball@redhat.com>
  • Loading branch information
lance authored Jul 29, 2020
1 parent c76dda6 commit b99f728
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/event/schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export const schemaV1 = {
type: "string",
},
data: {
type: ["object", "string"],
type: ["object", "string", "array", "number", "boolean", "null"],
},
data_base64: {
type: "string",
Expand Down Expand Up @@ -89,7 +89,7 @@ export const schemaV03 = {
type: "string",
},
data: {
type: ["object", "string"],
type: ["object", "string", "array", "number", "boolean", "null"],
},
event: {
properties: {
Expand Down
32 changes: 32 additions & 0 deletions test/integration/cloud_event_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,38 @@ describe("A 1.0 CloudEvent", () => {
expect(ce.data).to.deep.equal({ lunch: "tacos" });
});

it("can be constructed with data as an Array", () => {
const ce = new CloudEvent({
...fixture,
data: [{ lunch: "tacos" }, { supper: "sushi" }],
});
expect(ce.data).to.deep.equal([{ lunch: "tacos" }, { supper: "sushi" }]);
});

it("can be constructed with data as a number", () => {
const ce = new CloudEvent({
...fixture,
data: 100,
});
expect(ce.data).to.equal(100);
});

it("can be constructed with null data", () => {
const ce = new CloudEvent({
...fixture,
data: null,
});
expect(ce.data).to.equal(null);
});

it("can be constructed with data as a boolean", () => {
const ce = new CloudEvent({
...fixture,
data: true,
});
expect(ce.data).to.be.true;
});

it("can be constructed with extensions", () => {
const extensions = {
extensionkey: "extension-value",
Expand Down

0 comments on commit b99f728

Please sign in to comment.