Files
enterprise-addons/documents_spreadsheet/static/tests/spreadsheet_templates/template_collaborative.test.js
T

93 lines
3.2 KiB
JavaScript

import { defineDocumentSpreadsheetModels } from "@documents_spreadsheet/../tests/helpers/data";
import {
createSpreadsheetTemplate,
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";
describe.current.tags("desktop");
defineDocumentSpreadsheetModels();
test("Number of connected users is correctly rendered", async function () {
const { transportService } = await createSpreadsheetTemplate();
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 { model } = await createSpreadsheetTemplate();
const clients = [...model.getters.getConnectedClients()];
expect(clients.length).toBe(1);
const localClient = clients[0];
expect(localClient.name).toBe("Mitchell Admin");
expect(localClient.userId).toBe(user.userId);
});
test("Sync status is correctly rendered", async function () {
const { model, transportService } = await createSpreadsheetTemplate();
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 createSpreadsheetTemplate();
transportService.broadcast({
type: "REMOTE_REVISION",
serverRevisionId: "an invalid revision id",
nextRevisionId: "the next revision id",
revision: {},
});
expect.verifySteps(["reload"]);
});