avocado/packages/resource/test/resource.js

75 lines
2.3 KiB
JavaScript
Raw Normal View History

2021-01-02 22:01:57 -06:00
import {assert, expect} from 'chai';
import merge from 'deepmerge';
import {validate} from 'uuid';
import Resource from '../src/resource';
import JsonResource from '../src/json-resource';
Resource.root = 'test/fixtures';
JsonResource.root = 'test/fixtures';
class ResourceSubclass extends Resource {
constructor(buffer) {
super();
this.buffer = buffer;
}
}
class JsonResourceSubclass extends JsonResource {
constructor(json) {
super();
this.json = json;
}
}
const testJsonBuffer = Buffer.from([
0x7b, 0x0a, 0x20, 0x20, 0x22, 0x66, 0x6f, 0x6f,
0x22, 0x3a, 0x20, 0x22, 0x62, 0x61, 0x72, 0x22,
0x2c, 0x0a, 0x20, 0x20, 0x22, 0x62, 0x61, 0x7a,
0x22, 0x3a, 0x20, 0x36, 0x39, 0x0a, 0x7d, 0x0a,
]);
describe('@avocado/resource', () => {
describe('Resource', () => {
it("can read resources", async () => {
const buffer = await Resource.read('/test.json');
2021-01-05 03:39:05 -06:00
expect(Buffer.compare(testJsonBuffer, Buffer.from(buffer))).to.equal(0);
2021-01-02 22:01:57 -06:00
});
it("generates unique uuids", async () => {
const resources = [
new Resource(),
new Resource(),
];
expect(resources[0].instanceUuid).to.not.equal(resources[1].instanceUuid);
assert(validate(resources[0].instanceUuid));
assert(validate(resources[1].instanceUuid));
});
it("can be subclassed", async () => {
const resource = await ResourceSubclass.load('/test.json');
2021-01-05 03:39:05 -06:00
expect(Buffer.compare(testJsonBuffer, Buffer.from(resource.buffer))).to.equal(0);
2021-01-02 22:01:57 -06:00
});
});
describe('JsonResource', () => {
it("can read resources", async () => {
const json = await JsonResource.read('/test.json');
expect(json.foo).to.equal('bar');
expect(json.baz).to.equal(69);
});
it("can read extended resources", async () => {
const json = await JsonResource.read('/test2.json');
expect(json.foo).to.equal('baz');
expect(json.baz).to.equal(69);
});
it("can be subclassed", async () => {
const resource = await JsonResourceSubclass.load({extends: '/test.json'});
expect(resource.json.foo).to.equal('bar');
expect(resource.json.baz).to.equal(69);
});
it("can load flat", async () => {
const resource = await JsonResourceSubclass.load({foo: 420, bar: 'hoo'});
expect(resource.json.foo).to.equal(420);
expect(resource.json.bar).to.equal('hoo');
});
});
});