Page MenuHomePhorge

No OneTemporary

Size
80 KB
Referenced Files
None
Subscribers
None
diff --git a/src/tests/quick-tests/test-helpers.js b/src/tests/quick-tests/test-helpers.js
index 9ca19d6..5c6c432 100644
--- a/src/tests/quick-tests/test-helpers.js
+++ b/src/tests/quick-tests/test-helpers.js
@@ -1,49 +1,95 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2023 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
class FluentMock
{
constructor() {}
get(id, args) {
return `${id}, ${JSON.stringify(args)}`;
}
};
const fluentMock = new FluentMock();
const factory = {
room(props) {
return Object.assign({
name: 'some name',
heroNames: [],
tagIds: [],
membership: 1, // Join
timeline: 0,
}, props);
},
};
const isSubset = (a, b) => {
return Object.entries(a).every(([k, v]) => {
return k in b && deepEqual(v, b[k]);
});
}
const deepEqual = (a, b) => {
if (a === b) {
return true;
} else if (Array.isArray(a) && Array.isArray(b)) {
if (a.length !== b.length) {
return false;
}
return a.every((item, index) => deepEqual(item, b[index]));
} else if (typeof a === 'object' && typeof b === 'object' && a && b) {
return isSubset(a, b) && isSubset(b, a);
} else {
return false;
}
};
+
+const Mock = {
+ calledTimes() {
+ return this.args.length;
+ },
+ lastArgs() {
+ return this.args[this.args.length - 1];
+ },
+ lastRetVal() {
+ return this.retVals[this.retVals.length - 1];
+ },
+ clear() {
+ this.args = [];
+ this.retVals = [];
+ },
+};
+
+const makeTransform = (t) => {
+ if (t instanceof Function) {
+ return t;
+ } else if (Array.isArray(t)) {
+ return (args) => {
+ return t.reduce((acc, cur, index) => {
+ acc[cur] = args[index];
+ return acc;
+ }, {});
+ };
+ } else {
+ return (args) => args;
+ }
+};
+
+const mockFunction = (f, t) => {
+ const transform = makeTransform(t);
+ function mock() {
+ mock.args.push(transform([...arguments]));
+ const retVal = f.apply(this, arguments);
+ mock.retVals.push(retVal);
+ return retVal;
+ }
+ Object.entries(Mock).forEach(([k, v]) => {
+ mock[k] = v;
+ });
+ mock.clear();
+ return mock;
+};
diff --git a/src/tests/quick-tests/test-helpers/MockHelper.qml b/src/tests/quick-tests/test-helpers/MockHelper.qml
new file mode 100644
index 0000000..a969484
--- /dev/null
+++ b/src/tests/quick-tests/test-helpers/MockHelper.qml
@@ -0,0 +1,80 @@
+/*
+ * This file is part of kazv.
+ * SPDX-FileCopyrightText: 2024 tusooa <tusooa@kazv.moe>
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import QtQuick 2.15
+import '.' as TestHelpers
+import '../test-helpers.js' as Helpers
+
+/**
+ * Helper class for conveniently mocking functions.
+ *
+ * The mocks record the arguments and return values of the functions.
+ *
+ * - `MockHelper.func(f, t)` returns a mock of the function `f`, with
+ * its arguments recorded transformed by `t`.
+ * The transform can be either:
+ * - A function, which means the recorded arguments will be
+ * `t(originalArgs)`.
+ * - An array, which means the recorded arguments will be an
+ * object whose keys are the items of the array and the values are
+ * the recorded arguments.
+ * - For example, if the provided transform is `['foo', 'bar']` and
+ * the mock is called with `(1, 2, 3)`, the recorded arguments
+ * will be `{ foo: 1, bar: 2 }`. (Note that the additional argument
+ * 3 is ignored)
+ * - undefined, which means the arguments will be recorded as-is
+ * (equivalent to providing the identity function).
+ * - `MockHelper.promise(t)` returns a mock of a function returning
+ * a MatrixPromiseMock, with its arguments recorded transformed by `t`.
+ * - `MockHelper.noop(t)` returns a mock of a function doing nothing,
+ * with its arguments recorded transformed by `t`.
+ * - `MockHelper.clearAll()` resets the recorded information of all
+ * mocks *created by this MockHelper*.
+ *
+ * The mocks have the following interface:
+ * - `mock()` calls the function and returns the data.
+ * - `mock.clear()` resets the recorded information (times called,
+ * arguments, return values).
+ * - `mock.calledTimes()` returns the number of times the mock gets called.
+ * - `mock.lastArgs()` returns the arguments of the last call, as an array.
+ * - `mock.args` returns a list of arguments of each call, ordered from the
+ * earliest call to the last call.
+ * - `mock.lastRetVal()` returns the return value of the last call.
+ * - `mock.retVals` returns a list of return values of each call, ordered
+ * from the earliest call to the last call.
+ */
+QtObject {
+ id: mockHelper
+
+ property var promiseComp: Component {
+ TestHelpers.MatrixPromiseMock {}
+ }
+ property var mocks: []
+
+ function clearAll() {
+ mocks.forEach((mock) => {
+ mock.clear();
+ });
+ }
+
+ function func(f, t) {
+ const ret = Helpers.mockFunction(f, t);
+ mocks.push(ret);
+ return ret;
+ }
+
+ function createPromise() {
+ return promiseComp.createObject(mockHelper);
+ }
+
+ function promise(t) {
+ return func(createPromise, t);
+ }
+
+ function noop(t) {
+ return func(() => {}, t);
+ }
+}
diff --git a/src/tests/quick-tests/tst_AddStickerPopup.qml b/src/tests/quick-tests/tst_AddStickerPopup.qml
index 7ab3f7e..0f40c06 100644
--- a/src/tests/quick-tests/tst_AddStickerPopup.qml
+++ b/src/tests/quick-tests/tst_AddStickerPopup.qml
@@ -1,142 +1,128 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2024 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtTest 1.0
import org.kde.kirigami 2.20 as Kirigami
import '../../contents/ui' as Kazv
import 'test-helpers.js' as Helpers
import 'test-helpers' as TestHelpers
Item {
id: item
width: 800
height: 600
property var l10n: Helpers.fluentMock
+ property var mockHelper: TestHelpers.MockHelper {}
property var promiseComp: Component {
TestHelpers.MatrixPromiseMock {}
}
property var matrixSdk: TestHelpers.MatrixSdkMock {
id: matrixSdk
- property var _updateStickerPackCalled: 0
- property var _updateStickerPackLastArg: undefined
- property var _updateStickerPackPromise: undefined
- function updateStickerPack(arg) {
- ++matrixSdk._updateStickerPackCalled;
- matrixSdk._updateStickerPackLastArg = arg;
- matrixSdk._updateStickerPackPromise = promiseComp.createObject(matrixSdk);
- return matrixSdk._updateStickerPackPromise;
- }
+ property var updateStickerPack: mockHelper.promise()
}
Kazv.AddStickerPopup {
id: addStickerPopup
- property var _closeCalled: 0
event: ({
content: {
url: 'mxc://example.org/something',
},
})
stickerPackList: ({
at() {
return {
addSticker(shortCode, event) {
return {
[shortCode]: event.content
};
},
hasShortCode(shortCode) {
return shortCode === 'foo';
},
};
},
})
-
- function close() {
- ++addStickerPopup._closeCalled;
- }
+ property var close: mockHelper.noop()
}
TestCase {
id: eventViewTest
name: 'EventViewTest'
when: windowShown
function init() {
addStickerPopup.contentItem.parent = item;
}
function cleanup() {
- matrixSdk._updateStickerPackCalled = 0;
- matrixSdk._updateStickerPackLastArg = undefined;
- matrixSdk._updateStickerPackPromise = undefined;
- addStickerPopup._closeCalled = 0;
+ item.mockHelper.clearAll();
}
function test_addSticker() {
findChild(addStickerPopup, 'shortCodeInput').text = 'bar';
verify(!findChild(addStickerPopup, 'shortCodeExistsWarning').visible);
const button = findChild(addStickerPopup, 'addStickerButton');
verify(button.enabled);
// tryVerify(() => false, 50000);
mouseClick(button);
- tryVerify(() => matrixSdk._updateStickerPackCalled === 1);
- verify(Helpers.deepEqual(matrixSdk._updateStickerPackLastArg, {
+ tryVerify(() => matrixSdk.updateStickerPack.calledTimes() === 1);
+ verify(Helpers.deepEqual(matrixSdk.updateStickerPack.lastArgs(), [{
'bar': {
url: 'mxc://example.org/something',
}
- }));
+ }]));
tryVerify(() => !button.enabled);
tryVerify(() => findChild(addStickerPopup, 'shortCodeInput').readOnly);
- verify(addStickerPopup._closeCalled === 0);
- matrixSdk._updateStickerPackPromise.resolve(true, {});
- tryVerify(() => addStickerPopup._closeCalled === 1);
+ verify(addStickerPopup.close.calledTimes() === 0);
+ matrixSdk.updateStickerPack.lastRetVal().resolve(true, {});
+ tryVerify(() => addStickerPopup.close.calledTimes() === 1);
}
function test_addStickerFailed() {
findChild(addStickerPopup, 'shortCodeInput').text = 'bar';
verify(!findChild(addStickerPopup, 'shortCodeExistsWarning').visible);
const button = findChild(addStickerPopup, 'addStickerButton');
verify(button.enabled);
// tryVerify(() => false, 50000);
mouseClick(button);
- tryVerify(() => matrixSdk._updateStickerPackCalled === 1);
- verify(Helpers.deepEqual(matrixSdk._updateStickerPackLastArg, {
+ tryVerify(() => matrixSdk.updateStickerPack.calledTimes() === 1);
+ verify(Helpers.deepEqual(matrixSdk.updateStickerPack.lastArgs(), [{
'bar': {
url: 'mxc://example.org/something',
}
- }));
- matrixSdk._updateStickerPackPromise.resolve(false, {});
+ }]));
+ matrixSdk.updateStickerPack.lastRetVal().resolve(false, {});
tryVerify(() => button.enabled);
- verify(addStickerPopup._closeCalled === 0);
+ verify(addStickerPopup.close.calledTimes() === 0);
}
function test_addStickerOverride() {
findChild(addStickerPopup, 'shortCodeInput').text = 'foo';
tryVerify(() => findChild(addStickerPopup, 'shortCodeExistsWarning').visible);
const button = findChild(addStickerPopup, 'addStickerButton');
verify(button.enabled);
// tryVerify(() => false, 50000);
mouseClick(button);
- tryVerify(() => matrixSdk._updateStickerPackCalled === 1);
- verify(Helpers.deepEqual(matrixSdk._updateStickerPackLastArg, {
+ tryVerify(() => matrixSdk.updateStickerPack.calledTimes() === 1);
+ verify(Helpers.deepEqual(matrixSdk.updateStickerPack.lastArgs(), [{
'foo': {
url: 'mxc://example.org/something',
}
- }));
+ }]));
tryVerify(() => !button.enabled);
tryVerify(() => findChild(addStickerPopup, 'shortCodeInput').readOnly);
- verify(addStickerPopup._closeCalled === 0);
- matrixSdk._updateStickerPackPromise.resolve(true, {});
- tryVerify(() => addStickerPopup._closeCalled === 1);
+ verify(addStickerPopup.close.calledTimes() === 0);
+ matrixSdk.updateStickerPack.lastRetVal().resolve(true, {});
+ tryVerify(() => addStickerPopup.close.calledTimes() === 1);
}
}
}
diff --git a/src/tests/quick-tests/tst_ConfirmUploadPopup.qml b/src/tests/quick-tests/tst_ConfirmUploadPopup.qml
index 7409ce6..891b236 100644
--- a/src/tests/quick-tests/tst_ConfirmUploadPopup.qml
+++ b/src/tests/quick-tests/tst_ConfirmUploadPopup.qml
@@ -1,112 +1,108 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2024 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtTest 1.0
import org.kde.kirigami 2.20 as Kirigami
import moe.kazv.mxc.kazv 0.0 as MK
import '../../contents/ui' as Kazv
import 'test-helpers.js' as Helpers
import 'test-helpers' as TestHelpers
Item {
id: item
width: Kirigami.Units.gridUnit * 40
height: 600
property var l10n: Helpers.fluentMock
- property var promiseComp: Component {
- TestHelpers.MatrixPromiseMock {}
+
+ SignalSpy {
+ id: uploadRequestedSpy
+ signalName: 'uploadRequested'
}
Kazv.ConfirmUploadPopup {
id: confirmUploadPopup
- property var _uploadRequestedCalled: 0
- property var _uploadRequestedLastUrl: undefined
- onUploadRequested: (url) => {
- ++_uploadRequestedCalled;
- _uploadRequestedLastUrl = url;
- }
}
function isSheetOpen(sheet) {
if (MK.KazvUtil.kfQtMajorVersion === 5) {
return sheet.sheetOpen;
} else {
return sheet.opened;
}
}
TestCase {
id: confirmUploadPopupTest
name: 'ConfirmUploadPopupTest'
when: windowShown
- function cleanup() {
- confirmUploadPopup._uploadRequestedCalled = 0;
- confirmUploadPopup._uploadRequestedLastUrl = undefined;
+ function init() {
+ uploadRequestedSpy.clear();
+ uploadRequestedSpy.target = confirmUploadPopup;
}
function test_singleUpload() {
confirmUploadPopup.call(['file:///tmp/image.png']);
tryVerify(() => isSheetOpen(confirmUploadPopup));
if (MK.KazvUtil.kfQtMajorVersion === 5) {
confirmUploadPopup.contentItem.parent = item;
}
tryVerify(() => findChild(confirmUploadPopup, 'imagePreview').visible);
mouseClick(findChild(confirmUploadPopup, 'acceptButton'));
tryVerify(() => !isSheetOpen(confirmUploadPopup));
- verify(confirmUploadPopup._uploadRequestedCalled === 1);
- verify(confirmUploadPopup._uploadRequestedLastUrl === 'file:///tmp/image.png');
+ verify(uploadRequestedSpy.count === 1);
+ verify(uploadRequestedSpy.signalArguments[0][0] === 'file:///tmp/image.png');
}
function test_singleUploadCancelled() {
confirmUploadPopup.call(['file:///tmp/image.png']);
tryVerify(() => isSheetOpen(confirmUploadPopup));
if (MK.KazvUtil.kfQtMajorVersion === 5) {
confirmUploadPopup.contentItem.parent = item;
}
tryVerify(() => findChild(confirmUploadPopup, 'imagePreview').visible);
mouseClick(findChild(confirmUploadPopup, 'cancelButton'));
tryVerify(() => !isSheetOpen(confirmUploadPopup));
- verify(confirmUploadPopup._uploadRequestedCalled === 0);
+ verify(uploadRequestedSpy.count === 0);
}
function test_multiUpload() {
confirmUploadPopup.call(['file:///tmp/image.png', 'file:///tmp/a.txt']);
tryVerify(() => isSheetOpen(confirmUploadPopup));
if (MK.KazvUtil.kfQtMajorVersion === 5) {
confirmUploadPopup.contentItem.parent = item;
}
tryVerify(() => findChild(confirmUploadPopup, 'imagePreview').visible);
mouseClick(findChild(confirmUploadPopup, 'acceptButton'));
verify(isSheetOpen(confirmUploadPopup));
tryVerify(() => !findChild(confirmUploadPopup, 'imagePreview').visible);
- verify(confirmUploadPopup._uploadRequestedCalled === 1);
- verify(confirmUploadPopup._uploadRequestedLastUrl === 'file:///tmp/image.png');
+ verify(uploadRequestedSpy.count === 1);
+ verify(uploadRequestedSpy.signalArguments[0][0] === 'file:///tmp/image.png');
verify(confirmUploadPopup.currentIndex === 1);
mouseClick(findChild(confirmUploadPopup, 'acceptButton'));
tryVerify(() => !isSheetOpen(confirmUploadPopup));
- verify(confirmUploadPopup._uploadRequestedCalled === 2);
- verify(confirmUploadPopup._uploadRequestedLastUrl === 'file:///tmp/a.txt');
+ verify(uploadRequestedSpy.count === 2);
+ verify(uploadRequestedSpy.signalArguments[1][0] === 'file:///tmp/a.txt');
}
function test_multiUploadCancelled() {
confirmUploadPopup.call(['file:///tmp/image.png', 'file:///tmp/a.txt']);
tryVerify(() => isSheetOpen(confirmUploadPopup));
if (MK.KazvUtil.kfQtMajorVersion === 5) {
confirmUploadPopup.contentItem.parent = item;
}
tryVerify(() => findChild(confirmUploadPopup, 'imagePreview').visible);
mouseClick(findChild(confirmUploadPopup, 'cancelButton'));
tryVerify(() => !isSheetOpen(confirmUploadPopup));
- verify(confirmUploadPopup._uploadRequestedCalled === 0);
+ verify(uploadRequestedSpy.count === 0);
}
}
}
diff --git a/src/tests/quick-tests/tst_CreateRoomPage.qml b/src/tests/quick-tests/tst_CreateRoomPage.qml
index 8bcd244..8502806 100644
--- a/src/tests/quick-tests/tst_CreateRoomPage.qml
+++ b/src/tests/quick-tests/tst_CreateRoomPage.qml
@@ -1,273 +1,250 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2024 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtTest 1.0
import '../../contents/ui' as Kazv
import 'test-helpers.js' as Helpers
import 'test-helpers' as TestHelpers
import moe.kazv.mxc.kazv 0.0 as MK
Item {
id: item
width: 800
height: 600
- property var promiseComp: Component {
- TestHelpers.MatrixPromiseMock {}
- }
+ property var mockHelper: TestHelpers.MockHelper {}
property var l10n: Helpers.fluentMock
property var matrixSdk: TestHelpers.MatrixSdkMock {
- property var _createRoomCalled: 0
- property var _createRoomArgs: ({})
- property var _createRoomPromise: undefined
-
- function createRoom(
- isPrivate,
- name,
- alias,
- invites,
- isDirect,
- allowFederate,
- topic,
- powerLevelContentOverride,
- preset,
- ) {
- ++item.matrixSdk._createRoomCalled;
- item.matrixSdk._createRoomArgs = {
- isPrivate,
- name,
- alias,
- invites,
- isDirect,
- allowFederate,
- topic,
- powerLevelContentOverride,
- preset,
- };
- item.matrixSdk._createRoomPromise = promiseComp.createObject(item);
- return item.matrixSdk._createRoomPromise;
- }
+ property var createRoom: mockHelper.promise([
+ 'isPrivate',
+ 'name',
+ 'alias',
+ 'invites',
+ 'isDirect',
+ 'allowFederate',
+ 'topic',
+ 'powerLevelContentOverride',
+ 'preset',
+ ])
}
property var sdkVars: ({})
Kazv.CreateRoomPage {
anchors.fill: parent
id: createRoomPage
}
TestCase {
id: createRoomPageTest
name: 'CreateRoomPageTest'
when: windowShown
function initTestCase() {
if (MK.KazvUtil.kfQtMajorVersion === 6) {
createRoomPage.contentItem.clip = false;
}
}
function cleanup() {
- item.matrixSdk._createRoomCalled = 0;
- item.matrixSdk._createRoomArgs = {};
- item.matrixSdk._createRoomPromise = undefined;
+ mockHelper.clearAll();
createRoomPage.inviteUserIds = [];
createRoomPage.creatingRoom = false;
}
function test_createRoomPublic() {
mouseClick(findChild(createRoomPage, 'typePublicRadio'));
findChild(createRoomPage, 'roomNameInput').text = 'some name';
findChild(createRoomPage, 'roomAliasInput').text = 'alias';
findChild(createRoomPage, 'roomTopicInput').text = 'some topic';
const button = findChild(createRoomPage, 'createRoomButton');
verify(button.enabled);
mouseClick(button);
- tryVerify(() => item.matrixSdk._createRoomCalled === 1, 1000);
- verify(Helpers.deepEqual(item.matrixSdk._createRoomArgs, {
+ tryVerify(() => item.matrixSdk.createRoom.calledTimes() === 1, 1000);
+ verify(Helpers.deepEqual(item.matrixSdk.createRoom.lastArgs(), {
isPrivate: false,
name: 'some name',
alias: 'alias',
topic: 'some topic',
invites: [],
isDirect: false,
allowFederate: true,
powerLevelContentOverride: {},
preset: MK.MatrixSdk.PublicChat,
}));
}
function test_createRoomPrivate() {
mouseClick(findChild(createRoomPage, 'typePrivateRadio'));
findChild(createRoomPage, 'roomNameInput').text = 'some name';
findChild(createRoomPage, 'roomAliasInput').text = 'alias';
findChild(createRoomPage, 'roomTopicInput').text = 'some topic';
const button = findChild(createRoomPage, 'createRoomButton');
verify(button.enabled);
mouseClick(button);
- tryVerify(() => item.matrixSdk._createRoomCalled === 1, 1000);
- verify(Helpers.deepEqual(item.matrixSdk._createRoomArgs, {
+ tryVerify(() => item.matrixSdk.createRoom.calledTimes() === 1, 1000);
+ verify(Helpers.deepEqual(item.matrixSdk.createRoom.lastArgs(), {
isPrivate: true,
name: 'some name',
alias: 'alias',
topic: 'some topic',
invites: [],
isDirect: false,
allowFederate: true,
powerLevelContentOverride: {},
preset: MK.MatrixSdk.PrivateChat,
}));
}
function test_createRoomDirect() {
mouseClick(findChild(createRoomPage, 'typeDirectRadio'));
findChild(createRoomPage, 'roomNameInput').text = 'some name';
findChild(createRoomPage, 'roomAliasInput').text = 'alias';
findChild(createRoomPage, 'roomTopicInput').text = 'some topic';
const button = findChild(createRoomPage, 'createRoomButton');
verify(button.enabled);
mouseClick(button);
- tryVerify(() => item.matrixSdk._createRoomCalled === 1, 1000);
- verify(Helpers.deepEqual(item.matrixSdk._createRoomArgs, {
+ tryVerify(() => item.matrixSdk.createRoom.calledTimes() === 1, 1000);
+ verify(Helpers.deepEqual(item.matrixSdk.createRoom.lastArgs(), {
isPrivate: true,
name: 'some name',
alias: 'alias',
topic: 'some topic',
invites: [],
isDirect: false,
allowFederate: true,
powerLevelContentOverride: {},
preset: MK.MatrixSdk.TrustedPrivateChat,
}));
}
function test_createRoomDirectInviteOne() {
mouseClick(findChild(createRoomPage, 'typeDirectRadio'));
findChild(createRoomPage, 'roomNameInput').text = 'some name';
findChild(createRoomPage, 'roomAliasInput').text = 'alias';
findChild(createRoomPage, 'roomTopicInput').text = 'some topic';
const addInviteInput = findChild(createRoomPage, 'newInviteUserInput');
addInviteInput.text = '@foo:example.org';
const addInviteButton = findChild(createRoomPage, 'addInviteUserButton');
mouseClick(addInviteButton);
tryVerify(() => addInviteInput.text === '', 1000);
const button = findChild(createRoomPage, 'createRoomButton');
verify(button.enabled);
mouseClick(button);
- tryVerify(() => item.matrixSdk._createRoomCalled === 1, 1000);
- verify(Helpers.deepEqual(item.matrixSdk._createRoomArgs, {
+ tryVerify(() => item.matrixSdk.createRoom.calledTimes() === 1, 1000);
+ verify(Helpers.deepEqual(item.matrixSdk.createRoom.lastArgs(), {
isPrivate: true,
name: 'some name',
alias: 'alias',
topic: 'some topic',
invites: ['@foo:example.org'],
isDirect: true,
allowFederate: true,
powerLevelContentOverride: {},
preset: MK.MatrixSdk.TrustedPrivateChat,
}));
}
function test_createRoomDirectInviteMultiple() {
mouseClick(findChild(createRoomPage, 'typeDirectRadio'));
findChild(createRoomPage, 'roomNameInput').text = 'some name';
findChild(createRoomPage, 'roomAliasInput').text = 'alias';
findChild(createRoomPage, 'roomTopicInput').text = 'some topic';
const addInviteInput = findChild(createRoomPage, 'newInviteUserInput');
const addInviteButton = findChild(createRoomPage, 'addInviteUserButton');
addInviteInput.text = '@foo:example.org';
mouseClick(addInviteButton);
tryVerify(() => addInviteInput.text === '', 1000);
addInviteInput.text = '@bar:example.org';
mouseClick(addInviteButton);
tryVerify(() => addInviteInput.text === '', 1000);
const button = findChild(createRoomPage, 'createRoomButton');
verify(button.enabled);
mouseClick(button);
- tryVerify(() => item.matrixSdk._createRoomCalled === 1, 1000);
- verify(Helpers.deepEqual(item.matrixSdk._createRoomArgs, {
+ tryVerify(() => item.matrixSdk.createRoom.calledTimes() === 1, 1000);
+ verify(Helpers.deepEqual(item.matrixSdk.createRoom.lastArgs(), {
isPrivate: true,
name: 'some name',
alias: 'alias',
topic: 'some topic',
invites: ['@foo:example.org', '@bar:example.org'],
isDirect: false,
allowFederate: true,
powerLevelContentOverride: {},
preset: MK.MatrixSdk.TrustedPrivateChat,
}));
}
function test_invite() {
mouseClick(findChild(createRoomPage, 'typePublicRadio'));
findChild(createRoomPage, 'roomNameInput').text = 'some name';
findChild(createRoomPage, 'roomAliasInput').text = 'alias';
findChild(createRoomPage, 'roomTopicInput').text = 'some topic';
const button = findChild(createRoomPage, 'createRoomButton');
verify(button.enabled);
mouseClick(button);
// add three invites
const addInviteInput = findChild(createRoomPage, 'newInviteUserInput');
const addInviteButton = findChild(createRoomPage, 'addInviteUserButton');
addInviteInput.text = '@foo:example.org';
mouseClick(addInviteButton);
tryVerify(() => addInviteInput.text === '', 1000);
addInviteInput.text = '@bar:example.org';
mouseClick(addInviteButton);
tryVerify(() => addInviteInput.text === '', 1000);
addInviteInput.text = '@baz:example.org';
mouseClick(addInviteButton);
tryVerify(() => addInviteInput.text === '', 1000);
// remove the second invite (bar)
tryVerify(() => findChild(createRoomPage, 'inviteUserItem_1'), 1000);
const inviteItem = findChild(createRoomPage, 'inviteUserItem_1');
compare(findChild(inviteItem, 'inviteUserIdLabel').text, '@bar:example.org');
findChild(inviteItem, 'removeInviteAction').trigger();
tryVerify(() => {
const label = findChild(
findChild(createRoomPage, 'inviteUserItem_1'),
'inviteUserIdLabel'
);
return label && label.text === '@baz:example.org'
}, 50000);
- tryVerify(() => item.matrixSdk._createRoomCalled === 1, 1000);
- verify(Helpers.deepEqual(item.matrixSdk._createRoomArgs, {
+ tryVerify(() => item.matrixSdk.createRoom.calledTimes() === 1, 1000);
+ verify(Helpers.deepEqual(item.matrixSdk.createRoom.lastArgs(), {
isPrivate: false,
name: 'some name',
alias: 'alias',
topic: 'some topic',
invites: ['@foo:example.org', '@baz:example.org'],
isDirect: false,
allowFederate: true,
powerLevelContentOverride: {},
preset: MK.MatrixSdk.PublicChat,
}));
}
}
}
diff --git a/src/tests/quick-tests/tst_EventView.qml b/src/tests/quick-tests/tst_EventView.qml
index a7c7eed..e05288f 100644
--- a/src/tests/quick-tests/tst_EventView.qml
+++ b/src/tests/quick-tests/tst_EventView.qml
@@ -1,529 +1,497 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2023 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import QtQuick 2.3
import QtQuick.Layouts 1.15
import QtTest 1.0
import moe.kazv.mxc.kazv 0.0 as MK
import '../../contents/ui' as Kazv
import 'test-helpers.js' as Helpers
import 'test-helpers' as TestHelpers
Item {
id: item
width: 800
height: 600
- property var promiseComp: Component {
- TestHelpers.MatrixPromiseMock {
- }
- }
+ property var mockHelper: TestHelpers.MockHelper {}
- property var activateUserPageCalled: 0
- function activateUserPage() {
- ++activateUserPageCalled;
- }
+ property var activateUserPage: mockHelper.noop()
property var timeline: ({
gaps: [],
})
property var room: ({
- test_resendMessageCalled: 0,
- test_resendMessageLastTxnId: '',
- test_removeLocalEchoCalled: 0,
- test_removeLocalEchoLastTxnId: '',
- test_ensureStateEventCalled: 0,
- test_ensureStateEventCalledArgs: [],
- test_ensureStateEventPromise: null,
- resendMessage: (txnId) => {
- ++item.room.test_resendMessageCalled;
- item.room.test_resendMessageLastTxnId = txnId;
- },
- removeLocalEcho: (txnId) => {
- ++item.room.test_removeLocalEchoCalled;
- item.room.test_removeLocalEchoLastTxnId = txnId;
- },
- ensureStateEvent: (type, stateKey) => {
- ++item.room.test_ensureStateEventCalled;
- item.room.test_ensureStateEventCalledArgs = [type, stateKey];
- item.room.test_ensureStateEventPromise = promiseComp.createObject(item);
- return item.room.test_ensureStateEventPromise;
- },
+ resendMessage: mockHelper.promise(),
+ removeLocalEcho: mockHelper.promise(),
+ ensureStateEvent: mockHelper.promise(),
messageById: (_id) => item.textEvent,
member: (_id) => ({}),
})
property var l10n: Helpers.fluentMock
property var matrixSdk: TestHelpers.MatrixSdkMock {
property var userId: '@foo:tusooa.xyz'
}
property var sdkVars: QtObject {
property var userGivenNicknameMap: QtObject {
property var map: ({
'@foo:tusooa.xyz': 'something',
})
}
}
property var kazvIOManager: TestHelpers.KazvIOManagerMock {}
property var localEcho: ({
eventId: '',
sender: '',
type: 'm.room.message',
stateKey: '',
content: {
msgtype: 'm.text',
body: 'some body',
},
encrypted: false,
isState: false,
unsignedData: {},
isLocalEcho: true,
isSending: true,
isFailed: false,
txnId: 'some-txn-id',
})
property var failedLocalEcho: Object.assign({}, item.localEcho, { isSending: false, isFailed: true, })
property var textEvent: ({
eventId: '',
sender: '@foo:tusooa.xyz',
type: 'm.room.message',
stateKey: '',
content: {
msgtype: 'm.text',
body: 'some body',
},
formattedTime: '4:06 P.M.',
})
property var htmlEvent: ({
eventId: '',
sender: '@foo:tusooa.xyz',
type: 'm.room.message',
stateKey: '',
content: {
msgtype: 'm.text',
body: '**some body**',
format: 'org.matrix.custom.html',
formatted_body: '<strong>some body</strong>',
},
formattedTime: '4:06 P.M.',
})
property var replyHtmlEvent: ({
eventId: '',
sender: '@foo:tusooa.xyz',
type: 'm.room.message',
stateKey: '',
replyingToEventId: '$xxx',
content: {
msgtype: 'm.text',
body: '> some quote\n**some body**',
format: 'org.matrix.custom.html',
formatted_body: '<mx-reply><blockquote>some quote</blockquote></mx-reply><strong>some body</strong>',
},
formattedTime: '4:06 P.M.',
})
property var replyNoQuoteHtmlEvent: ({
eventId: '',
sender: '@foo:tusooa.xyz',
type: 'm.room.message',
stateKey: '',
replyingToEventId: '$xxx',
content: {
msgtype: 'm.text',
body: '**some body**',
format: 'org.matrix.custom.html',
formatted_body: '<strong>some body</strong>',
},
formattedTime: '4:06 P.M.',
})
property var redactedEvent: ({
eventId: '',
sender: '@foo:tusooa.xyz',
type: 'm.room.message',
stateKey: '',
content: {},
redacted: true,
formattedTime: '4:06 P.M.',
})
property var imageEvent: ({
eventId: '',
sender: '@foo:tusooa.xyz',
type: 'm.room.message',
stateKey: '',
content: {
msgtype: 'm.image',
body: 'some body',
},
formattedTime: '4:06 P.M.',
})
property var eventBySomeoneElse: ({
eventId: '',
sender: '@bar:tusooa.xyz',
type: 'm.room.message',
stateKey: '',
content: {
msgtype: 'm.image',
body: 'some body',
},
formattedTime: '4:06 P.M.',
})
property var eventTextBySomeoneElse: ({
eventId: '',
sender: '@bar:tusooa.xyz',
type: 'm.room.message',
stateKey: '',
content: {
msgtype: 'm.text',
body: 'some body',
},
formattedTime: '4:06 P.M.',
})
property var ignoredEvent: ({
eventId: '',
sender: '@foo:tusooa.xyz',
type: 'm.room.message',
relationType: 'm.replace',
stateKey: '',
content: {
msgtype: 'm.image',
body: 'some body',
},
formattedTime: '4:06 P.M.',
})
property var unknownTypeEvent: ({
eventId: '',
sender: '@foo:tusooa.xyz',
type: 'moe.kazv.mxc.unknown.event',
stateKey: '',
content: {
msgtype: 'm.image',
body: 'some body',
},
})
property var unknownMsgtypeEvent: ({
eventId: '',
sender: '@foo:tusooa.xyz',
type: 'm.room.message',
stateKey: '',
content: {
msgtype: 'moe.kazv.mxc.unknown.msgtype',
body: 'some body',
},
})
property var cannotDecryptEvent: ({
eventId: '',
sender: '@foo:tusooa.xyz',
type: 'm.room.message',
stateKey: '',
content: {
msgtype: 'moe.kazv.mxc.cannot.decrypt',
body: 'some body',
},
})
property var sender: ({
membership: 'join',
userId: '@foo:tusooa.xyz',
name: 'foo',
avatarMxcUri: '',
})
property var senderOther: ({
membership: 'join',
userId: '@bar:tusooa.xyz',
name: 'bar',
avatarMxcUri: '',
})
ColumnLayout {
anchors.fill: parent
Kazv.EventView {
Layout.fillWidth: true
id: eventView
event: item.localEcho
sender: item.sender
}
Kazv.EventView {
Layout.fillWidth: true
id: eventViewFailed
event: item.failedLocalEcho
sender: item.sender
}
Kazv.EventView {
Layout.fillWidth: true
id: eventViewText
event: item.textEvent
sender: item.sender
}
Kazv.EventView {
Layout.fillWidth: true
id: eventViewHtml
event: item.htmlEvent
sender: item.sender
}
Kazv.EventView {
Layout.fillWidth: true
id: eventViewHtmlReply
event: item.replyHtmlEvent
sender: item.sender
}
Kazv.EventView {
Layout.fillWidth: true
id: eventViewHtmlReplyNoQuote
event: item.replyNoQuoteHtmlEvent
sender: item.sender
}
Kazv.EventView {
Layout.fillWidth: true
id: eventViewRedacted
event: item.redactedEvent
sender: item.sender
}
Kazv.EventView {
id: eventViewUnknownType
event: item.unknownTypeEvent
sender: item.sender
}
Kazv.EventView {
id: eventViewUnknownMsgtype
event: item.unknownMsgtypeEvent
sender: item.sender
}
Kazv.EventView {
id: eventViewCannotDecrypt
event: item.cannotDecryptEvent
sender: item.sender
}
Kazv.EventView {
id: eventViewCollapseSameSender
event: item.imageEvent
sender: item.sender
prevEvent: item.redactedEvent
}
Kazv.EventView {
id: eventViewCollapseLocalEcho
event: item.localEcho
sender: item.sender
prevEvent: item.redactedEvent
}
Kazv.EventView {
id: eventViewDontCollapseDifferentSender
event: item.imageEvent
sender: item.sender
prevEvent: item.eventBySomeoneElse
}
Kazv.EventView {
id: eventViewDontCollapseLocalEchoDifferentSender
event: item.localEcho
sender: item.sender
prevEvent: item.eventBySomeoneElse
}
Kazv.EventView {
id: eventViewDontCollapseIgnoredEvent
event: item.imageEvent
sender: item.sender
prevEvent: item.ignoredEvent
}
Kazv.EventView {
id: eventViewTextBySomeoneElse
event: item.eventTextBySomeoneElse
sender: item.senderOther
}
}
TestCase {
id: eventViewTest
name: 'EventViewTest'
when: windowShown
function init() {
eventView.event = item.localEcho;
- item.room.test_resendMessageCalled = 0;
- item.room.test_resendMessageLastTxnId = '';
- item.room.test_removeLocalEchoCalled = 0;
- item.room.test_removeLocalEchoLastTxnId = '';
- item.room.test_ensureStateEventCalled = 0;
- item.room.test_ensureStateEventCalledArgs = [];
- item.room.test_ensureStateEventPromise = null;
- item.activateUserPageCalled = 0;
+ mockHelper.clearAll();
}
function test_localEcho() {
const indicator = findChild(eventView, 'localEchoIndicator');
verify(indicator);
verify(indicator.source === 'state-sync');
verify(indicator.Accessible.name === l10n.get('event-sending'));
const resendButton = findChild(eventView, 'resendEventButton');
verify(resendButton);
verify(!resendButton.enabled);
verify(!findChild(eventView, 'timeIndicator').visible);
}
function test_localEchoFailedRemove() {
const indicator = findChild(eventViewFailed, 'localEchoIndicator');
verify(indicator);
verify(indicator.visible);
verify(indicator.source === 'state-warning');
verify(indicator.Accessible.name === l10n.get('event-resend'));
const menuComp = findChild(eventViewFailed, 'bubble').menuComp;
const menu = menuComp.createObject(menuComp.parent);
const deleteAction = findChild(menu, 'deleteMenuItem');
deleteAction.trigger();
- tryVerify(() => item.room.test_removeLocalEchoCalled === 1);
- tryVerify(() => item.room.test_removeLocalEchoLastTxnId === 'some-txn-id');
- verify(item.room.test_resendMessageCalled === 0);
- verify(item.room.test_resendMessageLastTxnId === '');
+ tryVerify(() => item.room.removeLocalEcho.calledTimes() === 1);
+ tryVerify(() => item.room.removeLocalEcho.lastArgs()[0] === 'some-txn-id');
+ verify(item.room.resendMessage.calledTimes() === 0);
}
function test_sentMessage() {
const indicator = findChild(eventViewText, 'localEchoIndicator');
verify(indicator);
verify(!indicator.visible);
verify(findChild(eventViewText, 'timeIndicator').visible);
}
function test_htmlMessage() {
const text = findChild(eventViewHtml, 'textEventContent');
verify(text.textFormat === TextEdit.RichText);
verify(text.text.includes('some body'));
}
function test_htmlMessageReply() {
const text = findChild(eventViewHtmlReply, 'textEventContent');
verify(text.textFormat === TextEdit.RichText);
verify(!text.text.includes('<blockquote>'));
}
function test_htmlMessageReplyNoQuote() {
const text = findChild(eventViewHtmlReplyNoQuote, 'textEventContent');
verify(text.textFormat === TextEdit.RichText);
verify(!text.text.includes('<blockquote>'));
verify(text.text.includes('some body'));
}
function test_menuText() {
const menuComp = findChild(eventViewText, 'bubble').menuComp;
const menu = menuComp.createObject(menuComp.parent);
verify(menu);
tryVerify(() => findChild(menu, 'replyToMenuItem').enabled);
tryVerify(() => findChild(menu, 'editMenuItem').enabled);
tryVerify(() => findChild(menu, 'deleteMenuItem').enabled);
}
function test_menuRedacted() {
const menuComp = findChild(eventViewRedacted, 'bubble').menuComp;
const menu = menuComp.createObject(menuComp.parent);
verify(menu);
tryVerify(() => !findChild(menu, 'replyToMenuItem').enabled);
tryVerify(() => !findChild(menu, 'deleteMenuItem').enabled);
}
function test_fallback() {
verify(findChild(eventViewUnknownType, 'fallbackIcon'));
verify(findChild(eventViewUnknownType, 'textEventContent').text ===
l10n.get('event-fallback-text', { type: unknownTypeEvent.type }));
verify(findChild(eventViewUnknownMsgtype, 'fallbackIcon'));
verify(findChild(eventViewUnknownMsgtype, 'textEventContent').text ===
l10n.get('event-msgtype-fallback-text', { msgtype: unknownMsgtypeEvent.content.msgtype }));
verify(findChild(eventViewCannotDecrypt, 'fallbackIcon'));
verify(findChild(eventViewCannotDecrypt, 'textEventContent').text ===
l10n.get('event-cannot-decrypt-text'));
}
function test_collapseSender() {
verify(!findChild(eventViewCollapseSameSender, 'senderAvatar').visible);
verify(findChild(eventViewCollapseSameSender, 'senderCollapsedPlaceholder').visible);
verify(!findChild(eventViewCollapseLocalEcho, 'senderAvatar').visible);
verify(findChild(eventViewCollapseLocalEcho, 'senderCollapsedPlaceholder').visible);
verify(findChild(eventViewDontCollapseDifferentSender, 'senderAvatar').visible);
verify(!findChild(eventViewDontCollapseDifferentSender, 'senderCollapsedPlaceholder').visible);
verify(findChild(eventViewDontCollapseLocalEchoDifferentSender, 'senderAvatar').visible);
verify(!findChild(eventViewDontCollapseLocalEchoDifferentSender, 'senderCollapsedPlaceholder').visible);
verify(findChild(eventViewDontCollapseIgnoredEvent, 'senderAvatar').visible);
verify(!findChild(eventViewDontCollapseIgnoredEvent, 'senderCollapsedPlaceholder').visible);
}
function test_eventByOther() {
const menuComp = findChild(eventViewTextBySomeoneElse, 'bubble').menuComp;
const menu = menuComp.createObject(menuComp.parent);
verify(menu);
tryVerify(() => !findChild(menu, 'editMenuItem').enabled);
}
function test_menuSelfDestruct() {
const menuComp = findChild(eventViewTextBySomeoneElse, 'bubble').menuComp;
const menu = menuComp.createObject(menuComp.parent);
verify(menu);
menu.popup(item);
menu.dismiss();
const menu2 = menuComp.createObject(menuComp.parent);
menu2.popup(item);
menu2.dismiss();
}
function test_userLink() {
const text = findChild(eventViewText, 'textEventContent');
text.linkActivated('https://matrix.to/#/@mew:example.com');
- tryVerify(() => item.room.test_ensureStateEventCalled);
+ tryVerify(() => item.room.ensureStateEvent.calledTimes());
verify(Helpers.deepEqual(
- item.room.test_ensureStateEventCalledArgs,
+ item.room.ensureStateEvent.lastArgs(),
['m.room.member', '@mew:example.com']));
- item.room.test_ensureStateEventPromise.resolve(true, {});
- tryVerify(() => item.activateUserPageCalled);
+ item.room.ensureStateEvent.lastRetVal().resolve(true, {});
+ tryVerify(() => item.activateUserPage.calledTimes());
}
function test_senderNameOverrided() {
const name = findChild(eventViewText, 'userNicknameText');
compare(name.text, l10n.get(
'user-name-overrided',
{ overridedName: 'something', globalName: 'foo' }));
}
function test_senderNameNotOverrided() {
const name = findChild(eventViewTextBySomeoneElse, 'userNicknameText');
compare(name.text, 'bar');
}
}
}
diff --git a/src/tests/quick-tests/tst_EventViewRedacted.qml b/src/tests/quick-tests/tst_EventViewRedacted.qml
index d732983..0ca6ba3 100644
--- a/src/tests/quick-tests/tst_EventViewRedacted.qml
+++ b/src/tests/quick-tests/tst_EventViewRedacted.qml
@@ -1,69 +1,61 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2023 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import QtQuick 2.3
import QtTest 1.0
import '../../contents/ui' as Kazv
import 'test-helpers.js' as Helpers
Item {
id: item
width: 800
height: 600
- property var room: ({
- test_resendMessageCalled: 0,
- test_resendMessageLastTxnId: '',
- resendMessage: (txnId) => {
- ++item.room.test_resendMessageCalled;
- item.room.test_resendMessageLastTxnId = txnId;
- }
- })
property var l10n: Helpers.fluentMock
property var event: ({
eventId: '',
sender: '',
type: 'm.room.message',
stateKey: '',
content: {
},
redacted: true,
encrypted: false,
isState: false,
unsignedData: {},
isLocalEcho: false,
isSending: false,
isFailed: false,
txnId: 'some-txn-id',
})
property var sender: ({
membership: 'join',
userId: '@foo:tusooa.xyz',
name: 'foo',
avatarMxcUri: '',
})
Kazv.EventView {
id: eventView
event: item.event
sender: item.sender
}
TestCase {
id: eventViewRedactedTest
name: 'EventViewRedactedTest'
when: windowShown
function test_redacted() {
verify(eventView.getMessageType(event) === 'redacted');
const child = findChild(eventView, 'redactedEvent');
verify(child);
verify(child.text === l10n.get('event-deleted'));
}
}
}
diff --git a/src/tests/quick-tests/tst_JoinRoomPage.qml b/src/tests/quick-tests/tst_JoinRoomPage.qml
index e481de6..8dc79b9 100644
--- a/src/tests/quick-tests/tst_JoinRoomPage.qml
+++ b/src/tests/quick-tests/tst_JoinRoomPage.qml
@@ -1,116 +1,93 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2024 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtTest 1.0
import '../../contents/ui' as Kazv
import 'test-helpers.js' as Helpers
import 'test-helpers' as TestHelpers
import moe.kazv.mxc.kazv 0.0 as MK
Item {
id: item
width: 800
height: 600
- property var promiseComp: Component {
- TestHelpers.MatrixPromiseMock {}
- }
+ property var mockHelper: TestHelpers.MockHelper {}
property var l10n: Helpers.fluentMock
property var showPassiveNotification: () => {}
property var matrixSdk: TestHelpers.MatrixSdkMock {
- property var _joinRoomCalled: 0
- property var _joinRoomArgs: ({})
- property var _joinRoomPromise: undefined
-
- function joinRoom(
- room, serverNames
- ) {
- ++item.matrixSdk._joinRoomCalled;
- item.matrixSdk._joinRoomArgs = {
- room,
- serverNames,
- };
- item.matrixSdk._joinRoomPromise = promiseComp.createObject(item);
- return item.matrixSdk._joinRoomPromise;
- }
+ property var joinRoom: mockHelper.promise()
}
property var sdkVars: ({})
property var pageStack: ({
- removePage (page) {
- ++item.pageStack._removePageCalled;
- },
- _removePageCalled: 0,
+ removePage: mockHelper.noop(),
})
Kazv.JoinRoomPage {
id: joinRoomPage
}
TestCase {
id: joinRoomPageTest
name: 'JoinRoomPageTest'
when: windowShown
function cleanup() {
- item.matrixSdk._joinRoomCalled = 0;
- item.matrixSdk._joinRoomArgs = {};
- item.matrixSdk._joinRoomPromise = undefined;
- item.pageStack._removePageCalled = 0;
+ mockHelper.clearAll();
}
function test_joinRoomWithServers() {
findChild(joinRoomPage, 'idOrAliasInput').text = '#foo:example.com';
findChild(joinRoomPage, 'serversInput').text = 'example.com\nexample.org';
const button = findChild(joinRoomPage, 'joinRoomButton');
verify(button.enabled);
mouseClick(button);
- tryVerify(() => item.matrixSdk._joinRoomCalled === 1, 1000);
- console.log(JSON.stringify(item.matrixSdk._joinRoomArgs));
- verify(Helpers.deepEqual(item.matrixSdk._joinRoomArgs, {
- room: '#foo:example.com',
- serverNames: ['example.com', 'example.org'],
- }));
+ tryVerify(() => item.matrixSdk.joinRoom.calledTimes() === 1, 1000);
+ verify(Helpers.deepEqual(item.matrixSdk.joinRoom.lastArgs(), [
+ '#foo:example.com',
+ ['example.com', 'example.org'],
+ ]));
- item.matrixSdk._joinRoomPromise.resolve(true, {});
- tryVerify(() => item.pageStack._removePageCalled === 1);
+ item.matrixSdk.joinRoom.lastRetVal().resolve(true, {});
+ tryVerify(() => item.pageStack.removePage.calledTimes() === 1);
}
function test_joinRoomWithoutServers() {
findChild(joinRoomPage, 'idOrAliasInput').text = '#foo:example.com';
findChild(joinRoomPage, 'serversInput').text = '';
const button = findChild(joinRoomPage, 'joinRoomButton');
verify(button.enabled);
mouseClick(button);
- tryVerify(() => item.matrixSdk._joinRoomCalled === 1, 1000);
- verify(Helpers.deepEqual(item.matrixSdk._joinRoomArgs, {
- room: '#foo:example.com',
- serverNames: [],
- }));
+ tryVerify(() => item.matrixSdk.joinRoom.calledTimes() === 1, 1000);
+ verify(Helpers.deepEqual(item.matrixSdk.joinRoom.lastArgs(), [
+ '#foo:example.com',
+ [],
+ ]));
- item.matrixSdk._joinRoomPromise.resolve(true, {});
- tryVerify(() => item.pageStack._removePageCalled === 1);
+ item.matrixSdk.joinRoom.lastRetVal().resolve(true, {});
+ tryVerify(() => item.pageStack.removePage.calledTimes() === 1);
}
function test_joinRoomFailure() {
findChild(joinRoomPage, 'idOrAliasInput').text = '#foo:example.com';
findChild(joinRoomPage, 'serversInput').text = '';
const button = findChild(joinRoomPage, 'joinRoomButton');
verify(button.enabled);
mouseClick(button);
- tryVerify(() => item.matrixSdk._joinRoomCalled === 1, 1000);
+ tryVerify(() => item.matrixSdk.joinRoom.calledTimes() === 1, 1000);
- item.matrixSdk._joinRoomPromise.resolve(false, {});
- tryVerify(() => item.pageStack._removePageCalled === 0);
+ item.matrixSdk.joinRoom.lastRetVal().resolve(false, {});
+ tryVerify(() => item.pageStack.removePage.calledTimes() === 0);
}
}
}
diff --git a/src/tests/quick-tests/tst_RoomInvitePage.qml b/src/tests/quick-tests/tst_RoomInvitePage.qml
index 5812237..15ae27a 100644
--- a/src/tests/quick-tests/tst_RoomInvitePage.qml
+++ b/src/tests/quick-tests/tst_RoomInvitePage.qml
@@ -1,104 +1,85 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2023 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtTest 1.0
import '../../contents/ui/room-settings' as RoomSettings
import 'test-helpers.js' as Helpers
import 'test-helpers' as TestHelpers
import moe.kazv.mxc.kazv 0.0 as MK
Item {
id: item
width: 800
height: 600
- property var promiseComp: Component {
- TestHelpers.MatrixPromiseMock {
- }
- }
-
- property var showPassiveNotification: (() => {})
+ property var mockHelper: TestHelpers.MockHelper {}
+ property var showPassiveNotification: mockHelper.noop()
property var pageStack: ({
- removePage (page) {
- ++item.pageStack._removePageCalled;
- },
- _removePageCalled: 0,
+ removePage: mockHelper.noop(),
})
property var room: ({
name: 'room',
- inviteUser (userId) {
- ++item.room._inviteUserCalled;
- item.room._inviteUserUserId = userId;
- const promise = promiseComp.createObject(item.room);
- item.room._inviteUserPromise = promise;
- return promise;
- },
- _inviteUserCalled: 0,
- _inviteUserUserId: undefined,
- _inviteUserPromise: undefined,
+ inviteUser: mockHelper.promise(),
})
property var l10n: Helpers.fluentMock
property var matrixSdk: TestHelpers.MatrixSdkMock {}
property var sdkVars: ({})
RoomSettings.RoomInvitePage {
id: roomInvitePage
room: item.room
}
TestCase {
id: roomInvitePageTest
name: 'RoomInvitePageTest'
when: windowShown
function initTestCase() {
if (MK.KazvUtil.kfQtMajorVersion === 6) {
roomInvitePage.contentItem.clip = false;
}
}
function cleanup() {
- item.room._inviteUserCalled = 0;
- item.room._inviteUserPromise = undefined;
- item.room._inviteUserUserId = undefined;
- item.pageStack._removePageCalled = 0;
+ mockHelper.clearAll();
}
function test_roomInvitePage() {
const input = findChild(roomInvitePage, 'inviteUserIdInput');
input.text = '@mew:example.com';
const button = findChild(roomInvitePage, 'inviteUserButton');
mouseClick(button);
- tryVerify(() => item.room._inviteUserCalled, 1000);
- verify(item.room._inviteUserPromise);
- verify(item.room._inviteUserUserId == '@mew:example.com');
+ tryVerify(() => item.room.inviteUser.calledTimes(), 1000);
+ verify(item.room.inviteUser);
+ verify(item.room.inviteUser.lastArgs()[0] == '@mew:example.com');
verify(!button.enabled);
- const promise = item.room._inviteUserPromise;
+ const promise = item.room.inviteUser.lastRetVal();
promise.resolve(true, {});
tryVerify(() => button.enabled, 1000);
- tryVerify(() => item.pageStack._removePageCalled, 1000);
+ tryVerify(() => item.pageStack.removePage.calledTimes(), 1000);
}
function test_roomInvitePageFailed() {
const input = findChild(roomInvitePage, 'inviteUserIdInput');
input.text = '@mew:example.com';
const button = findChild(roomInvitePage, 'inviteUserButton');
mouseClick(button);
- tryVerify(() => item.room._inviteUserCalled, 1000);
- verify(item.room._inviteUserPromise);
- const promise = item.room._inviteUserPromise;
+ tryVerify(() => item.room.inviteUser.calledTimes(), 1000);
+ const promise = item.room.inviteUser.lastRetVal();
+ verify(promise);
promise.resolve(false, {});
tryVerify(() => button.enabled, 1000);
- verify(!item.pageStack._removePageCalled);
+ verify(!item.pageStack.removePage.calledTimes());
}
}
}
diff --git a/src/tests/quick-tests/tst_RoomSettingsPage.qml b/src/tests/quick-tests/tst_RoomSettingsPage.qml
index be7aaae..f2525be 100644
--- a/src/tests/quick-tests/tst_RoomSettingsPage.qml
+++ b/src/tests/quick-tests/tst_RoomSettingsPage.qml
@@ -1,87 +1,78 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2024 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtTest 1.0
import '../../contents/ui' as Kazv
import '../../contents/ui/room-settings' as KazvRS
import moe.kazv.mxc.kazv 0.0 as MK
import 'test-helpers.js' as Helpers
import 'test-helpers' as TestHelpers
Item {
id: item
width: 800
height: 600
- property var promiseComp: Component {
- TestHelpers.MatrixPromiseMock {}
- }
+ property var mockHelper: TestHelpers.MockHelper {}
property var roomUnencrypted: Helpers.factory.room({
membership: MK.MatrixRoom.Join,
encrypted: false,
- _sendStatePromise: undefined,
- _sendStateArg: undefined,
- sendStateEvent(event) {
- roomUnencrypted._sendStatePromise = promiseComp.createObject(item);
- roomUnencrypted._sendStateArg = event;
- return roomUnencrypted._sendStatePromise;
- },
+ sendStateEvent: mockHelper.promise(),
})
property var roomEncrypted: Helpers.factory.room({
membership: MK.MatrixRoom.Join,
encrypted: true,
})
- function showPassiveNotification() {
- }
+ property var showPassiveNotification: mockHelper.noop()
property var l10n: Helpers.fluentMock
property var matrixSdk: TestHelpers.MatrixSdkMock {
property var userId: '@foo:example.org'
}
property var sdkVars: ({})
ColumnLayout {
KazvRS.RoomSettingsPage {
id: pageUnencrypted
room: item.roomUnencrypted
}
KazvRS.RoomSettingsPage {
id: pageEncrypted
room: item.roomEncrypted
}
}
TestCase {
id: roomSettingsPageTest
name: 'RoomSettingsPageTest'
when: windowShown
function test_encryptionIndicator() {
compare(findChild(pageUnencrypted, 'encryptionIndicator').text, l10n.get('room-settings-not-encrypted'));
verify(findChild(pageUnencrypted, 'enableEncryptionButton').visible);
compare(findChild(pageEncrypted, 'encryptionIndicator').text, l10n.get('room-settings-encrypted'));
verify(!findChild(pageEncrypted, 'enableEncryptionButton').visible);
}
function test_enableEncryption() {
pageUnencrypted.encryptionPopup.accepted();
- tryVerify(() => roomUnencrypted._sendStateArg.type === 'm.room.encryption');
- tryVerify(() => roomUnencrypted._sendStateArg.state_key === '');
+ tryVerify(() => roomUnencrypted.sendStateEvent.lastArgs()[0].type === 'm.room.encryption');
+ tryVerify(() => roomUnencrypted.sendStateEvent.lastArgs()[0].state_key === '');
verify(!findChild(pageUnencrypted, 'enableEncryptionButton').enabled);
- roomUnencrypted._sendStatePromise.resolve(true, {});
+ roomUnencrypted.sendStateEvent.lastRetVal().resolve(true, {});
tryVerify(() => findChild(pageUnencrypted, 'enableEncryptionButton').enabled);
}
}
}
diff --git a/src/tests/quick-tests/tst_SendMessageBoxDrafts.qml b/src/tests/quick-tests/tst_SendMessageBoxDrafts.qml
index 94e9bba..4b9d532 100644
--- a/src/tests/quick-tests/tst_SendMessageBoxDrafts.qml
+++ b/src/tests/quick-tests/tst_SendMessageBoxDrafts.qml
@@ -1,134 +1,128 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2020-2024 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import QtTest 1.0
import org.kde.kirigami 2.13 as Kirigami
import '../../contents/ui' as Kazv
import 'test-helpers.js' as Helpers
import 'test-helpers' as TestHelpers
Item {
id: item
width: 800
height: 600
+ property var mockHelper: TestHelpers.MockHelper {}
function makeRoom () {
return {
timeline () {
return {
count: 0,
eventIds: [],
gaps: [],
at () { return {}; },
};
},
messageById () { return {}; },
member () { return {}; },
localDraft: '',
- _setLocalDraftCalled: 0,
- _internalLocalDraft: '',
- _updateLocalDraftNowCalled: 0,
- setLocalDraft (localDraft) {
- this._internalLocalDraft = localDraft;
- ++this._setLocalDraftCalled;
- },
- updateLocalDraftNow () {
- this.localDraft = this._internalLocalDraft;
- ++this._updateLocalDraftNowCalled;
- },
+ setLocalDraft: mockHelper.noop(),
+ updateLocalDraftNow: mockHelper.func(function () {
+ this.localDraft = this.setLocalDraft.lastArgs()[0];
+ }),
};
}
property var room: makeRoom()
property var room2: makeRoom()
property var sendMessageBoxComp: Component {
id: comp
Kirigami.Page {
property var l10n: Helpers.fluentMock
property var matrixSdk: TestHelpers.MatrixSdkMock {}
property var kazvIOManager: TestHelpers.KazvIOManagerMock {}
id: page
Label {
text: 'room 1'
}
footer: Item {
height: childrenRect.height
width: parent.width
Kazv.SendMessageBox {
room: item.room
}
}
}
}
property var sendMessageBoxComp2: Component {
id: comp2
Kirigami.Page {
property var l10n: Helpers.fluentMock
property var matrixSdk: TestHelpers.MatrixSdkMock {}
property var kazvIOManager: TestHelpers.KazvIOManagerMock {}
id: page
Label {
text: 'room 2'
}
footer: Item {
height: childrenRect.height
width: parent.width
Kazv.SendMessageBox {
room: item.room2
}
}
}
}
property var mockMainPageComp: Component {
id: mockMainPageComp
Kirigami.Page {}
}
Kirigami.ApplicationWindow {
id: window
}
TestCase {
id: sendMessageBoxDraftsTest
name: 'SendMessageBoxDraftsTest'
when: windowShown
function test_saveDraftsOnSwitching() {
// simulates the MainPage when starting up kazv
window.pageStack.push(mockMainPageComp);
// a room page is pushed, here we simulate it with only the send
// message box, as other things are unrelevant
window.pageStack.push(comp);
const textArea = findChild(window.pageStack, 'draftMessage');
verify(textArea);
// change text
textArea.text = 'foo';
// verify that the draft is saved internally but not propagated
verify(item.room.localDraft === '');
- verify(item.room._internalLocalDraft === 'foo');
+ verify(item.room.setLocalDraft.lastArgs()[0] === 'foo');
// go back to MainPage
window.pageStack.goBack();
verify(window.pageStack.currentIndex === 0);
// push another room page
window.pageStack.push(comp2);
verify(window.pageStack.currentIndex === 1);
// should be the draft for that room, so it is empty
tryVerify(() => findChild(window.pageStack, 'draftMessage').text === '', 1000);
// verify that the draft is propagated
tryVerify(() => item.room.localDraft === 'foo', 1000);
- verify(item.room._updateLocalDraftNowCalled === 1);
+ verify(item.room.updateLocalDraftNow.calledTimes() === 1);
}
}
}
diff --git a/src/tests/quick-tests/tst_StickerPicker.qml b/src/tests/quick-tests/tst_StickerPicker.qml
index dbf08eb..a1f0043 100644
--- a/src/tests/quick-tests/tst_StickerPicker.qml
+++ b/src/tests/quick-tests/tst_StickerPicker.qml
@@ -1,99 +1,97 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2024 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtTest 1.0
import '../../contents/ui' as Kazv
import 'test-helpers.js' as Helpers
import 'test-helpers' as TestHelpers
import moe.kazv.mxc.kazv 0.0 as MK
Item {
id: item
width: 800
height: 600
property var l10n: Helpers.fluentMock
property var matrixSdk: TestHelpers.MatrixSdkMock {}
property var sdkVars: ({})
function makeSticker(sticker) {
return {
type: 'm.sticker',
content: {
body: sticker.body,
url: sticker.mxcUri,
info: sticker.info,
},
};
}
property list<ListModel> stickerPacks: [
ListModel {
id: stickerPack0
ListElement {
shortCode: 'some'
body: 'some'
mxcUri: 'mxc://example.org/some'
makeEventJson: () => makeSticker(stickerPack0.get(0))
}
ListElement {
shortCode: 'some1'
body: 'some1'
mxcUri: 'mxc://example.org/some1'
makeEventJson: () => makeSticker(stickerPack0.get(1))
}
function at(index) {
return stickerPack0.get(index);
}
}
]
+ SignalSpy {
+ id: sendMessageRequestedSpy
+ signalName: 'sendMessageRequested'
+ }
+
Kazv.StickerPicker {
id: stickerPicker
- property var _sendMessageRequested: 0
- property var _lastEventJson: undefined
stickerPackList: ListModel {
id: stickerPackListModel
ListElement {
}
function at(index) {
return stickerPacks[index];
}
}
-
- onSendMessageRequested: (eventJson) => {
- ++stickerPicker._sendMessageRequested;
- stickerPicker._lastEventJson = eventJson;
- }
}
TestCase {
id: stickerPickerTest
name: 'StickerPickerTest'
when: windowShown
- function cleanup() {
- stickerPicker._sendMessageRequested = 0;
- stickerPicker._lastEventJson = undefined;
+ function init() {
+ sendMessageRequestedSpy.clear();
+ sendMessageRequestedSpy.target = stickerPicker;
}
function test_stickerPicker() {
verify(findChild(stickerPicker, 'stickerPack0'));
verify(findChild(stickerPicker, 'sticker0'));
verify(findChild(stickerPicker, 'sticker1'));
const stickerButton = findChild(stickerPicker, 'sticker1');
mouseClick(stickerButton);
- tryVerify(() => stickerPicker._sendMessageRequested, 1000);
- verify(Helpers.deepEqual(stickerPicker._lastEventJson, makeSticker(stickerPack0.get(1))));
+ tryVerify(() => sendMessageRequestedSpy.count, 1000);
+ verify(Helpers.deepEqual(sendMessageRequestedSpy.signalArguments[0][0], makeSticker(stickerPack0.get(1))));
}
}
}
diff --git a/src/tests/quick-tests/tst_UserPage.qml b/src/tests/quick-tests/tst_UserPage.qml
index 6bc6cd2..e41f171 100644
--- a/src/tests/quick-tests/tst_UserPage.qml
+++ b/src/tests/quick-tests/tst_UserPage.qml
@@ -1,409 +1,340 @@
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2023 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtTest 1.0
import '../../contents/ui' as Kazv
import './test-helpers' as TestHelpers
import 'test-helpers.js' as Helpers
import moe.kazv.mxc.kazv 0.0 as MK
Item {
id: upper
width: 800
height: 600
property var l10n: Helpers.fluentMock
property var matrixSdk: TestHelpers.MatrixSdkMock {
property var userId: '@foo:example.com'
}
+ property var mockHelper: TestHelpers.MockHelper {}
property var sdkVars: QtObject {
property var userGivenNicknameMap: QtObject {
id: gnMap
property var map: ({})
- property var _setAndUploadCalled: 0
- property var _setAndUploadArgs: []
- property var _setAndUploadPromise: null
- function setAndUpload(userId, value) {
- ++_setAndUploadCalled;
- _setAndUploadArgs = [userId, value];
- _setAndUploadPromise = promiseComp.createObject(upper);
- return _setAndUploadPromise;
- }
+ property var setAndUpload: mockHelper.promise()
}
}
- property var lastNotification: undefined
-
- function showPassiveNotification(msg) {
- upper.lastNotification = msg;
- }
-
- property var promiseComp: Component {
- TestHelpers.MatrixPromiseMock {
- }
- }
+ property var showPassiveNotification: mockHelper.noop()
property var powerLevelMapping: ({
'@mew:example.com': 100,
})
property var room: ({
userPowerLevel(userId) {
return powerLevelMapping[userId];
},
- setUserPowerLevel(userId, powerLevel) {
- upper.room._setUserPowerLevelUserId = userId;
- upper.room._setUserPowerLevelPowerLevel = powerLevel;
- upper.room._setUserPowerLevelPromise = promiseComp.createObject(upper.room);
- return upper.room._setUserPowerLevelPromise;
- },
- ensureStateEvent(type, stateKey) {
- const promise = promiseComp.createObject(upper.room);
- console.log('ensureStateEvent', type, stateKey, promise);
- upper.room._ensureStateEventPromises.push(promise);
- console.log(upper.room._ensureStateEventPromises);
- return promise;
- },
- kickUser(userId, reason) {
- upper.room._kickUserUserId = userId;
- upper.room._kickUserReason = reason;
- upper.room._kickUserPromise = promiseComp.createObject(upper.room);
- return upper.room._kickUserPromise;
- },
- banUser(userId, reason) {
- upper.room._banUserUserId = userId;
- upper.room._banUserReason = reason;
- upper.room._banUserPromise = promiseComp.createObject(upper.room);
- return upper.room._banUserPromise;
- },
- unbanUser(userId) {
- upper.room._unbanUserUserId = userId;
- upper.room._unbanUserPromise = promiseComp.createObject(upper.room);
- return upper.room._unbanUserPromise;
- },
-
- _setUserPowerLevelUserId: undefined,
- _setUserPowerLevelPowerLevel: undefined,
- _setUserPowerLevelPromise: undefined,
- _ensureStateEventPromises: [],
- _kickUserUserId: undefined,
- _kickUserReason: undefined,
- _kickUserPromise: undefined,
- _banUserUserId: undefined,
- _banUserReason: undefined,
- _banUserPromise: undefined,
- _unbanUserUserId: undefined,
- _unbanUserPromise: undefined,
+ setUserPowerLevel: mockHelper.promise(),
+ ensureStateEvent: mockHelper.promise(),
+ kickUser: mockHelper.promise(),
+ banUser: mockHelper.promise(),
+ unbanUser: mockHelper.promise(),
})
ColumnLayout {
Kazv.UserPage {
id: userPage
userId: '@mew:example.com'
user: ({ userId: '@mew:example.com', name: 'mew' })
room: upper.room
}
Kazv.UserPage {
id: userPageSelf
userId: '@foo:example.com'
}
}
TestCase {
id: userPageTest
name: 'UserPageTest'
when: windowShown
function initTestCase() {
if (MK.KazvUtil.kfQtMajorVersion === 6) {
userPage.contentItem.clip = false;
userPageSelf.contentItem.clip = false;
}
}
function cleanupTestCase() {
- upper.room._setUserPowerLevelUserId = undefined;
- upper.room._setUserPowerLevelPowerLevel = undefined;
- upper.room._setUserPowerLevelPromise = undefined;
- upper.room._ensureStateEventPromises = [];
- upper.room._kickUserUserId = undefined;
- upper.room._kickUserReason = undefined;
- upper.room._kickUserPromise = undefined;
- upper.room._banUserUserId = undefined;
- upper.room._banUserReason = undefined;
- upper.room._banUserPromise = undefined;
- upper.room._unbanUserUserId = undefined;
- upper.room._unbanUserPromise = undefined;
+ mockHelper.clearAll();
userPage.submittingPowerLevel = false;
userPage.editingPowerLevel = false;
userPage.powerLevelsLoaded = false;
userPage.banningUser = false;
userPage.unbanningUser = false;
- upper.lastNotification = undefined;
userPage.user = ({});
gnMap.map = {};
- gnMap._setAndUploadCalled = 0;
- gnMap._setAndUploadArgs = [];
- gnMap._setAndUploadPromise = null;
}
function test_powerLevel() {
verify(findChild(userPage, 'powerLevelLabel').visible);
verify(findChild(userPage, 'powerLevelLabel').text.includes('100'));
verify(!findChild(userPage, 'newPowerLevelInput').visible);
const editButton = findChild(userPage, 'editPowerLevelButton');
verify(editButton.visible);
verify(!editButton.enabled);
- tryVerify(() => userPage.room._ensureStateEventPromises[1], 1000);
- userPage.room._ensureStateEventPromises[1].resolve(true, {});
+ tryVerify(() => userPage.room.ensureStateEvent.retVals[1], 1000);
+ userPage.room.ensureStateEvent.retVals[1].resolve(true, {});
tryVerify(() => editButton.enabled);
mouseClick(editButton);
const textField = findChild(userPage, 'newPowerLevelInput');
tryVerify(() => textField.visible, 1000);
textField.text = '50';
const saveButton = findChild(userPage, 'savePowerLevelButton');
mouseClick(saveButton);
- tryVerify(() => room._setUserPowerLevelPromise, 1000);
+ tryVerify(() => room.setUserPowerLevel.lastRetVal(), 1000);
// Text field is not closed until the request succeeded
verify(textField.visible);
verify(textField.readOnly);
- verify(room._setUserPowerLevelUserId === '@mew:example.com');
- verify(room._setUserPowerLevelPowerLevel === 50);
+ verify(room.setUserPowerLevel.lastArgs()[0] === '@mew:example.com');
+ verify(room.setUserPowerLevel.lastArgs()[1] === 50);
// the buttons are disabled until the request responded
verify(!saveButton.enabled);
verify(!findChild(userPage, 'discardPowerLevelButton').enabled);
- room._setUserPowerLevelPromise.resolve(true, {});
+ room.setUserPowerLevel.lastRetVal().resolve(true, {});
tryVerify(() => !textField.visible, 1000);
// Text field is editable when we try to edit the power level again
mouseClick(editButton);
tryVerify(() => textField.visible, 1000);
verify(!textField.readOnly);
}
function test_powerLevelEditFailure() {
- tryVerify(() => userPage.room._ensureStateEventPromises[1], 1000);
- userPage.room._ensureStateEventPromises[1].resolve(true, {});
+ tryVerify(() => userPage.room.ensureStateEvent.retVals[1], 1000);
+ userPage.room.ensureStateEvent.retVals[1].resolve(true, {});
const editButton = findChild(userPage, 'editPowerLevelButton');
tryVerify(() => editButton.enabled);
mouseClick(editButton);
const textField = findChild(userPage, 'newPowerLevelInput');
tryVerify(() => textField.visible, 1000);
textField.text = '50';
const saveButton = findChild(userPage, 'savePowerLevelButton');
mouseClick(saveButton);
- tryVerify(() => room._setUserPowerLevelPromise, 1000);
+ tryVerify(() => room.setUserPowerLevel.lastRetVal(), 1000);
// Text field is not closed until the request succeeded
- room._setUserPowerLevelPromise.resolve(false, {});
+ room.setUserPowerLevel.lastRetVal().resolve(false, {});
// text field is no longer readonly if failed
tryVerify(() => !textField.readOnly, 1000);
// show error message
- verify(upper.lastNotification);
+ verify(upper.showPassiveNotification.calledTimes());
// the buttons are enabled when the request responded
verify(saveButton.enabled);
verify(findChild(userPage, 'discardPowerLevelButton').enabled);
}
/**
* The zz prefix is to allow this test to run after tst_powerlevel,
* which would otherwise fail for unknown reasons.
*/
function test_zzbanUser() {
// Ban user is only available if membership ! = "ban"
userPage.user = ({ membership: "join" });
const banButton = findChild(userPage, 'banUserButton');
verify(banButton.visible);
verify(banButton.enabled);
const reasonDialog = findChild(userPage, 'banUserReasonDialog');
verify(!reasonDialog.opened);
const textField = findChild(userPage, 'banUserReasonInput');
mouseClick(banButton);
verify(!reasonDialog.opened);
verify(textField.visible);
verify(!textField.readOnly);
textField.text = 'some reason';
reasonDialog.accept();
tryVerify(() => !reasonDialog.opened, 1000);
tryVerify(() => !banButton.enabled, 1000);
- tryVerify(() => room._banUserPromise, 1000);
- verify(room._banUserUserId === '@mew:example.com');
- verify(room._banUserReason === 'some reason');
+ tryVerify(() => room.banUser.lastRetVal(), 1000);
+ verify(room.banUser.lastArgs()[0] === '@mew:example.com');
+ verify(room.banUser.lastArgs()[1] === 'some reason');
- room._banUserPromise.resolve(true, {});
+ room.banUser.lastRetVal().resolve(true, {});
tryVerify(() => textField.text === '', 1000);
tryVerify(() => banButton.enabled, 1000);
}
function test_zzbanUserFailure() {
// Ban user is only available if membership ! = "ban"
userPage.user = ({ membership: "join" });
const banButton = findChild(userPage, 'banUserButton');
verify(banButton.visible);
verify(banButton.enabled);
const reasonDialog = findChild(userPage, 'banUserReasonDialog');
verify(!reasonDialog.opened);
const textField = findChild(userPage, 'banUserReasonInput');
mouseClick(banButton);
verify(!reasonDialog.opened);
verify(textField.visible);
verify(!textField.readOnly);
textField.text = 'some reason';
reasonDialog.accept();
tryVerify(() => !reasonDialog.opened, 1000);
tryVerify(() => !banButton.enabled, 1000);
- tryVerify(() => room._banUserPromise, 1000);
- verify(room._banUserUserId === '@mew:example.com');
- verify(room._banUserReason === 'some reason');
+ tryVerify(() => room.banUser.lastRetVal(), 1000);
+ verify(room.banUser.lastArgs()[0] === '@mew:example.com');
+ verify(room.banUser.lastArgs()[1] === 'some reason');
- room._banUserPromise.resolve(false, {});
- tryVerify(() => upper.lastNotification, 1000);
+ room.banUser.lastRetVal().resolve(false, {});
+ tryVerify(() => upper.showPassiveNotification.calledTimes(), 1000);
// text field is not cleared when failed
tryVerify(() => textField.text === 'some reason', 1000);
tryVerify(() => banButton.enabled, 1000);
}
function test_unbanUser() {
// Unban user is only available if membership == "ban"
userPage.user = ({ membership: "ban" });
const unbanButton = findChild(userPage, 'unbanUserButton');
verify(unbanButton.visible);
verify(unbanButton.enabled);
mouseClick(unbanButton);
tryVerify(() => !unbanButton.enabled, 1000);
- verify(room._unbanUserUserId == '@mew:example.com');
- verify(room._unbanUserPromise);
+ verify(room.unbanUser.lastArgs()[0] == '@mew:example.com');
+ verify(room.unbanUser.lastRetVal());
- room._unbanUserPromise.resolve(true, {});
+ room.unbanUser.lastRetVal().resolve(true, {});
tryVerify(() => unbanButton.enabled, 1000);
}
function test_unbanUserFailure() {
// Unban user is only available if membership == "ban"
userPage.user = ({ membership: "ban" });
const unbanButton = findChild(userPage, 'unbanUserButton');
verify(unbanButton.visible);
verify(unbanButton.enabled);
mouseClick(unbanButton);
tryVerify(() => !unbanButton.enabled, 1000);
- verify(room._unbanUserUserId == '@mew:example.com');
- verify(room._unbanUserPromise);
+ verify(room.unbanUser.lastArgs()[0] == '@mew:example.com');
+ verify(room.unbanUser.lastRetVal());
- room._unbanUserPromise.resolve(false, {});
- tryVerify(() => upper.lastNotification, 1000);
+ room.unbanUser.lastRetVal().resolve(false, {});
+ tryVerify(() => upper.showPassiveNotification.calledTimes(), 1000);
tryVerify(() => unbanButton.enabled, 1000);
}
}
function test_kickUser() {
const kickButton = findChild(userPage, 'kickUserButton');
verify(kickButton.visible);
verify(kickButton.enabled);
const reasonDialog = findChild(userPage, 'kickUserReasonDialog');
verify(!reasonDialog.opened);
const textField = findChild(userPage, 'kickUserReasonInput');
mouseClick(kickButton);
verify(!reasonDialog.opened);
verify(textField.visible);
verify(!textField.readOnly);
textField.text = 'some reason';
reasonDialog.accept();
tryVerify(() => !reasonDialog.opened, 1000);
tryVerify(() => !kickButton.enabled, 1000);
- tryVerify(() => room._kickUserPromise, 1000);
- verify(room._kickUserUserId === '@mew:example.com');
- verify(room._kickUserReason === 'some reason');
+ tryVerify(() => room.kickUser.lastRetVal(), 1000);
+ verify(room.kickUser.lastArgs()[0] === '@mew:example.com');
+ verify(room.kickUser.lastArgs()[1] === 'some reason');
- room._kickUserPromise.resolve(true, {});
+ room.kickUser.lastRetVal().resolve(true, {});
tryVerify(() => textField.text === '', 1000);
// still available only because this is a mock call, no real action
// is performed on the user
tryVerify(() => kickButton.enabled, 1000);
}
function test_overridedName() {
const input = findChild(userPage, 'nameOverrideInput');
compare(input.text, '');
gnMap.map = { '@mew:example.com': 'something' };
compare(input.text, 'something');
verify(!findChild(userPageSelf, 'nameOverrideInput').visible);
}
function test_updateOverridedName() {
const input = findChild(userPage, 'nameOverrideInput');
compare(input.text, '');
verify(input.enabled);
input.text = 'something';
const saveButton = findChild(userPage, 'saveNameOverrideButton');
verify(saveButton.enabled);
mouseClick(saveButton);
tryVerify(() => !input.enabled);
verify(!saveButton.enabled);
- compare(gnMap._setAndUploadCalled, 1);
- verify(TestHelpers.deepEqual(gnMap._setAndUploadArgs, ['@mew:example.com', 'something']));
- gnMap._setAndUploadPromise.resolve(true, {});
+ compare(gnMap.setAndUpload.calledTimes(), 1);
+ verify(TestHelpers.deepEqual(gnMap.setAndUpload.lastRetVal(), ['@mew:example.com', 'something']));
+ gnMap.setAndUpload.lastRetVal().resolve(true, {});
tryVerify(() => input.enabled);
verify(saveButton.enabled);
}
function test_updateOverridedNameFailed() {
const input = findChild(userPage, 'nameOverrideInput');
compare(input.text, '');
verify(input.enabled);
input.text = 'something';
const saveButton = findChild(userPage, 'saveNameOverrideButton');
verify(saveButton.enabled);
mouseClick(saveButton);
tryVerify(() => !input.enabled);
verify(!saveButton.enabled);
- compare(gnMap._setAndUploadCalled, 1);
- verify(TestHelpers.deepEqual(gnMap._setAndUploadArgs, ['@mew:example.com', 'something']));
- gnMap._setAndUploadPromise.resolve(false, {});
+ compare(gnMap.setAndUpload.calledTimes(), 1);
+ verify(TestHelpers.deepEqual(gnMap.setAndUpload.lastArgs(), ['@mew:example.com', 'something']));
+ gnMap.setAndUpload.lastRetVal().resolve(false, {});
tryVerify(() => input.enabled);
verify(saveButton.enabled);
}
function test_removeOverridedName() {
gnMap.map = { '@mew:example.com': 'something' };
const input = findChild(userPage, 'nameOverrideInput');
compare(input.text, 'something');
input.text = '';
const saveButton = findChild(userPage, 'saveNameOverrideButton');
verify(saveButton.enabled);
mouseClick(saveButton);
tryVerify(() => !input.enabled);
verify(!saveButton.enabled);
- compare(gnMap._setAndUploadCalled, 1);
- verify(TestHelpers.deepEqual(gnMap._setAndUploadArgs, ['@mew:example.com', null]));
- gnMap._setAndUploadPromise.resolve(true, {});
+ compare(gnMap.setAndUpload.calledTimes(), 1);
+ verify(TestHelpers.deepEqual(gnMap.setAndUpload.lastArgs(), ['@mew:example.com', null]));
+ gnMap.setAndUpload.lastRetVal().resolve(true, {});
tryVerify(() => input.enabled);
verify(saveButton.enabled);
}
}

File Metadata

Mime Type
text/x-diff
Expires
Wed, Oct 14, 1:07 AM (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1786954
Default Alt Text
(80 KB)

Event Timeline