/
fake-feature-tag-store.ts
96 lines (82 loc) · 2.66 KB
/
fake-feature-tag-store.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { ITag } from '../../lib/types/model';
import {
IFeatureAndTag,
IFeatureTag,
IFeatureTagStore,
} from '../../lib/types/stores/feature-tag-store';
export default class FakeFeatureTagStore implements IFeatureTagStore {
private featureTags: IFeatureTag[] = [];
async getAllTagsForFeature(featureName: string): Promise<ITag[]> {
const tags = this.featureTags
.filter((f) => f.featureName === featureName)
.map((f) => ({
type: f.tagType,
value: f.tagValue,
}));
return Promise.resolve(tags);
}
async delete(key: IFeatureTag): Promise<void> {
this.featureTags.splice(
this.featureTags.findIndex((t) => t === key),
1,
);
}
destroy(): void {}
async exists(key: IFeatureTag): Promise<boolean> {
return this.featureTags.some((t) => t === key);
}
async get(key: IFeatureTag): Promise<IFeatureTag> {
return this.featureTags.find((t) => t === key);
}
async getAll(): Promise<IFeatureTag[]> {
return this.featureTags;
}
async tagFeature(featureName: string, tag: ITag): Promise<ITag> {
this.featureTags.push({
featureName,
tagType: tag.type,
tagValue: tag.value,
});
return Promise.resolve(tag);
}
async getAllFeatureTags(): Promise<IFeatureTag[]> {
return Promise.resolve(this.featureTags);
}
async deleteAll(): Promise<void> {
this.featureTags = [];
return Promise.resolve();
}
async importFeatureTags(
featureTags: IFeatureTag[],
): Promise<IFeatureAndTag[]> {
return Promise.all(
featureTags.map(async (fT) => {
const saved = await this.tagFeature(fT.featureName, {
value: fT.tagValue,
type: fT.tagType,
});
return {
featureName: fT.featureName,
tag: saved,
};
}),
);
}
async untagFeature(featureName: string, tag: ITag): Promise<void> {
this.featureTags = this.featureTags.filter((fT) => {
if (fT.featureName === featureName) {
return !(fT.tagType === tag.type && fT.tagValue === tag.value);
}
return true;
});
return Promise.resolve();
}
getAllByFeatures(features: string[]): Promise<IFeatureTag[]> {
return Promise.resolve(
this.featureTags.filter((tag) =>
features.includes(tag.featureName),
),
);
}
}
module.exports = FakeFeatureTagStore;