-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path_configurable_responses_test.js
More file actions
121 lines (92 loc) · 2.63 KB
/
_configurable_responses_test.js
File metadata and controls
121 lines (92 loc) · 2.63 KB
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Copyright Titanium I.T. LLC.
import * as ensure from "util/ensure.js";
import * as type from "util/type.js";
import assert from "util/assert.js";
import { ConfigurableResponses } from "util/configurable_responses.js";
describe("ConfigurableResponses", () => {
describe("object factory", () => {
it("converts object into configured responses", () => {
const responses = ConfigurableResponses.mapObject({
a: 1,
b: 2,
}, "my_name");
assert.deepEqual(responses, {
a: ConfigurableResponses.create(1, "my_name: a"),
b: ConfigurableResponses.create(2, "my_name: b"),
});
});
it("doesn't add name if it isn't provided", () => {
const responses = ConfigurableResponses.mapObject({
a: 1,
b: 2,
});
assert.deepEqual(responses, {
a: ConfigurableResponses.create(1),
b: ConfigurableResponses.create(2),
});
});
});
describe("single response", () => {
it("provides the same response forever", () => {
const { responses } = createResponses({
configured: 7,
});
assert.equal(responses.next(), 7);
assert.equal(responses.next(), 7);
assert.equal(responses.next(), 7);
});
});
describe("list of responses", () => {
it("provides each response in the list", () => {
const { responses } = createResponses({
configured: [ 1, 2, 3 ],
});
assert.equal(responses.next(), 1);
assert.equal(responses.next(), 2);
assert.equal(responses.next(), 3);
});
it("doesn't mutate original list", () => {
const originalList = [ 1, 2, 3 ];
const { responses } = createResponses({ configured: originalList });
responses.next();
assert.deepEqual(originalList, [ 1, 2, 3 ]);
});
it("throws error when list runs out", () => {
const { responses } = createResponses({
configured: [],
name: "my_name",
});
assert.throws(
() => responses.next(),
"No more responses configured in my_name",
);
});
it("doesn't include name if it isn't defined", () => {
const { responses } = createResponses({
configured: [],
});
assert.throws(
() => responses.next(),
"No more responses configured",
);
});
it("isn't affected by original list being mutated", () => {
const originalList = [ 1, 2, 3 ];
const { responses } = createResponses({ configured: originalList });
originalList.push("X");
assert.equal(responses.next(), 1);
});
});
});
function createResponses({
configured = [],
name = undefined,
} = {}) {
ensure.signature(arguments, [[ undefined, {
configured: [ undefined, ...type.ANY_VALID ],
name: [ undefined, String ],
}]]);
return {
responses: new ConfigurableResponses(configured, name),
};
}