@featurevisor/sdk 0.9.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/index.js +1 -1
- package/dist/index.js.gz +0 -0
- package/dist/index.js.map +1 -1
- package/lib/client.d.ts +3 -0
- package/lib/client.js +23 -8
- package/lib/client.js.map +1 -1
- package/lib/createInstance.d.ts +12 -1
- package/lib/createInstance.js +72 -15
- package/lib/createInstance.js.map +1 -1
- package/lib/createInstance.spec.d.ts +1 -0
- package/package.json +3 -3
- package/src/client.ts +31 -9
- package/src/createInstance.spec.ts +138 -0
- package/src/createInstance.ts +106 -23
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAU,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/lib/createInstance.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DatafileContent } from "@featurevisor/types";
|
|
1
|
+
import { DatafileContent, Attributes } from "@featurevisor/types";
|
|
2
2
|
import { FeaturevisorSDK, ConfigureBucketValue, ActivationCallback } from "./client";
|
|
3
3
|
import { Logger } from "./logger";
|
|
4
4
|
export type ReadyCallback = () => void;
|
|
@@ -10,6 +10,10 @@ export interface InstanceOptions {
|
|
|
10
10
|
onReady?: ReadyCallback;
|
|
11
11
|
handleDatafileFetch?: (datafileUrl: string) => Promise<DatafileContent>;
|
|
12
12
|
logger?: Logger;
|
|
13
|
+
interceptAttributes?: (attributes: Attributes) => Attributes;
|
|
14
|
+
refreshInterval?: number;
|
|
15
|
+
onRefresh?: () => void;
|
|
16
|
+
onUpdate?: () => void;
|
|
13
17
|
}
|
|
14
18
|
export interface FeaturevisorInstance {
|
|
15
19
|
/**
|
|
@@ -32,5 +36,12 @@ export interface FeaturevisorInstance {
|
|
|
32
36
|
getVariableString: FeaturevisorSDK["getVariableString"];
|
|
33
37
|
getVariableArray: FeaturevisorSDK["getVariableArray"];
|
|
34
38
|
getVariableObject: FeaturevisorSDK["getVariableObject"];
|
|
39
|
+
/**
|
|
40
|
+
* Additions
|
|
41
|
+
*/
|
|
42
|
+
setLogLevels: Logger["setLevels"];
|
|
43
|
+
refresh: () => void;
|
|
44
|
+
startRefreshing: () => void;
|
|
45
|
+
stopRefreshing: () => void;
|
|
35
46
|
}
|
|
36
47
|
export declare function createInstance(options: InstanceOptions): FeaturevisorInstance;
|
package/lib/createInstance.js
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import { FeaturevisorSDK } from "./client";
|
|
2
2
|
import { createLogger } from "./logger";
|
|
3
|
-
function
|
|
4
|
-
|
|
3
|
+
function fetchDatafileContent(datafileUrl, options) {
|
|
4
|
+
if (options.handleDatafileFetch) {
|
|
5
|
+
return options.handleDatafileFetch(datafileUrl);
|
|
6
|
+
}
|
|
7
|
+
return fetch(datafileUrl).then(function (res) { return res.json(); });
|
|
8
|
+
}
|
|
9
|
+
function getInstanceFromSdk(sdk, options, logger) {
|
|
10
|
+
var intervalId;
|
|
11
|
+
var refreshInProgress = false;
|
|
12
|
+
var instance = {
|
|
5
13
|
// variation
|
|
6
14
|
getVariation: sdk.getVariation.bind(sdk),
|
|
7
15
|
getVariationBoolean: sdk.getVariationBoolean.bind(sdk),
|
|
@@ -23,11 +31,61 @@ function getInstanceFromSdk(sdk, options) {
|
|
|
23
31
|
getVariableArray: sdk.getVariableArray.bind(sdk),
|
|
24
32
|
getVariableObject: sdk.getVariableObject.bind(sdk),
|
|
25
33
|
// additions
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
setLogLevels: logger.setLevels.bind(logger),
|
|
35
|
+
refresh: function () {
|
|
36
|
+
logger.debug("refreshing datafile");
|
|
37
|
+
if (refreshInProgress) {
|
|
38
|
+
return logger.warn("refresh in progress, skipping");
|
|
39
|
+
}
|
|
40
|
+
if (!options.datafileUrl) {
|
|
41
|
+
return logger.error("cannot refresh since `datafileUrl` is not provided");
|
|
42
|
+
}
|
|
43
|
+
refreshInProgress = true;
|
|
44
|
+
fetchDatafileContent(options.datafileUrl, options)
|
|
45
|
+
.then(function (datafile) {
|
|
46
|
+
var currentRevision = sdk.getRevision();
|
|
47
|
+
var newRevision = datafile.revision;
|
|
48
|
+
var isNotSameRevision = currentRevision !== newRevision;
|
|
49
|
+
sdk.setDatafile(datafile);
|
|
50
|
+
logger.info("refreshed datafile");
|
|
51
|
+
if (typeof options.onRefresh === "function") {
|
|
52
|
+
options.onRefresh();
|
|
53
|
+
}
|
|
54
|
+
if (isNotSameRevision && typeof options.onUpdate === "function") {
|
|
55
|
+
options.onUpdate();
|
|
56
|
+
}
|
|
57
|
+
refreshInProgress = false;
|
|
58
|
+
})
|
|
59
|
+
.catch(function (e) {
|
|
60
|
+
logger.error("failed to refresh datafile", { error: e });
|
|
61
|
+
refreshInProgress = false;
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
startRefreshing: function () {
|
|
65
|
+
if (!options.datafileUrl) {
|
|
66
|
+
return logger.error("cannot start refreshing since `datafileUrl` is not provided");
|
|
67
|
+
}
|
|
68
|
+
if (intervalId) {
|
|
69
|
+
return logger.warn("refreshing has already started");
|
|
70
|
+
}
|
|
71
|
+
if (!options.refreshInterval) {
|
|
72
|
+
return logger.warn("no `refreshInterval` option provided");
|
|
73
|
+
}
|
|
74
|
+
intervalId = setInterval(function () {
|
|
75
|
+
instance.refresh();
|
|
76
|
+
}, options.refreshInterval * 1000);
|
|
77
|
+
},
|
|
78
|
+
stopRefreshing: function () {
|
|
79
|
+
if (!intervalId) {
|
|
80
|
+
return logger.warn("refreshing has not started yet");
|
|
81
|
+
}
|
|
82
|
+
clearInterval(intervalId);
|
|
83
|
+
},
|
|
30
84
|
};
|
|
85
|
+
if (options.datafileUrl && options.refreshInterval) {
|
|
86
|
+
instance.startRefreshing();
|
|
87
|
+
}
|
|
88
|
+
return instance;
|
|
31
89
|
}
|
|
32
90
|
var emptyDatafile = {
|
|
33
91
|
schemaVersion: "1",
|
|
@@ -36,17 +94,14 @@ var emptyDatafile = {
|
|
|
36
94
|
segments: [],
|
|
37
95
|
features: [],
|
|
38
96
|
};
|
|
39
|
-
function fetchDatafileContent(datafileUrl, options) {
|
|
40
|
-
if (options.handleDatafileFetch) {
|
|
41
|
-
return options.handleDatafileFetch(datafileUrl);
|
|
42
|
-
}
|
|
43
|
-
return fetch(datafileUrl).then(function (res) { return res.json(); });
|
|
44
|
-
}
|
|
45
97
|
export function createInstance(options) {
|
|
46
98
|
if (!options.datafile && !options.datafileUrl) {
|
|
47
99
|
throw new Error("Featurevisor SDK instance cannot be created without both `datafile` and `datafileUrl` options");
|
|
48
100
|
}
|
|
49
101
|
var logger = options.logger || createLogger();
|
|
102
|
+
if (!options.datafileUrl && options.refreshInterval) {
|
|
103
|
+
logger.warn("refreshing datafile requires `datafileUrl` option");
|
|
104
|
+
}
|
|
50
105
|
// datafile content is already provided
|
|
51
106
|
if (options.datafile) {
|
|
52
107
|
var sdk_1 = new FeaturevisorSDK({
|
|
@@ -54,6 +109,7 @@ export function createInstance(options) {
|
|
|
54
109
|
onActivation: options.onActivation,
|
|
55
110
|
configureBucketValue: options.configureBucketValue,
|
|
56
111
|
logger: logger,
|
|
112
|
+
interceptAttributes: options.interceptAttributes,
|
|
57
113
|
});
|
|
58
114
|
if (typeof options.onReady === "function") {
|
|
59
115
|
var onReady_1 = options.onReady;
|
|
@@ -61,7 +117,7 @@ export function createInstance(options) {
|
|
|
61
117
|
onReady_1();
|
|
62
118
|
}, 0);
|
|
63
119
|
}
|
|
64
|
-
return getInstanceFromSdk(sdk_1, options);
|
|
120
|
+
return getInstanceFromSdk(sdk_1, options, logger);
|
|
65
121
|
}
|
|
66
122
|
// datafile has to be fetched
|
|
67
123
|
var sdk = new FeaturevisorSDK({
|
|
@@ -69,6 +125,7 @@ export function createInstance(options) {
|
|
|
69
125
|
onActivation: options.onActivation,
|
|
70
126
|
configureBucketValue: options.configureBucketValue,
|
|
71
127
|
logger: logger,
|
|
128
|
+
interceptAttributes: options.interceptAttributes,
|
|
72
129
|
});
|
|
73
130
|
if (options.datafileUrl) {
|
|
74
131
|
fetchDatafileContent(options.datafileUrl, options)
|
|
@@ -79,10 +136,10 @@ export function createInstance(options) {
|
|
|
79
136
|
}
|
|
80
137
|
})
|
|
81
138
|
.catch(function (e) {
|
|
82
|
-
|
|
139
|
+
logger.error("failed to fetch datafile:");
|
|
83
140
|
console.error(e);
|
|
84
141
|
});
|
|
85
142
|
}
|
|
86
|
-
return getInstanceFromSdk(sdk, options);
|
|
143
|
+
return getInstanceFromSdk(sdk, options, logger);
|
|
87
144
|
}
|
|
88
145
|
//# sourceMappingURL=createInstance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createInstance.js","sourceRoot":"","sources":["../src/createInstance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAA4C,MAAM,UAAU,CAAC;AACrF,OAAO,EAAE,YAAY,EAAU,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"createInstance.js","sourceRoot":"","sources":["../src/createInstance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@featurevisor/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Featurevisor SDK for Node.js and the browser",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "lib/index.js",
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
},
|
|
43
43
|
"license": "MIT",
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@featurevisor/types": "^0.
|
|
45
|
+
"@featurevisor/types": "^0.10.0",
|
|
46
46
|
"murmurhash": "^2.0.1",
|
|
47
47
|
"semver": "^7.3.8"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "feeb5ef30b9e5e97067b295ed22c669e11c310b5"
|
|
50
50
|
}
|
package/src/client.ts
CHANGED
|
@@ -33,7 +33,8 @@ export interface SdkOptions {
|
|
|
33
33
|
datafile: DatafileContent | string;
|
|
34
34
|
onActivation?: ActivationCallback; // @TODO: move it to FeaturevisorInstance in next breaking semver
|
|
35
35
|
configureBucketValue?: ConfigureBucketValue;
|
|
36
|
-
logger?: Logger; // TODO: keep it in FeaturevisorInstance only in next breaking semver
|
|
36
|
+
logger?: Logger; // @TODO: keep it in FeaturevisorInstance only in next breaking semver
|
|
37
|
+
interceptAttributes?: (attributes: Attributes) => Attributes; // @TODO: move it to FeaturevisorInstance in next breaking semver
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
type FieldType = VariationType | VariableType;
|
|
@@ -70,6 +71,7 @@ export class FeaturevisorSDK {
|
|
|
70
71
|
private datafileReader: DatafileReader;
|
|
71
72
|
private configureBucketValue?: ConfigureBucketValue;
|
|
72
73
|
private logger: Logger;
|
|
74
|
+
private interceptAttributes?: (attributes: Attributes) => Attributes;
|
|
73
75
|
|
|
74
76
|
constructor(options: SdkOptions) {
|
|
75
77
|
if (options.onActivation) {
|
|
@@ -82,6 +84,10 @@ export class FeaturevisorSDK {
|
|
|
82
84
|
|
|
83
85
|
this.logger = options.logger || createLogger();
|
|
84
86
|
|
|
87
|
+
if (options.interceptAttributes) {
|
|
88
|
+
this.interceptAttributes = options.interceptAttributes;
|
|
89
|
+
}
|
|
90
|
+
|
|
85
91
|
this.setDatafile(options.datafile);
|
|
86
92
|
}
|
|
87
93
|
|
|
@@ -95,6 +101,10 @@ export class FeaturevisorSDK {
|
|
|
95
101
|
}
|
|
96
102
|
}
|
|
97
103
|
|
|
104
|
+
getRevision(): string {
|
|
105
|
+
return this.datafileReader.getRevision();
|
|
106
|
+
}
|
|
107
|
+
|
|
98
108
|
private getFeature(featureKey: string | Feature): Feature | undefined {
|
|
99
109
|
return typeof featureKey === "string"
|
|
100
110
|
? this.datafileReader.getFeature(featureKey) // only key provided
|
|
@@ -143,7 +153,11 @@ export class FeaturevisorSDK {
|
|
|
143
153
|
return undefined;
|
|
144
154
|
}
|
|
145
155
|
|
|
146
|
-
const
|
|
156
|
+
const finalAttributes = this.interceptAttributes
|
|
157
|
+
? this.interceptAttributes(attributes)
|
|
158
|
+
: attributes;
|
|
159
|
+
|
|
160
|
+
const forcedVariation = getForcedVariation(feature, finalAttributes, this.datafileReader);
|
|
147
161
|
|
|
148
162
|
if (forcedVariation) {
|
|
149
163
|
this.logger.debug("forced variation found", {
|
|
@@ -154,11 +168,11 @@ export class FeaturevisorSDK {
|
|
|
154
168
|
return forcedVariation.value;
|
|
155
169
|
}
|
|
156
170
|
|
|
157
|
-
const bucketValue = this.getBucketValue(feature,
|
|
171
|
+
const bucketValue = this.getBucketValue(feature, finalAttributes);
|
|
158
172
|
|
|
159
173
|
const variation = getBucketedVariation(
|
|
160
174
|
feature,
|
|
161
|
-
|
|
175
|
+
finalAttributes,
|
|
162
176
|
bucketValue,
|
|
163
177
|
this.datafileReader,
|
|
164
178
|
this.logger,
|
|
@@ -230,6 +244,10 @@ export class FeaturevisorSDK {
|
|
|
230
244
|
}
|
|
231
245
|
|
|
232
246
|
if (this.onActivation) {
|
|
247
|
+
const finalAttributes = this.interceptAttributes
|
|
248
|
+
? this.interceptAttributes(attributes)
|
|
249
|
+
: attributes;
|
|
250
|
+
|
|
233
251
|
const captureAttributes: Attributes = {};
|
|
234
252
|
|
|
235
253
|
const attributesForCapturing = this.datafileReader
|
|
@@ -237,12 +255,12 @@ export class FeaturevisorSDK {
|
|
|
237
255
|
.filter((a) => a.capture === true);
|
|
238
256
|
|
|
239
257
|
attributesForCapturing.forEach((a) => {
|
|
240
|
-
if (typeof
|
|
258
|
+
if (typeof finalAttributes[a.key] !== "undefined") {
|
|
241
259
|
captureAttributes[a.key] = attributes[a.key];
|
|
242
260
|
}
|
|
243
261
|
});
|
|
244
262
|
|
|
245
|
-
this.onActivation(featureKey, variationValue,
|
|
263
|
+
this.onActivation(featureKey, variationValue, finalAttributes, captureAttributes);
|
|
246
264
|
}
|
|
247
265
|
|
|
248
266
|
return variationValue;
|
|
@@ -305,10 +323,14 @@ export class FeaturevisorSDK {
|
|
|
305
323
|
return undefined;
|
|
306
324
|
}
|
|
307
325
|
|
|
326
|
+
const finalAttributes = this.interceptAttributes
|
|
327
|
+
? this.interceptAttributes(attributes)
|
|
328
|
+
: attributes;
|
|
329
|
+
|
|
308
330
|
const forcedVariableValue = getForcedVariableValue(
|
|
309
331
|
feature,
|
|
310
332
|
variableSchema,
|
|
311
|
-
|
|
333
|
+
finalAttributes,
|
|
312
334
|
this.datafileReader,
|
|
313
335
|
);
|
|
314
336
|
|
|
@@ -318,12 +340,12 @@ export class FeaturevisorSDK {
|
|
|
318
340
|
return forcedVariableValue;
|
|
319
341
|
}
|
|
320
342
|
|
|
321
|
-
const bucketValue = this.getBucketValue(feature,
|
|
343
|
+
const bucketValue = this.getBucketValue(feature, finalAttributes);
|
|
322
344
|
|
|
323
345
|
return getBucketedVariableValue(
|
|
324
346
|
feature,
|
|
325
347
|
variableSchema,
|
|
326
|
-
|
|
348
|
+
finalAttributes,
|
|
327
349
|
bucketValue,
|
|
328
350
|
this.datafileReader,
|
|
329
351
|
this.logger,
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { DatafileContent } from "@featurevisor/types";
|
|
2
|
+
|
|
3
|
+
import { createInstance } from "./createInstance";
|
|
4
|
+
|
|
5
|
+
describe("sdk: createInstance", function () {
|
|
6
|
+
it("should be a function", function () {
|
|
7
|
+
expect(typeof createInstance).toEqual("function");
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it("should create instance with datafile content", function () {
|
|
11
|
+
const sdk = createInstance({
|
|
12
|
+
datafile: {
|
|
13
|
+
schemaVersion: "1",
|
|
14
|
+
revision: "1.0",
|
|
15
|
+
features: [],
|
|
16
|
+
attributes: [],
|
|
17
|
+
segments: [],
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
expect(typeof sdk.getVariation).toEqual("function");
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("should intercept attributes", function () {
|
|
25
|
+
let intercepted = false;
|
|
26
|
+
|
|
27
|
+
const sdk = createInstance({
|
|
28
|
+
datafile: {
|
|
29
|
+
schemaVersion: "1",
|
|
30
|
+
revision: "1.0",
|
|
31
|
+
features: [
|
|
32
|
+
{
|
|
33
|
+
key: "test",
|
|
34
|
+
defaultVariation: false,
|
|
35
|
+
bucketBy: "userId",
|
|
36
|
+
variations: [
|
|
37
|
+
{ type: "boolean", value: true },
|
|
38
|
+
{ type: "boolean", value: false },
|
|
39
|
+
],
|
|
40
|
+
traffic: [
|
|
41
|
+
{
|
|
42
|
+
key: "1",
|
|
43
|
+
segments: "*",
|
|
44
|
+
percentage: 100000,
|
|
45
|
+
allocation: [
|
|
46
|
+
{ variation: true, percentage: 100000 },
|
|
47
|
+
{ variation: false, percentage: 0 },
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
attributes: [],
|
|
54
|
+
segments: [],
|
|
55
|
+
},
|
|
56
|
+
interceptAttributes: function (attributes) {
|
|
57
|
+
intercepted = true;
|
|
58
|
+
|
|
59
|
+
return {
|
|
60
|
+
...attributes,
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const variation = sdk.getVariation("test", {
|
|
66
|
+
userId: "123",
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
expect(variation).toEqual(true);
|
|
70
|
+
expect(intercepted).toEqual(true);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("should refresh datafile", function (done) {
|
|
74
|
+
let revision = 1;
|
|
75
|
+
let refreshed = false;
|
|
76
|
+
let updated = false;
|
|
77
|
+
|
|
78
|
+
function getDatafileContent(): DatafileContent {
|
|
79
|
+
const content: DatafileContent = {
|
|
80
|
+
schemaVersion: "1",
|
|
81
|
+
revision: revision.toString(),
|
|
82
|
+
features: [
|
|
83
|
+
{
|
|
84
|
+
key: "test",
|
|
85
|
+
defaultVariation: false,
|
|
86
|
+
bucketBy: "userId",
|
|
87
|
+
variations: [
|
|
88
|
+
{ type: "boolean", value: true },
|
|
89
|
+
{ type: "boolean", value: false },
|
|
90
|
+
],
|
|
91
|
+
traffic: [
|
|
92
|
+
{
|
|
93
|
+
key: "1",
|
|
94
|
+
segments: "*",
|
|
95
|
+
percentage: 100000,
|
|
96
|
+
allocation: [
|
|
97
|
+
{ variation: true, percentage: 100000 },
|
|
98
|
+
{ variation: false, percentage: 0 },
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
attributes: [],
|
|
105
|
+
segments: [],
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
revision += 1;
|
|
109
|
+
|
|
110
|
+
return content;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const sdk = createInstance({
|
|
114
|
+
datafileUrl: "http://localhost:3000/datafile.json",
|
|
115
|
+
handleDatafileFetch: function (datafileUrl) {
|
|
116
|
+
return new Promise(function (resolve, reject) {
|
|
117
|
+
resolve(getDatafileContent());
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
refreshInterval: 0.1,
|
|
121
|
+
onRefresh() {
|
|
122
|
+
refreshed = true;
|
|
123
|
+
},
|
|
124
|
+
onUpdate() {
|
|
125
|
+
updated = true;
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
setTimeout(function () {
|
|
130
|
+
expect(refreshed).toEqual(true);
|
|
131
|
+
expect(updated).toEqual(true);
|
|
132
|
+
|
|
133
|
+
sdk.stopRefreshing();
|
|
134
|
+
|
|
135
|
+
done();
|
|
136
|
+
}, 200);
|
|
137
|
+
});
|
|
138
|
+
});
|