Merge pull request #320 from etkecc/broken-upgrade
Broken upgrade (now fixed)
This commit is contained in:
@@ -2,7 +2,7 @@ import type { JestConfigWithTsJest } from "ts-jest";
|
|||||||
|
|
||||||
const config: JestConfigWithTsJest = {
|
const config: JestConfigWithTsJest = {
|
||||||
preset: "ts-jest",
|
preset: "ts-jest",
|
||||||
testEnvironment: "jsdom",
|
testEnvironment: "jest-fixed-jsdom",
|
||||||
collectCoverage: true,
|
collectCoverage: true,
|
||||||
coveragePathIgnorePatterns: ["node_modules", "dist"],
|
coveragePathIgnorePatterns: ["node_modules", "dist"],
|
||||||
coverageDirectory: "<rootDir>/coverage/",
|
coverageDirectory: "<rootDir>/coverage/",
|
||||||
|
|||||||
19
package.json
19
package.json
@@ -11,20 +11,20 @@
|
|||||||
"url": "https://github.com/etkecc/synapse-admin"
|
"url": "https://github.com/etkecc/synapse-admin"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.17.0",
|
"@eslint/js": "^9.19.0",
|
||||||
"@testing-library/dom": "^10.0.0",
|
"@testing-library/dom": "^10.0.0",
|
||||||
"@testing-library/jest-dom": "^6.6.3",
|
"@testing-library/jest-dom": "^6.6.3",
|
||||||
"@testing-library/react": "^16.2.0",
|
"@testing-library/react": "^16.2.0",
|
||||||
"@testing-library/user-event": "^14.6.0",
|
"@testing-library/user-event": "^14.6.1",
|
||||||
"@types/jest": "^29.5.14",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/lodash": "^4.17.14",
|
"@types/lodash": "^4.17.14",
|
||||||
"@types/node": "^22.10.7",
|
"@types/node": "^22.10.10",
|
||||||
"@types/papaparse": "^5.3.15",
|
"@types/papaparse": "^5.3.15",
|
||||||
"@types/react": "^18.3.12",
|
"@types/react": "^18.3.12",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.18.2",
|
"@typescript-eslint/eslint-plugin": "^8.18.2",
|
||||||
"@typescript-eslint/parser": "^8.19.0",
|
"@typescript-eslint/parser": "^8.19.0",
|
||||||
"@vitejs/plugin-react": "^4.3.4",
|
"@vitejs/plugin-react": "^4.3.4",
|
||||||
"eslint": "^9.18.0",
|
"eslint": "^9.19.0",
|
||||||
"eslint-config-prettier": "^10.0.1",
|
"eslint-config-prettier": "^10.0.1",
|
||||||
"eslint-plugin-import": "^2.31.0",
|
"eslint-plugin-import": "^2.31.0",
|
||||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||||
@@ -39,8 +39,8 @@
|
|||||||
"ts-jest": "^29.2.5",
|
"ts-jest": "^29.2.5",
|
||||||
"ts-node": "^10.9.2",
|
"ts-node": "^10.9.2",
|
||||||
"typescript": "^5.7.3",
|
"typescript": "^5.7.3",
|
||||||
"typescript-eslint": "^8.20.0",
|
"typescript-eslint": "^8.21.0",
|
||||||
"vite": "^6.0.9",
|
"vite": "^6.0.11",
|
||||||
"vite-plugin-version-mark": "^0.1.4"
|
"vite-plugin-version-mark": "^0.1.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -53,22 +53,21 @@
|
|||||||
"@mui/utils": "^5.16.14",
|
"@mui/utils": "^5.16.14",
|
||||||
"@tanstack/react-query": "^5.64.2",
|
"@tanstack/react-query": "^5.64.2",
|
||||||
"history": "^5.3.0",
|
"history": "^5.3.0",
|
||||||
|
"jest-fixed-jsdom": "^0.0.9",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"papaparse": "^5.5.1",
|
"papaparse": "^5.5.1",
|
||||||
"ra-core": "^5.4.4",
|
"ra-core": "^5.4.4",
|
||||||
"ra-i18n-polyglot": "^5.4.4",
|
"ra-i18n-polyglot": "^5.4.4",
|
||||||
"ra-language-english": "^5.4.4",
|
"ra-language-english": "^5.4.4",
|
||||||
"ra-language-farsi": "^5.1.0",
|
"ra-language-farsi": "^5.1.0",
|
||||||
"ra-language-french": "^5.4.4",
|
"ra-language-french": "^5.5.2",
|
||||||
"ra-language-italian": "^3.13.1",
|
"ra-language-italian": "^3.13.1",
|
||||||
"ra-language-russian": "^4.14.2",
|
"ra-language-russian": "^4.14.2",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"react-admin": "^5.4.4",
|
"react-admin": "^5.5.2",
|
||||||
"react-dom": "^18.3.1",
|
"react-dom": "^18.3.1",
|
||||||
"react-hook-form": "^7.54.2",
|
"react-hook-form": "^7.54.2",
|
||||||
"react-is": "^18.3.1",
|
"react-is": "^18.3.1",
|
||||||
"react-router": "^6.28.2",
|
|
||||||
"react-router-dom": "^6.28.2",
|
|
||||||
"ts-jest-mock-import-meta": "^1.2.1"
|
"ts-jest-mock-import-meta": "^1.2.1"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,12 +1,32 @@
|
|||||||
import { render, screen } from "@testing-library/react";
|
import { render, screen } from "@testing-library/react";
|
||||||
|
import { BrowserRouter } from "react-router-dom";
|
||||||
import fetchMock from "jest-fetch-mock";
|
import fetchMock from "jest-fetch-mock";
|
||||||
fetchMock.enableMocks();
|
fetchMock.enableMocks();
|
||||||
|
|
||||||
|
jest.mock("./synapse/authProvider", () => ({
|
||||||
|
__esModule: true,
|
||||||
|
default: {
|
||||||
|
logout: jest.fn().mockResolvedValue(undefined),
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
import App from "./App";
|
import App from "./App";
|
||||||
|
|
||||||
describe("App", () => {
|
describe("App", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
// Reset all mocks before each test
|
||||||
|
fetchMock.resetMocks();
|
||||||
|
// Mock any fetch call to return empty JSON immediately
|
||||||
|
fetchMock.mockResponseOnce(JSON.stringify({}));
|
||||||
|
});
|
||||||
|
|
||||||
it("renders", async () => {
|
it("renders", async () => {
|
||||||
render(<App />);
|
render(
|
||||||
|
<BrowserRouter>
|
||||||
|
<App />
|
||||||
|
</BrowserRouter>
|
||||||
|
);
|
||||||
|
|
||||||
await screen.findAllByText("Welcome to Synapse Admin");
|
await screen.findAllByText("Welcome to Synapse Admin");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ const fixedGermanMessages = {
|
|||||||
action: {
|
action: {
|
||||||
...formalGermanMessages.ra.action,
|
...formalGermanMessages.ra.action,
|
||||||
update_application: "Anwendung aktualisieren",
|
update_application: "Anwendung aktualisieren",
|
||||||
|
select_all_button: "Alle auswählen",
|
||||||
},
|
},
|
||||||
page: {
|
page: {
|
||||||
...formalGermanMessages.ra.page,
|
...formalGermanMessages.ra.page,
|
||||||
@@ -28,6 +29,7 @@ const fixedGermanMessages = {
|
|||||||
"Sie haben nicht die erforderlichen Berechtigungen um auf diese Seite zuzugreifen.",
|
"Sie haben nicht die erforderlichen Berechtigungen um auf diese Seite zuzugreifen.",
|
||||||
authentication_error:
|
authentication_error:
|
||||||
"Der Authentifizierungsserver hat einen Fehler zurückgegeben und Ihre Anmeldedaten konnten nicht überprüft werden.",
|
"Der Authentifizierungsserver hat einen Fehler zurückgegeben und Ihre Anmeldedaten konnten nicht überprüft werden.",
|
||||||
|
select_all_limit_reached: "Es gibt zu viele Elemente, um sie alle auszuwählen. Es wurden nur die ersten %{max} Elemente ausgewählt.",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,10 @@ const fixedRussianMessages = {
|
|||||||
no_filtered_results: "Нет результатов",
|
no_filtered_results: "Нет результатов",
|
||||||
clear_filters: "Все фильтры сбросить",
|
clear_filters: "Все фильтры сбросить",
|
||||||
},
|
},
|
||||||
|
action: {
|
||||||
|
...russianMessages.ra.action,
|
||||||
|
select_all_button: "Выбрать все",
|
||||||
|
},
|
||||||
page: {
|
page: {
|
||||||
...russianMessages.ra.page,
|
...russianMessages.ra.page,
|
||||||
empty: "Пусто",
|
empty: "Пусто",
|
||||||
@@ -23,6 +27,7 @@ const fixedRussianMessages = {
|
|||||||
"У вас нет прав доступа к этой странице.",
|
"У вас нет прав доступа к этой странице.",
|
||||||
authentication_error:
|
authentication_error:
|
||||||
"Сервер аутентификации вернул ошибку и не смог проверить ваши учетные данные.",
|
"Сервер аутентификации вернул ошибку и не смог проверить ваши учетные данные.",
|
||||||
|
select_all_limit_reached: "Слишком много элементов для выбора. Были выбраны только первые %{max} элементов.",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ const fixedChineseMessages = {
|
|||||||
},
|
},
|
||||||
action: {
|
action: {
|
||||||
...chineseMessages.ra.action,
|
...chineseMessages.ra.action,
|
||||||
update_application: "Anwendung aktualisieren",
|
update_application: "更新应用",
|
||||||
|
select_all_button: "全部选择",
|
||||||
},
|
},
|
||||||
page: {
|
page: {
|
||||||
...chineseMessages.ra.page,
|
...chineseMessages.ra.page,
|
||||||
@@ -26,6 +27,7 @@ const fixedChineseMessages = {
|
|||||||
"您没有访问此页面的权限。",
|
"您没有访问此页面的权限。",
|
||||||
authentication_error:
|
authentication_error:
|
||||||
"身份验证服务器返回错误,无法验证您的凭据。",
|
"身份验证服务器返回错误,无法验证您的凭据。",
|
||||||
|
select_all_limit_reached: "选择的元素太多。只选择了前 %{max} 个元素。",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import polyglotI18nProvider from "ra-i18n-polyglot";
|
|||||||
|
|
||||||
import { render, screen } from "@testing-library/react";
|
import { render, screen } from "@testing-library/react";
|
||||||
import { AdminContext } from "react-admin";
|
import { AdminContext } from "react-admin";
|
||||||
|
import { BrowserRouter } from "react-router-dom";
|
||||||
|
|
||||||
import LoginPage from "./LoginPage";
|
import LoginPage from "./LoginPage";
|
||||||
import { AppContext } from "../Context";
|
import { AppContext } from "../Context";
|
||||||
@@ -14,9 +15,11 @@ describe("LoginForm", () => {
|
|||||||
it("renders with no restriction to homeserver", async () => {
|
it("renders with no restriction to homeserver", async () => {
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
render(
|
render(
|
||||||
<AdminContext i18nProvider={i18nProvider}>
|
<BrowserRouter>
|
||||||
<LoginPage />
|
<AdminContext i18nProvider={i18nProvider}>
|
||||||
</AdminContext>
|
<LoginPage />
|
||||||
|
</AdminContext>
|
||||||
|
</BrowserRouter>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -33,13 +36,15 @@ describe("LoginForm", () => {
|
|||||||
|
|
||||||
it("renders with single restricted homeserver", () => {
|
it("renders with single restricted homeserver", () => {
|
||||||
render(
|
render(
|
||||||
<AppContext.Provider
|
<BrowserRouter>
|
||||||
value={{ restrictBaseUrl: "https://matrix.example.com", asManagedUsers: [], menu: [] }}
|
<AppContext.Provider
|
||||||
>
|
value={{ restrictBaseUrl: "https://matrix.example.com", asManagedUsers: [], menu: [] }}
|
||||||
|
>
|
||||||
<AdminContext i18nProvider={i18nProvider}>
|
<AdminContext i18nProvider={i18nProvider}>
|
||||||
<LoginPage />
|
<LoginPage />
|
||||||
</AdminContext>
|
</AdminContext>
|
||||||
</AppContext.Provider>
|
</AppContext.Provider>
|
||||||
|
</BrowserRouter>
|
||||||
);
|
);
|
||||||
|
|
||||||
screen.getByText(englishMessages.synapseadmin.auth.welcome);
|
screen.getByText(englishMessages.synapseadmin.auth.welcome);
|
||||||
@@ -56,14 +61,16 @@ describe("LoginForm", () => {
|
|||||||
it("renders with multiple restricted homeservers", async () => {
|
it("renders with multiple restricted homeservers", async () => {
|
||||||
render(
|
render(
|
||||||
<AppContext.Provider
|
<AppContext.Provider
|
||||||
value={{
|
value={{
|
||||||
restrictBaseUrl: ["https://matrix.example.com", "https://matrix.example.org"],
|
restrictBaseUrl: ["https://matrix.example.com", "https://matrix.example.org"],
|
||||||
asManagedUsers: [],
|
asManagedUsers: [],
|
||||||
menu: [],
|
menu: [],
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<AdminContext i18nProvider={i18nProvider}>
|
<AdminContext i18nProvider={i18nProvider}>
|
||||||
<LoginPage />
|
<BrowserRouter>
|
||||||
|
<LoginPage />
|
||||||
|
</BrowserRouter>
|
||||||
</AdminContext>
|
</AdminContext>
|
||||||
</AppContext.Provider>
|
</AppContext.Provider>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user