mirror of
https://github.com/Novaloop-AG/healthchat-web.git
synced 2026-11-07 06:58:25 +00:00
Fix html export when feature_jump_to_date is enabled (#30828)
* Fix html export when feature_jump_to_date is enabled * Fix tests and lint
This commit is contained in:
@@ -320,7 +320,7 @@ export default class DateSeparator extends React.Component<IProps, IState> {
|
|||||||
const label = this.getLabel();
|
const label = this.getLabel();
|
||||||
|
|
||||||
let dateHeaderContent: JSX.Element;
|
let dateHeaderContent: JSX.Element;
|
||||||
if (this.state.jumpToDateEnabled) {
|
if (this.state.jumpToDateEnabled && !this.props.forExport) {
|
||||||
dateHeaderContent = this.renderJumpToDateMenu();
|
dateHeaderContent = this.renderJumpToDateMenu();
|
||||||
} else {
|
} else {
|
||||||
dateHeaderContent = (
|
dateHeaderContent = (
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import {
|
|||||||
import fetchMock from "fetch-mock-jest";
|
import fetchMock from "fetch-mock-jest";
|
||||||
import escapeHtml from "escape-html";
|
import escapeHtml from "escape-html";
|
||||||
import { type RelationsContainer } from "matrix-js-sdk/src/models/relations-container";
|
import { type RelationsContainer } from "matrix-js-sdk/src/models/relations-container";
|
||||||
|
import { mocked } from "jest-mock";
|
||||||
|
|
||||||
import { filterConsole, mkReaction, mkStubRoom, REPEATABLE_DATE, stubClient } from "../../../test-utils";
|
import { filterConsole, mkReaction, mkStubRoom, REPEATABLE_DATE, stubClient } from "../../../test-utils";
|
||||||
import { ExportType, type IExportOptions } from "../../../../src/utils/exportUtils/exportUtils";
|
import { ExportType, type IExportOptions } from "../../../../src/utils/exportUtils/exportUtils";
|
||||||
@@ -30,8 +31,10 @@ import SdkConfig from "../../../../src/SdkConfig";
|
|||||||
import HTMLExporter from "../../../../src/utils/exportUtils/HtmlExport";
|
import HTMLExporter from "../../../../src/utils/exportUtils/HtmlExport";
|
||||||
import DMRoomMap from "../../../../src/utils/DMRoomMap";
|
import DMRoomMap from "../../../../src/utils/DMRoomMap";
|
||||||
import { mediaFromMxc } from "../../../../src/customisations/Media";
|
import { mediaFromMxc } from "../../../../src/customisations/Media";
|
||||||
|
import SettingsStore from "../../../../src/settings/SettingsStore";
|
||||||
|
|
||||||
jest.mock("jszip");
|
jest.mock("jszip");
|
||||||
|
jest.mock("../../../../src/settings/SettingsStore");
|
||||||
|
|
||||||
const EVENT_MESSAGE: IRoomEvent = {
|
const EVENT_MESSAGE: IRoomEvent = {
|
||||||
event_id: "$1",
|
event_id: "$1",
|
||||||
@@ -88,6 +91,7 @@ describe("HTMLExport", () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
jest.clearAllMocks();
|
||||||
jest.useFakeTimers();
|
jest.useFakeTimers();
|
||||||
jest.setSystemTime(REPEATABLE_DATE);
|
jest.setSystemTime(REPEATABLE_DATE);
|
||||||
|
|
||||||
@@ -96,6 +100,13 @@ describe("HTMLExport", () => {
|
|||||||
|
|
||||||
room = new Room("!myroom:example.org", client, "@me:example.org");
|
room = new Room("!myroom:example.org", client, "@me:example.org");
|
||||||
client.getRoom.mockReturnValue(room);
|
client.getRoom.mockReturnValue(room);
|
||||||
|
|
||||||
|
// Set up a default mock that uses the actual SettingsStore implementation
|
||||||
|
const actualSettingsStore = jest.requireActual("../../../../src/settings/SettingsStore").default;
|
||||||
|
mocked(SettingsStore).getValue.mockImplementation((name: any, roomId?: any, excludeDefault?: any): any => {
|
||||||
|
// Default to the real implementation
|
||||||
|
return actualSettingsStore.getValue(name, roomId, excludeDefault);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function mockMessages(...events: IRoomEvent[]): void {
|
function mockMessages(...events: IRoomEvent[]): void {
|
||||||
@@ -675,4 +686,34 @@ describe("HTMLExport", () => {
|
|||||||
const file = getMessageFile(exporter);
|
const file = getMessageFile(exporter);
|
||||||
expect(await file.text()).toContain(reaction.getContent()["m.relates_to"]?.key);
|
expect(await file.text()).toContain(reaction.getContent()["m.relates_to"]?.key);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should not crash when jump to date flag is enabled", async () => {
|
||||||
|
// Override just the feature flag for this specific test
|
||||||
|
const originalMock = mocked(SettingsStore).getValue.getMockImplementation();
|
||||||
|
|
||||||
|
mocked(SettingsStore).getValue.mockImplementation((name: any, roomId?: any, excludeDefault?: any): any => {
|
||||||
|
if (name === "feature_jump_to_date") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Fallback to the default mock implementation set in beforeEach
|
||||||
|
return originalMock!(name, roomId, excludeDefault);
|
||||||
|
});
|
||||||
|
|
||||||
|
mockMessages(EVENT_MESSAGE);
|
||||||
|
const exporter = new HTMLExporter(
|
||||||
|
room,
|
||||||
|
ExportType.LastNMessages,
|
||||||
|
{
|
||||||
|
attachmentsIncluded: false,
|
||||||
|
maxSize: 1_024 * 1_024,
|
||||||
|
numberOfMessages: 40,
|
||||||
|
},
|
||||||
|
() => {},
|
||||||
|
);
|
||||||
|
|
||||||
|
await exporter.export();
|
||||||
|
|
||||||
|
const file = getMessageFile(exporter);
|
||||||
|
expect(file).not.toBeUndefined();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user