test/index.html
<head>
<link rel="stylesheet" href="./../node_modules/mocha/mocha.css" />
</head>
<body>
<div id="mocha"></div>
<script src="./../node_modules/mocha/mocha.js"></script>
<script>
mocha.setup('bdd');
</script>
<script src="./../dist/chakram.js"></script>
<script>
expect = chakram.expect;
describe("Dweet API", function() {
var namedDweetPost, initialDweetData, specifiedThingName;
before("Initialize a new dweet thing for the tests", function () {
specifiedThingName = 'chakram-test-thing';
initialDweetData = {
description: "test sending a string",
sensorValue: 0.2222,
alert: true
};
namedDweetPost = chakram.post("https://dweet.io/dweet/for/"+specifiedThingName, initialDweetData);
});
it("should return 200 on success", function () {
return expect(namedDweetPost).to.have.status(200);
});
it("should specify success in the response 'this' field", function () {
return expect(namedDweetPost).to.have.json('this', 'succeeded');
});
it("should respond with the created dweet's data", function () {
return expect(namedDweetPost).to.have.json('with.content', initialDweetData);
});
it("should use a dweet thing name if provided", function () {
return expect(namedDweetPost).to.have.json('with.thing', specifiedThingName);
});
it("should allow retrieval of the last data point", function () {
var dataRetrieval = chakram.get("https://dweet.io/get/latest/dweet/for/"+specifiedThingName);
return expect(dataRetrieval).to.have.json('with[0].content', initialDweetData);
});
it("should respond with data matching the dweet schema", function () {
var expectedSchema = {
type: "object",
properties: {
this: {type: "string"},
by: {type: "string"},
the: {type: "string"},
with: {
type: "object",
properties: {
thing: {type: "string"},
created: {type: "string"},
content: {type: "object"}
},
required: ["thing", "created", "content"]
}
},
required: ["this", "by", "the", "with"]
};
return expect(namedDweetPost).to.have.schema(expectedSchema);
});
describe("anonymous thing name", function () {
var generatedThingName, anonymousDweetPost;
before(function () {
anonymousDweetPost = chakram.post("https://dweet.io/dweet", initialDweetData);
return anonymousDweetPost.then(function(respObj) {
generatedThingName = respObj.body.with.thing;
});
});
it("should succeed without a specified thing name, generating a random dweet thing name", function () {
expect(anonymousDweetPost).to.have.status(200);
expect(anonymousDweetPost).to.have.json('this', 'succeeded');
return chakram.wait();
});
it("should allow data retrieval using the generated thing name", function () {
var data = chakram.get("https://dweet.io/get/latest/dweet/for/"+generatedThingName);
return expect(data).to.have.json('with', function (dweetArray) {
expect(dweetArray).to.have.length(1);
var dweet = dweetArray[0];
expect(dweet.content).to.deep.equal(initialDweetData);
expect(dweet.thing).to.equal(generatedThingName);
});
});
});
});
</script>
<script>
mocha.run();
</script>
</body>