95 lines
3.3 KiB
JavaScript
95 lines
3.3 KiB
JavaScript
import { defineDocumentSpreadsheetModels } from "@documents_spreadsheet/../tests/helpers/data";
|
|
import {
|
|
createSpreadsheet,
|
|
displayedConnectedUsers,
|
|
getSynchedStatus,
|
|
} from "@documents_spreadsheet/../tests/helpers/spreadsheet_test_utils";
|
|
import { describe, expect, test } from "@odoo/hoot";
|
|
import { animationFrame } from "@odoo/hoot-mock";
|
|
import { setCellContent } from "@spreadsheet/../tests/helpers/commands";
|
|
import {
|
|
joinSession,
|
|
leaveSession,
|
|
} from "@spreadsheet_edition/../tests/helpers/collaborative_helpers";
|
|
import { mockService } from "@web/../tests/web_test_helpers";
|
|
import { user } from "@web/core/user";
|
|
|
|
defineDocumentSpreadsheetModels();
|
|
|
|
describe.current.tags("desktop");
|
|
|
|
test("Number of connected users is correctly rendered", async function () {
|
|
const { transportService } = await createSpreadsheet();
|
|
await animationFrame();
|
|
expect(displayedConnectedUsers()).toBe(0, {
|
|
message: "It should display no other connected user",
|
|
});
|
|
joinSession(transportService, { id: 1234, userId: 9999 });
|
|
await animationFrame();
|
|
expect(displayedConnectedUsers()).toBe(1, {
|
|
message: "It should display one other connected users",
|
|
});
|
|
|
|
// The same user is connected with two different tabs.
|
|
joinSession(transportService, { id: 4321, userId: 9999 });
|
|
await animationFrame();
|
|
expect(displayedConnectedUsers()).toBe(1, {
|
|
message: "It should display one other connected users",
|
|
});
|
|
|
|
leaveSession(transportService, 4321);
|
|
await animationFrame();
|
|
expect(displayedConnectedUsers()).toBe(1, {
|
|
message: "It should display one other connected users",
|
|
});
|
|
|
|
leaveSession(transportService, 1234);
|
|
await animationFrame();
|
|
expect(displayedConnectedUsers()).toBe(0, {
|
|
message: "It should display no other connected user",
|
|
});
|
|
});
|
|
|
|
test("collaborative session client has the user id", async function () {
|
|
const uid = user.userId;
|
|
const { model } = await createSpreadsheet();
|
|
const clients = [...model.getters.getConnectedClients()];
|
|
expect(clients.length).toBe(1);
|
|
const localClient = clients[0];
|
|
expect(localClient.name).toBe(user.name);
|
|
expect(localClient.userId).toBe(uid);
|
|
});
|
|
|
|
test("Sync status is correctly rendered", async function () {
|
|
const { model, transportService } = await createSpreadsheet();
|
|
await animationFrame();
|
|
expect(getSynchedStatus()).toBe("Saved");
|
|
await transportService.concurrent(async () => {
|
|
setCellContent(model, "A1", "hello");
|
|
await animationFrame();
|
|
expect(getSynchedStatus()).toBe("Saving");
|
|
});
|
|
await animationFrame();
|
|
expect(getSynchedStatus()).toBe("Saved");
|
|
});
|
|
|
|
test("receiving bad revision reload", async function () {
|
|
mockService("action", {
|
|
doAction(actionRequest) {
|
|
if (actionRequest === "reload_context") {
|
|
expect.step("reload");
|
|
} else {
|
|
return super.doAction(...arguments);
|
|
}
|
|
},
|
|
});
|
|
const { transportService } = await createSpreadsheet();
|
|
transportService.broadcast({
|
|
type: "REMOTE_REVISION",
|
|
serverRevisionId: "an invalid revision id",
|
|
nextRevisionId: "the next revision id",
|
|
revision: {},
|
|
});
|
|
expect.verifySteps(["reload"]);
|
|
});
|