Try to retrieve schema from all schemas cache if not found in individual cache (#2912)

* Try to get schema from main schema if not found in single schema

* Add newline

* Add missing return

* Add missing done to tests
This commit is contained in:
Steven Shipton
2016-10-23 16:59:39 +01:00
committed by Florent Vilmart
parent af55cd1efb
commit 151bea25ee
2 changed files with 52 additions and 1 deletions

37
spec/SchemaCache.spec.js Normal file
View File

@@ -0,0 +1,37 @@
var CacheController = require('../src/Controllers/CacheController.js').default;
var InMemoryCacheAdapter = require('../src/Adapters/Cache/InMemoryCacheAdapter').default;
var SchemaCache = require('../src/Controllers/SchemaCache').default;
describe('SchemaCache', () => {
var schemaCache;
beforeEach(() => {
var cacheAdapter = new InMemoryCacheAdapter({});
var cacheController = new CacheController(cacheAdapter, 'appId');
schemaCache = new SchemaCache(cacheController);
});
it('can retrieve a single schema after all schemas stored', (done) => {
var allSchemas = [{
className: 'Class1'
}, {
className: 'Class2'
}];
schemaCache.setAllClasses(allSchemas);
schemaCache.getOneSchema('Class2').then((schema) => {
expect(schema).not.toBeNull();
done();
});
});
it('does not return all schemas after a single schema is stored', (done) => {
var schema = {
className: 'Class1'
};
schemaCache.setOneSchema('Class1', schema);
schemaCache.getAllClasses().then((allSchemas) => {
expect(allSchemas).toBeNull();
done();
});
});
});

View File

@@ -50,7 +50,21 @@ export default class SchemaCache {
if (!this.ttl) { if (!this.ttl) {
return Promise.resolve(null); return Promise.resolve(null);
} }
return this.cache.get(this.prefix+className); return this.cache.get(this.prefix+className).then((schema) => {
if (schema) {
return Promise.resolve(schema);
}
return this.cache.get(this.prefix+MAIN_SCHEMA).then((cachedSchemas) => {
cachedSchemas = cachedSchemas || [];
schema = cachedSchemas.find((cachedSchema) => {
return cachedSchema.className === className;
});
if (schema) {
return Promise.resolve(schema);
}
return Promise.resolve(null);
});
});
} }
clear() { clear() {