初始化提交:go比特版本精简
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
const assert = require('assert');
|
||||
|
||||
const {
|
||||
GMAIL_INBOX_URL,
|
||||
GMAIL_PROTOCOL_SETTINGS_URL,
|
||||
enableGmailPopAndImap,
|
||||
} = require('../src/services/gmail_protocol_settings_service');
|
||||
|
||||
class FakeLocator {
|
||||
constructor(page, kind, exists = true) {
|
||||
this.page = page;
|
||||
this.kind = kind;
|
||||
this.exists = exists;
|
||||
}
|
||||
|
||||
first() { return this; }
|
||||
async count() { return this.exists ? 1 : 0; }
|
||||
async innerText() { return this.page.bodyText; }
|
||||
async evaluate() {
|
||||
if (this.kind === 'pop') return this.page.popChecked;
|
||||
if (this.kind === 'imap') return this.page.imapChecked;
|
||||
return false;
|
||||
}
|
||||
async check() {
|
||||
if (!this.exists) throw new Error('locator does not exist');
|
||||
if (this.kind === 'pop') this.page.popChecked = true;
|
||||
if (this.kind === 'imap') this.page.imapChecked = true;
|
||||
this.page.saveEnabled = true;
|
||||
}
|
||||
async isEnabled() { return this.page.saveEnabled; }
|
||||
async click() {
|
||||
this.page.saveClicked = true;
|
||||
this.page.saveEnabled = false;
|
||||
this.page.currentUrl = GMAIL_INBOX_URL;
|
||||
}
|
||||
}
|
||||
|
||||
class FakePage {
|
||||
constructor({ imapToggle = false } = {}) {
|
||||
this.currentUrl = 'about:blank';
|
||||
this.visited = [];
|
||||
this.popChecked = false;
|
||||
this.imapToggle = imapToggle;
|
||||
this.imapChecked = false;
|
||||
this.saveEnabled = false;
|
||||
this.saveClicked = false;
|
||||
this.bodyText = 'Forwarding and POP/IMAP IMAP access Folder size limits';
|
||||
}
|
||||
|
||||
url() { return this.currentUrl; }
|
||||
async goto(url) {
|
||||
this.currentUrl = url;
|
||||
this.visited.push(url);
|
||||
}
|
||||
async waitForLoadState() {}
|
||||
async waitForTimeout() {}
|
||||
locator(selector) {
|
||||
if (selector === 'body') return new FakeLocator(this, 'body');
|
||||
if (selector.includes('name="bx_pe"')) return new FakeLocator(this, 'pop');
|
||||
if (selector.includes('name="bx_ie"')) return new FakeLocator(this, 'imap', this.imapToggle);
|
||||
if (selector.includes('save_changes_button')) return new FakeLocator(this, 'save');
|
||||
return new FakeLocator(this, 'missing', false);
|
||||
}
|
||||
}
|
||||
|
||||
(async () => {
|
||||
{
|
||||
const page = new FakePage();
|
||||
const result = await enableGmailPopAndImap(page);
|
||||
assert.strictEqual(result.ok, true);
|
||||
assert.strictEqual(result.popEnabled, true);
|
||||
assert.strictEqual(result.imapEnabled, true);
|
||||
assert.strictEqual(result.imapAlwaysOn, true, '新版 Gmail 没有 IMAP 开关时应按始终开启处理');
|
||||
assert.strictEqual(page.popChecked, true);
|
||||
assert.strictEqual(page.saveClicked, true);
|
||||
assert.deepStrictEqual(page.visited, [GMAIL_INBOX_URL, GMAIL_PROTOCOL_SETTINGS_URL]);
|
||||
}
|
||||
|
||||
{
|
||||
const page = new FakePage({ imapToggle: true });
|
||||
const result = await enableGmailPopAndImap(page);
|
||||
assert.strictEqual(result.ok, true);
|
||||
assert.strictEqual(result.imapAlwaysOn, false);
|
||||
assert.strictEqual(page.popChecked, true);
|
||||
assert.strictEqual(page.imapChecked, true, '旧版 Gmail 有 IMAP 开关时应显式启用');
|
||||
assert.strictEqual(page.saveClicked, true);
|
||||
}
|
||||
|
||||
console.log('gmail_protocol_settings_service.test.js: PASS');
|
||||
})().catch(error => {
|
||||
console.error(error);
|
||||
process.exitCode = 1;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user