updating code using knex.

This commit is contained in:
Jordan
2025-03-02 20:15:27 -08:00
parent d00e6d62ff
commit a9b5ccf84f
15 changed files with 2557 additions and 605 deletions

View File

@ -3,108 +3,115 @@ import { render, screen, fireEvent, act } from "@testing-library/react-native";
import SettingsComponent from "@/components/Settings";
import { language_matrix } from "@/app/i18n/api";
import { Settings } from "@/app/lib/settings";
import { getDb, migrateDb } from "@/app/lib/db";
import { getDb } from "@/app/lib/db";
import { Knex } from "knex";
const RENDER_TIME = 1000;
jest.mock("@/app/i18n/api", () => {
class LanguageServer {
fetchLanguages = () => {
return {
"en": {
code: "en",
name: "English",
targets: [
"fr",
"es"
]
},
"fr": {
code: "fr",
name: "French",
targets: [
"en",
"es"
]
},
"es": {
code: "es",
name: "Spanish",
targets: [
"en",
"fr"
]
},
} as language_matrix
}
}
class Translator {
translate = jest.fn((text : string, target : string) => {
return "Hola, como estas?"
})
}
return {
LanguageServer,
Translator,
}
})
class LanguageServer {
fetchLanguages = () => {
return {
en: {
code: "en",
name: "English",
targets: ["fr", "es"],
},
fr: {
code: "fr",
name: "French",
targets: ["en", "es"],
},
es: {
code: "es",
name: "Spanish",
targets: ["en", "fr"],
},
} as language_matrix;
};
}
class Translator {
translate = jest.fn((text: string, target: string) => {
return "Hola, como estas?";
});
}
return {
LanguageServer,
Translator,
};
});
describe("SettingsComponent", () => {
beforeEach(async() => {
await migrateDb();
const settings = await Settings.getDefault();
await settings.setHostLanguage("en");
await settings.setLibretranslateBaseUrl("https://example.com");
})
let db: Knex;
let settings: Settings;
beforeAll(() => {
jest.useFakeTimers();
})
beforeEach(async () => {
db = await getDb("development");
settings = new Settings(db);
await settings.setHostLanguage("en");
await settings.setLibretranslateBaseUrl("https://example.com");
});
afterAll(() => {
jest.useRealTimers()
})
afterEach(async () => {
await db.migrate.down();
await db.destroy();
});
test("renders correctly with initial settings", async () => {
render(<SettingsComponent />);
jest.advanceTimersByTime(RENDER_TIME);
screen.debug();
beforeAll(() => {
jest.useFakeTimers();
});
// Wait for the component to fetch and display the initial settings
await screen.findByText(/Host Language:/i);
await screen.findByText(/LibreTranslate Base URL:/i);
afterAll(() => {
jest.useRealTimers();
});
// expect(screen.getByDisplayValue("English")).toBeTruthy();
expect(screen.getByAccessibilityHint("libretranslate base url")).toBeTruthy();
});
test("renders correctly with initial settings", async () => {
render(<SettingsComponent />);
jest.advanceTimersByTime(RENDER_TIME);
screen.debug();
test("updates host language setting when input changes", async () => {
render(<SettingsComponent />);
// Wait for the component to fetch and display the initial settings
await screen.findByText(/Host Language:/i);
await screen.findByText(/LibreTranslate Base URL:/i);
// Wait for the component to fetch and display the initial settings
await screen.findByText(/Host Language:/i);
await screen.findByText(/LibreTranslate Base URL:/i);
// expect(screen.getByDisplayValue("English")).toBeTruthy();
expect(
screen.getByAccessibilityHint("libretranslate base url")
).toBeTruthy();
});
// Change the host language input value
const picker = screen.getByAccessibilityHint("hostLanguage");
fireEvent(picker, "onvalueChange", "es");
expect(picker.props.selectedIndex).toStrictEqual(0);
});
test("updates host language setting when input changes", async () => {
render(<SettingsComponent />);
test("updates LibreTranslate base URL setting when input changes", async () => {
render(<SettingsComponent />);
// Wait for the component to fetch and display the initial settings
await screen.findByText(/Host Language:/i);
await screen.findByText(/LibreTranslate Base URL:/i);
jest.advanceTimersByTime(RENDER_TIME)
screen.debug();
// Change the host language input value
const picker = screen.getByAccessibilityHint("hostLanguage");
fireEvent(picker, "onvalueChange", "es");
expect(picker.props.selectedIndex).toStrictEqual(0);
});
// Wait for the component to fetch and display the initial settings
await screen.findByText(/Host Language:/i);
await screen.findByText(/LibreTranslate Base URL:/i);
test("updates LibreTranslate base URL setting when input changes", async () => {
render(<SettingsComponent />);
// Change the LibreTranslate base URL input value
fireEvent.changeText(screen.getByAccessibilityHint("libretranslate base url"), "http://new-example.com");
jest.advanceTimersByTime(RENDER_TIME);
jest.advanceTimersByTime(RENDER_TIME);
screen.debug();
expect(screen.getByAccessibilityHint("libretranslate base url")).toBeTruthy();
});
});
// Wait for the component to fetch and display the initial settings
await screen.findByText(/Host Language:/i);
await screen.findByText(/LibreTranslate Base URL:/i);
// Change the LibreTranslate base URL input value
fireEvent.changeText(
screen.getByAccessibilityHint("libretranslate base url"),
"http://new-example.com"
);
jest.advanceTimersByTime(RENDER_TIME);
expect(
screen.getByAccessibilityHint("libretranslate base url")
).toBeTruthy();
});
});