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:
committed by
Florent Vilmart
parent
af55cd1efb
commit
151bea25ee
37
spec/SchemaCache.spec.js
Normal file
37
spec/SchemaCache.spec.js
Normal 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();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user