mirror of
https://git.quad4.io/RNS-Things/MeshChatX.git
synced 2026-03-31 08:15:43 +00:00
- Introduced new test suite for `parse_lxmf_display_name`, `parse_nomadnetwork_node_display_name`, and related functions using Hypothesis for property-based testing. - Added various strategies to generate diverse input data, including edge cases for invalid and long names. - Implemented tests to ensure robustness against invalid base64 inputs and to verify expected behavior with valid and corrupted data. - Created smoke tests for frontend components including BotsPage, ForwarderPage, and others to ensure proper rendering and functionality.
124 lines
4.1 KiB
JavaScript
124 lines
4.1 KiB
JavaScript
import { mount } from "@vue/test-utils";
|
|
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
import TranslatorPage from "@/components/translator/TranslatorPage.vue";
|
|
|
|
describe("TranslatorPage.vue", () => {
|
|
let axiosMock;
|
|
|
|
beforeEach(() => {
|
|
axiosMock = {
|
|
get: vi.fn(),
|
|
post: vi.fn(),
|
|
};
|
|
window.axios = axiosMock;
|
|
|
|
axiosMock.get.mockImplementation((url) => {
|
|
if (url === "/api/v1/config") {
|
|
return Promise.resolve({ data: { config: { translator_enabled: true } } });
|
|
}
|
|
if (url === "/api/v1/translator/languages") {
|
|
return Promise.resolve({
|
|
data: {
|
|
languages: [
|
|
{ code: "en", name: "English", source: "argos" },
|
|
{ code: "de", name: "German", source: "argos" },
|
|
{ code: "en", name: "English", source: "libretranslate" },
|
|
{ code: "de", name: "German", source: "libretranslate" },
|
|
],
|
|
has_argos: true,
|
|
},
|
|
});
|
|
}
|
|
return Promise.resolve({ data: {} });
|
|
});
|
|
});
|
|
|
|
afterEach(() => {
|
|
delete window.axios;
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
const mountTranslatorPage = () => {
|
|
return mount(TranslatorPage, {
|
|
global: {
|
|
mocks: {
|
|
$t: (key) => key,
|
|
},
|
|
stubs: {
|
|
MaterialDesignIcon: {
|
|
template: '<div class="mdi-stub" :data-icon-name="iconName"></div>',
|
|
props: ["iconName"],
|
|
},
|
|
RouterLink: true,
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
it("renders the translator page", async () => {
|
|
const wrapper = mountTranslatorPage();
|
|
await vi.waitFor(() => expect(wrapper.vm.config).not.toBeNull());
|
|
expect(wrapper.text()).toContain("Translator");
|
|
});
|
|
|
|
it("switches translation modes", async () => {
|
|
const wrapper = mountTranslatorPage();
|
|
await vi.waitFor(() => expect(wrapper.vm.config).not.toBeNull());
|
|
|
|
const libreButton = wrapper.findAll("button").find((b) => b.text().includes("LibreTranslate"));
|
|
await libreButton.trigger("click");
|
|
expect(wrapper.vm.translationMode).toBe("libretranslate");
|
|
expect(wrapper.text()).toContain("LibreTranslate API Server");
|
|
|
|
const argosButton = wrapper.findAll("button").find((b) => b.text().includes("Argos Translate"));
|
|
await argosButton.trigger("click");
|
|
expect(wrapper.vm.translationMode).toBe("argos");
|
|
});
|
|
|
|
it("calls translate API and displays result", async () => {
|
|
window.axios.post = vi.fn().mockResolvedValue({
|
|
data: {
|
|
translated_text: "Hallo Welt",
|
|
source_lang: "en",
|
|
target_lang: "de",
|
|
},
|
|
});
|
|
|
|
const wrapper = mountTranslatorPage();
|
|
await vi.waitFor(() => expect(wrapper.vm.config).not.toBeNull());
|
|
|
|
await wrapper.setData({
|
|
inputText: "Hello World",
|
|
sourceLang: "en",
|
|
targetLang: "de",
|
|
});
|
|
|
|
await wrapper.vm.$nextTick();
|
|
|
|
// Call directly to verify logic
|
|
await wrapper.vm.translateText();
|
|
|
|
expect(window.axios.post).toHaveBeenCalledWith(
|
|
"/api/v1/translator/translate",
|
|
expect.objectContaining({
|
|
text: "Hello World",
|
|
source_lang: "en",
|
|
target_lang: "de",
|
|
})
|
|
);
|
|
|
|
await vi.waitFor(() => expect(wrapper.text()).toContain("Hallo Welt"));
|
|
});
|
|
|
|
it("swaps languages", async () => {
|
|
const wrapper = mountTranslatorPage();
|
|
await wrapper.setData({ sourceLang: "en", targetLang: "de" });
|
|
|
|
const swapButton = wrapper.findAll("button").find((b) => b.text().includes("Swap"));
|
|
await swapButton.trigger("click");
|
|
|
|
expect(wrapper.vm.sourceLang).toBe("de");
|
|
expect(wrapper.vm.targetLang).toBe("en");
|
|
});
|
|
});
|