84 lines
3.1 KiB
JavaScript
84 lines
3.1 KiB
JavaScript
import ObjectAPI from './ObjectAPI.js';
|
|
|
|
describe("The Object API", () => {
|
|
let objectAPI;
|
|
let mockDomainObject;
|
|
const TEST_NAMESPACE = "test-namespace";
|
|
const FIFTEEN_MINUTES = 15 * 60 * 1000;
|
|
|
|
beforeEach(() => {
|
|
objectAPI = new ObjectAPI();
|
|
mockDomainObject = {
|
|
identifier: {
|
|
namespace: TEST_NAMESPACE,
|
|
key: "test-key"
|
|
},
|
|
name: "test object",
|
|
type: "test-type"
|
|
};
|
|
});
|
|
describe("The save function", () => {
|
|
it("Rejects if no provider available", () => {
|
|
let rejected = false;
|
|
|
|
return objectAPI.save(mockDomainObject)
|
|
.catch(() => rejected = true)
|
|
.then(() => expect(rejected).toBe(true));
|
|
});
|
|
describe("when a provider is available", () => {
|
|
let mockProvider;
|
|
beforeEach(() => {
|
|
mockProvider = jasmine.createSpyObj("mock provider", [
|
|
"create",
|
|
"update"
|
|
]);
|
|
mockProvider.create.and.returnValue(Promise.resolve(true));
|
|
objectAPI.addProvider(TEST_NAMESPACE, mockProvider);
|
|
});
|
|
it("Calls 'create' on provider if object is new", () => {
|
|
objectAPI.save(mockDomainObject);
|
|
expect(mockProvider.create).toHaveBeenCalled();
|
|
expect(mockProvider.update).not.toHaveBeenCalled();
|
|
});
|
|
it("Calls 'update' on provider if object is not new", () => {
|
|
mockDomainObject.persisted = Date.now() - FIFTEEN_MINUTES;
|
|
mockDomainObject.modified = Date.now();
|
|
|
|
objectAPI.save(mockDomainObject);
|
|
expect(mockProvider.create).not.toHaveBeenCalled();
|
|
expect(mockProvider.update).toHaveBeenCalled();
|
|
});
|
|
|
|
it("Does not persist if the object is unchanged", () => {
|
|
mockDomainObject.persisted =
|
|
mockDomainObject.modified = Date.now();
|
|
|
|
objectAPI.save(mockDomainObject);
|
|
expect(mockProvider.create).not.toHaveBeenCalled();
|
|
expect(mockProvider.update).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("The get function", () => {
|
|
describe("when a provider is available", () => {
|
|
let mockProvider;
|
|
beforeEach(() => {
|
|
mockProvider = jasmine.createSpyObj("mock provider", [
|
|
"get"
|
|
]);
|
|
mockProvider.get.and.returnValue(Promise.resolve(mockDomainObject));
|
|
objectAPI.addProvider(TEST_NAMESPACE, mockProvider);
|
|
});
|
|
|
|
it("Caches multiple requests for the same object", () => {
|
|
expect(mockProvider.get.calls.count()).toBe(0);
|
|
objectAPI.get(mockDomainObject.identifier);
|
|
expect(mockProvider.get.calls.count()).toBe(1);
|
|
objectAPI.get(mockDomainObject.identifier);
|
|
expect(mockProvider.get.calls.count()).toBe(1);
|
|
});
|
|
});
|
|
});
|
|
});
|