sdk-javascript/test/cloudevent_spec_0_1.js

122 lines
3.4 KiB
JavaScript

var expect = require("chai").expect;
var Cloudevent = require("../index.js");
const type = "com.github.pull.create01";
const source = "urn:event:from:myapi/resourse/01";
const time = new Date();
const schemaurl = "http://example.com/registry/v01/myschema.json";
const contenttype = "application/json";
const data = {};
const extensions = {};
var cloudevent = new Cloudevent()
.type(type)
.source(source);
describe("CloudEvents Spec 0.1 - JavaScript SDK", () => {
describe("Object properties", () => {
describe("Attribute getters", () => {
it("returns 'type'", () => {
expect(cloudevent.getType()).to.equal(type);
});
it("returns 'source'", () => {
expect(cloudevent.getSource()).to.equal(source);
});
});
});
describe("JSON Format", () => {
describe("Required context attributes", () => {
it("requires 'eventType'", () => {
expect(cloudevent.format()).to.have.property("eventType");
});
it("requires 'eventTypeVersion'", () => {
cloudevent.eventTypeVersion("1.0");
expect(cloudevent.format()).to.have.property("eventTypeVersion");
});
it("requires 'cloudEventsVersion'", () => {
expect(cloudevent.format()).to.have.property("cloudEventsVersion");
});
it("requires 'source'", () => {
expect(cloudevent.format()).to.have.property("source");
});
it("requires 'eventID'", () => {
expect(cloudevent.format()).to.have.property("eventID");
});
});
describe("Optional context attributes", () => {
it("contains 'eventTime'", () => {
cloudevent.time(time);
expect(cloudevent.format()).to.have.property("eventTime");
});
it("contains 'schemaURL'", () => {
cloudevent.schemaurl(schemaurl);
expect(cloudevent.format()).to.have.property("schemaURL");
});
it("contains 'contentType'", () => {
cloudevent.contenttype(contenttype);
expect(cloudevent.format()).to.have.property("contentType");
});
it("contains 'data'", () => {
cloudevent.data(data);
expect(cloudevent.format()).to.have.property("data");
});
it("contains 'extensions'", () => {
cloudevent.addExtension("foo", "value");
expect(cloudevent.format()).to.have.property("extensions");
});
it("'extensions' should have 'bar' extension", () => {
cloudevent.addExtension("bar", "value");
expect(cloudevent.format().extensions)
.to.have.property("foo");
});
});
describe("The Constraints check", () => {
describe("'eventType'", () => {
it("should throw an error when is an empty string", () => {
cloudevent.type("");
expect(cloudevent.format.bind(cloudevent))
.to
.throw("'eventType' is invalid");
});
it("must be a non-empty string", () => {
cloudevent.type(type);
cloudevent.format();
});
it("should be prefixed with a reverse-DNS name", () => {
//TODO how to assert it?
});
});
//TODO another attributes . . .
describe("'eventTime'", () => {
it("must adhere to the format specified in RFC 3339", () => {
cloudevent.time(time);
expect(cloudevent.format()["eventTime"]).to.equal(time.toISOString());
});
});
});
});
});