Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F85807146
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
80 KB
Referenced Files
None
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
Mode
rK kazv
Attached
Detach File
Event Timeline
Log In to Comment