Skip to content

Commit 245bd09

Browse files
authored
Update main_test.js
1 parent 768790b commit 245bd09

File tree

1 file changed

+51
-146
lines changed

1 file changed

+51
-146
lines changed

lab2/main_test.js

Lines changed: 51 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,163 +1,68 @@
1-
const test = require('node:test');
1+
const test = require('node:test');
22
const assert = require('assert');
3-
4-
const fs = require('fs');
5-
const util = require('util');
6-
const writeFile = util.promisify(fs.writeFile);
73
const { Application, MailSystem } = require('./main');
8-
const path = require('node:path');
9-
10-
// Mock fs.unlinkSync
11-
const originalUnlinkSync = fs.unlinkSync;
12-
fs.unlinkSync = (path) => {
13-
console.log(`Mocked unlinkSync called with path: ${path}`);
14-
};
154

16-
// Mock fs.readFileSync
17-
const originalReadFileSync = fs.readFileSync;
18-
fs.readFileSync = (path, encoding) => {
19-
console.log(`Mocked readFileSync called with path: ${path} and encoding: ${encoding}`);
20-
return "JJ\nEE\nRR\nYY";
21-
};
22-
23-
test("Test MailSystem's write", () => {
24-
const ms = new MailSystem();
25-
const context = ms.write("Jerry");
26-
assert.strictEqual(context, "Congrats, Jerry!");
5+
// TODO: write your tests here
6+
// Remember to use Stub, Mock, and Spy when necessary
7+
test.mock.method(fs, 'readFile', (file, options, callback) => {
8+
callback(null, 'Guan\nChen\nGala');
279
});
2810

29-
test("Test MailSystem's send", () => {
30-
const ms = new MailSystem();
31-
const originalMathRandom = Math.random;
32-
33-
Math.random = () => 0.4;
34-
let context = ms.send("Jerry", "Test Message");
35-
assert.strictEqual(context, false);
11+
test("MailSystem write", () => {
12+
const mailSystem = new MailSystem();
13+
assert.strictEqual(mailSystem.write("Guan"), "Congrats, Guan!");
14+
});
3615

16+
test("MailSystem send", () => {
17+
const mailSystem = new MailSystem();
3718
Math.random = () => 0.6;
38-
context = ms.send("Jerry", "Test Message");
39-
assert.strictEqual(context, true);
40-
41-
Math.random = originalMathRandom;
19+
const context = mailSystem.write("Guan");
20+
assert.strictEqual(mailSystem.send("Guan", context), true);
21+
Math.random = () => 0.5;
22+
assert.strictEqual(mailSystem.send("Chen", context), false);
4223
});
4324

44-
test("Test Application's getNames", async () => {
45-
const fn_ = path.join(process.cwd(), 'name_list.txt');
46-
const data_ = "JJ\nEE\nRR\nYY";
47-
await writeFile(fn_, data_, "utf-8");
48-
49-
const app = new Application();
50-
51-
let ctx = await app.getNames();
52-
assert.deepStrictEqual(ctx[0], ["JJ", "EE", "RR", "YY"]);
53-
assert.deepStrictEqual(ctx[1], []);
54-
55-
originalUnlinkSync(fn_);
25+
test("Application getNames", async () => {
26+
const application = new Application();
27+
const [people, selected] = await application.getNames();
28+
assert.deepStrictEqual(people, ["Guan", "Chen", "Gala"]);
29+
assert.deepStrictEqual(selected, []);
5630
});
5731

58-
test("Test Application's getRandomPerson", async () => {
59-
const fn_ = path.join(process.cwd(), 'name_list.txt');
60-
const data_ = "JJ\nEE";
61-
await writeFile(fn_, data_, "utf-8");
62-
63-
const app = new Application();
64-
65-
let ctx = await app.getNames();
66-
assert.deepStrictEqual(ctx[0], ["JJ", "EE"]);
67-
assert.deepStrictEqual(ctx[1], []);
68-
69-
let rdmPeople = await app.getRandomPerson();
70-
assert.ok(app.people.includes(rdmPeople));
71-
72-
rdmPeople = await app.getRandomPerson();
73-
assert.ok(app.people.includes(rdmPeople));
74-
75-
originalUnlinkSync(fn_);
32+
test("Application getRandomPerson", () => {
33+
const application = new Application();
34+
application.people = ["Guan", "Chen", "Gala"];
35+
Math.random = () => 0;
36+
assert.deepStrictEqual(application.getRandomPerson(), "Guan");
37+
Math.random = () => 0.6;
38+
assert.deepStrictEqual(application.getRandomPerson(), "Chen");
39+
Math.random = () => 0.9;
40+
assert.deepStrictEqual(application.getRandomPerson(), "Gala");
7641
});
7742

78-
test("Test Application's selectNextPerson", async () => {
79-
const fn_ = path.join(process.cwd(), 'name_list.txt');
80-
const data_ = "JJ\nEE";
81-
await writeFile(fn_, data_, "utf-8");
82-
83-
const app = new Application();
84-
let ctx = await app.getNames();
85-
assert.deepStrictEqual(ctx[0], ["JJ", "EE"]);
86-
assert.deepStrictEqual(ctx[1], []);
87-
88-
const orgsnp = app.getRandomPerson;
89-
app.getRandomPerson = () => "JJ";
90-
let rdperson = app.selectNextPerson();
91-
assert.strictEqual(rdperson, "JJ");
92-
assert.ok(app.people.includes(rdperson));
93-
assert.ok(app.selected.includes(rdperson));
94-
assert.deepStrictEqual(app.selected, ["JJ"]);
95-
assert.strictEqual(app.selected.length, 1);
96-
97-
app.getRandomPerson = () => "EE";
98-
rdperson = app.selectNextPerson();
99-
assert.strictEqual(rdperson, "EE");
100-
assert.ok(app.people.includes(rdperson));
101-
assert.ok(app.selected.includes(rdperson));
102-
assert.deepStrictEqual(app.selected, ["JJ","EE"]);
103-
assert.strictEqual(app.selected.length, 2);
104-
105-
app.getRandomPerson = orgsnp;
106-
rdperson = app.selectNextPerson();
107-
assert.strictEqual(rdperson, null);
108-
assert.strictEqual(app.selected.length, 2);
109-
110-
let cnt = 0;
111-
app.getRandomPerson = () => {
112-
if (cnt++ % 2 === 0) {
113-
return 'JJ';
114-
} else {
115-
return 'EE';
43+
test("Application selectNextPerson", async () => {
44+
const application = new Application();
45+
await application.getNames();
46+
application.selected = ["Guan"];
47+
let count = 0;
48+
test.mock.method(application, 'getRandomPerson', () => {
49+
const name_list = application.people;
50+
if (count <= name_list.length) {
51+
return name_list[count++];
11652
}
117-
}
118-
app.selected = ['JJ'];
119-
rdperson = app.selectNextPerson();
120-
assert.strictEqual(rdperson, 'EE');
121-
assert.deepStrictEqual(app.selected, ['JJ', 'EE']);
122-
originalUnlinkSync(fn_);
53+
});
54+
assert.strictEqual(application.selectNextPerson(), "Chen");
55+
assert.strictEqual(application.selectNextPerson(), "Gala");
56+
assert.strictEqual(application.selectNextPerson(), null);
12357
});
12458

125-
test("Test Application's notifySelected", async () => {
126-
const fn_ = 'name_list.txt';
127-
const data_ = "JJ\nEE";
128-
await writeFile(fn_, data_, "utf-8");
129-
130-
const app = new Application();
131-
let ctx = await app.getNames();
132-
assert.deepStrictEqual(ctx[0], ["JJ", "EE"]);
133-
assert.deepStrictEqual(ctx[1], []);
134-
135-
app.getRandomPerson = () => "JJ";
136-
let person = app.selectNextPerson();
137-
assert.strictEqual(person, "JJ");
138-
assert.deepStrictEqual(app.selected, ["JJ"]);
139-
140-
app.getRandomPerson = () => "EE";
141-
person = app.selectNextPerson();
142-
assert.strictEqual(person, "EE");
143-
assert.deepStrictEqual(app.selected, ["JJ", "EE"]);
144-
145-
test.mock.method(app.mailSystem, 'write', (name) => "Congrats, " + name + "!");
146-
test.mock.method(app.mailSystem, 'send', () => true);
147-
148-
app.notifySelected();
149-
150-
assert.strictEqual(app.mailSystem.write.mock.calls.length, 2);
151-
assert.strictEqual(app.mailSystem.send.mock.calls.length, 2);
152-
153-
let call = app.mailSystem.write.mock.calls[0];
154-
assert.deepStrictEqual(call.arguments, ["JJ"]);
155-
assert.deepStrictEqual(call.result, "Congrats, JJ!");
156-
assert.deepStrictEqual(call.error, undefined);
157-
158-
call = app.mailSystem.write.mock.calls[1];
159-
assert.deepStrictEqual(call.arguments, ["EE"]);
160-
assert.deepStrictEqual(call.result, "Congrats, EE!");
161-
assert.deepStrictEqual(call.error, undefined);
162-
originalUnlinkSync(fn_);
59+
test("Application notifySelected", () => {
60+
const application = new Application();
61+
application.people = ["Guan", "Chen", "Gala"];
62+
application.selected = ["Guan", "Chen", "Gala"];
63+
application.mailSystem.write = test.mock.fn(application.mailSystem.write);
64+
application.mailSystem.send = test.mock.fn(application.mailSystem.send);
65+
application.notifySelected();
66+
assert.strictEqual(application.mailSystem.send.mock.calls.length, application.people.length);
67+
assert.strictEqual(application.mailSystem.write.mock.calls.length, application.people.length);
16368
});

0 commit comments

Comments
 (0)