-
Notifications
You must be signed in to change notification settings - Fork 4
/
testUtilities.ts
65 lines (58 loc) · 2.04 KB
/
testUtilities.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { ComponentStore } from "./ComponentStore";
import { createStore } from "./createStore";
import { LinkedDataAPI } from "./LinkedDataAPI";
import { LinkedRenderStore } from "./LinkedRenderStore";
import { DataProcessor } from "./processor/DataProcessor";
import { RDFStore } from "./RDFStore";
import { Schema } from "./Schema";
import {
DataProcessorOpts,
Indexable,
LinkedRenderStoreOptions,
MiddlewareActionHandler,
} from "./types";
export type BasicComponent = () => string | undefined;
export class ComponentStoreTestProxy<T> extends ComponentStore<T> {
public publicLookup(predicate: Indexable,
obj: Indexable,
topology: Indexable): T | undefined {
return this.lookup(predicate, obj, topology);
}
}
export interface ExplodedLRS<T> {
api: LinkedDataAPI;
apiOpts: Partial<DataProcessorOpts>;
dispatch: MiddlewareActionHandler;
forceBroadcast: () => Promise<void>;
processor: DataProcessor;
lrs: LinkedRenderStore<T>;
mapping: ComponentStoreTestProxy<T>;
store: RDFStore;
schema: Schema;
}
export type GetBasicStoreOpts = Partial<ExplodedLRS<BasicComponent>>;
export const getBasicStore = (opts: GetBasicStoreOpts = {}): ExplodedLRS<BasicComponent> => {
const report = (e: Error): void => { throw e; };
const store = opts.store || new RDFStore();
const processor = opts.processor || new DataProcessor({ report, store, ...opts.apiOpts });
const api = opts.api || processor;
const schema = opts.schema || new Schema(store);
const mapping = opts.mapping || new ComponentStoreTestProxy<BasicComponent>(schema);
const conf = {
api,
mapping,
report,
schema,
store,
} as LinkedRenderStoreOptions<BasicComponent>;
const lrs = createStore(conf);
return {
dispatch: lrs.dispatch,
forceBroadcast: (): Promise<void> => (lrs as any).broadcast(false, 0),
lrs,
mapping,
processor,
schema,
store,
} as ExplodedLRS<BasicComponent>;
};