work on downloading some more.
This commit is contained in:
@ -8,11 +8,12 @@ describe('Settings', () => {
|
||||
|
||||
beforeEach(async () => {
|
||||
db = await getDb("development");
|
||||
await migrateDb("development");
|
||||
settings = new Settings(db);
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await migrateDb("development");
|
||||
await migrateDb("development", "down");
|
||||
});
|
||||
|
||||
it('should set the host language in the database', async () => {
|
||||
|
@ -1,101 +1,170 @@
|
||||
// components/ui/__tests__/WhisperFile.spec.tsx
|
||||
// app/lib/__tests__/whisper.spec.tsx
|
||||
|
||||
import React from "react";
|
||||
import { render, act } from "@testing-library/react-native";
|
||||
import { WhisperFile } from "@/app/lib/whisper"; // Adjust the import path as necessary
|
||||
import { getDb } from "@/app/lib/db";
|
||||
import { WhisperFile, WhisperModelTag } from "@/app/lib/whisper"; // Corrected to use WhisperFile and WhisperModelTag instead of WhisperDownloader
|
||||
import { Settings } from "@/app/lib/settings";
|
||||
import { File } from "expo-file-system/next";
|
||||
jest.mock('expo-file-system');
|
||||
import * as FileSystem from 'expo-file-system';
|
||||
|
||||
jest.mock("@/app/lib/db", () => ({
|
||||
getDb: jest.fn().mockResolvedValue({
|
||||
runAsync: jest.fn(),
|
||||
upsert: jest.fn(), // Mock the upsert method used in addToDatabase
|
||||
}),
|
||||
}));
|
||||
|
||||
jest.mock("@/app/lib/settings", () => ({
|
||||
Settings: {
|
||||
getDefault: jest.fn(() => ({
|
||||
getValue: jest.fn((key) => {
|
||||
switch (key) {
|
||||
case "whisper_model":
|
||||
return "base";
|
||||
default:
|
||||
throw new Error(`Invalid setting: '${key}'`);
|
||||
}
|
||||
}),
|
||||
})),
|
||||
},
|
||||
}));
|
||||
|
||||
|
||||
jest.mock("expo-file-system/next", () => {
|
||||
const _next = jest.requireActual("expo-file-system/next");
|
||||
return {
|
||||
..._next,
|
||||
File: jest.fn().mockImplementation(() => ({
|
||||
..._next.File,
|
||||
text: jest.fn(() => {
|
||||
return new String("text");
|
||||
}),
|
||||
})),
|
||||
};
|
||||
});
|
||||
|
||||
describe("WhisperFile", () => {
|
||||
// Corrected to use WhisperFile instead of WhisperDownloader
|
||||
let whisperFile: WhisperFile;
|
||||
|
||||
beforeEach(() => {
|
||||
beforeEach(async () => {
|
||||
whisperFile = new WhisperFile("small");
|
||||
});
|
||||
|
||||
it("should initialize correctly", () => {
|
||||
expect(whisperFile).toBeInstanceOf(WhisperFile);
|
||||
it("should create a download resumable with existing data if available", async () => {
|
||||
const mockExistingData = "mockExistingData";
|
||||
jest.spyOn(whisperFile, "doesTargetExist").mockResolvedValue(true);
|
||||
|
||||
await whisperFile.createDownloadResumable();
|
||||
// expect(whisperFile.targetFileName).toEqual("small.bin");
|
||||
expect(whisperFile.targetPath).toContain("small.bin");
|
||||
|
||||
expect(FileSystem.createDownloadResumable).toHaveBeenCalledWith(
|
||||
"https://huggingface.co/openai/whisper-small/resolve/main/pytorch_model.bin",
|
||||
"file:///whisper/small.bin",
|
||||
{},
|
||||
expect.any(Function),
|
||||
expect.anything(),
|
||||
);
|
||||
});
|
||||
|
||||
describe("getModelFileSize", () => {
|
||||
it("should return the correct model file size", async () => {
|
||||
expect(whisperFile.size).toBeUndefined();
|
||||
await whisperFile.updateMetadata();
|
||||
expect(whisperFile.size).toBeGreaterThan(1000);
|
||||
});
|
||||
});
|
||||
// it("should create a download resumable without existing data if not available", async () => {
|
||||
// jest.spyOn(whisperFile, "doesTargetExist").mockResolvedValue(false);
|
||||
|
||||
describe("getWhisperDownloadStatus", () => {
|
||||
it("should return the correct download status", async () => {
|
||||
const mockStatus = {
|
||||
doesTargetExist: true,
|
||||
isDownloadComplete: false,
|
||||
hasDownloadStarted: true,
|
||||
progress: {
|
||||
current: 100,
|
||||
total: 200,
|
||||
remaining: 100,
|
||||
percentRemaining: 50.0,
|
||||
},
|
||||
};
|
||||
jest
|
||||
.spyOn(whisperFile, "getDownloadStatus")
|
||||
.mockResolvedValue(mockStatus);
|
||||
// await whisperFile.createDownloadResumable(); // Updated to use createDownloadResumable instead of download
|
||||
|
||||
const result = await whisperFile.getDownloadStatus();
|
||||
// expect(FileSystem.createDownloadResumable).toHaveBeenCalledWith(
|
||||
// "http://mock.model.com/model",
|
||||
// "mockTargetPath",
|
||||
// {},
|
||||
// expect.any(Function),
|
||||
// undefined
|
||||
// );
|
||||
// });
|
||||
|
||||
expect(result).toEqual(mockStatus);
|
||||
});
|
||||
});
|
||||
// it("should update the download status in the database", async () => {
|
||||
// const mockRunAsync = jest.fn();
|
||||
// (getDb as jest.Mock).mockResolvedValue({ runAsync: mockRunAsync });
|
||||
|
||||
describe("initiateWhisperDownload", () => {
|
||||
it("should initiate the download with default options", async () => {
|
||||
const mockModelLabel = "small";
|
||||
jest
|
||||
.spyOn(whisperFile, "createDownloadResumable")
|
||||
.mockResolvedValue(true);
|
||||
// const downloadable = await whisperFile.createDownloadResumable(); // Updated to use createDownloadResumable instead of download
|
||||
// await downloadable.resumeAsync();
|
||||
|
||||
await whisperFile.initiateWhisperDownload(mockModelLabel);
|
||||
// jest.advanceTimersByTime(1000);
|
||||
|
||||
expect(whisperFile.createDownloadResumable).toHaveBeenCalledWith(
|
||||
mockModelLabel
|
||||
);
|
||||
});
|
||||
// expect(mockRunAsync).toHaveBeenCalled();
|
||||
// });
|
||||
|
||||
it("should initiate the download with custom options", async () => {
|
||||
const mockModelLabel = "small";
|
||||
const mockOptions = { force_redownload: true };
|
||||
jest
|
||||
.spyOn(whisperFile, "createDownloadResumable")
|
||||
.mockResolvedValue(true);
|
||||
// it("should record the latest target hash after downloading", async () => {
|
||||
// const mockRecordLatestTargetHash = jest.spyOn(
|
||||
// whisperFile,
|
||||
// "recordLatestTargetHash"
|
||||
// );
|
||||
|
||||
await whisperFile.initiateWhisperDownload(mockModelLabel, mockOptions);
|
||||
// await whisperFile.createDownloadResumable(); // Updated to use createDownloadResumable instead of download
|
||||
|
||||
expect(whisperFile.createDownloadResumable).toHaveBeenCalledWith(
|
||||
mockModelLabel,
|
||||
mockOptions
|
||||
);
|
||||
});
|
||||
// expect(mockRecordLatestTargetHash).toHaveBeenCalled();
|
||||
// });
|
||||
|
||||
it("should return the correct download status when target exists and is complete", async () => {
|
||||
jest.spyOn(whisperFile, "doesTargetExist").mockResolvedValue(true);
|
||||
jest.spyOn(whisperFile, "isDownloadComplete").mockResolvedValue(true);
|
||||
// it("should call the onData callback if provided", async () => {
|
||||
// const mockOnData = jest.fn();
|
||||
// const options = { onData: mockOnData };
|
||||
|
||||
expect(await whisperFile.doesTargetExist()).toEqual(true);
|
||||
expect(await whisperFile.isDownloadComplete()).toEqual(true);
|
||||
});
|
||||
// await whisperFile.createDownloadResumable(options); // Updated to use createDownloadResumable instead of download
|
||||
|
||||
it("should return the correct download status when target does not exist", async () => {
|
||||
jest.spyOn(whisperFile, "doesTargetExist").mockResolvedValue(false);
|
||||
// expect(mockOnData).toHaveBeenCalledWith(expect.any(Object));
|
||||
// });
|
||||
|
||||
const result = await whisperFile.getDownloadStatus();
|
||||
// describe("getDownloadStatus", () => {
|
||||
// it("should return the correct download status when model size is known and download has started", async () => {
|
||||
// whisperFile.size = 1024;
|
||||
// jest.spyOn(whisperFile, "doesTargetExist").mockResolvedValue(true);
|
||||
// jest.spyOn(whisperFile, "isDownloadComplete").mockResolvedValue(false);
|
||||
// jest.spyOn(whisperFile, "targetFile").mockReturnValue({
|
||||
// size: 512,
|
||||
// });
|
||||
|
||||
expect(result).toEqual({
|
||||
doesTargetExist: false,
|
||||
isDownloadComplete: false,
|
||||
hasDownloadStarted: false,
|
||||
progress: undefined,
|
||||
});
|
||||
});
|
||||
});
|
||||
// const status = await whisperFile.getDownloadStatus();
|
||||
|
||||
// Add more tests as needed for other methods in WhisperFile
|
||||
// expect(status).toEqual({
|
||||
// doesTargetExist: true,
|
||||
// isDownloadComplete: false,
|
||||
// hasDownloadStarted: true,
|
||||
// progress: {
|
||||
// current: 512,
|
||||
// total: 1024,
|
||||
// remaining: 512,
|
||||
// percentRemaining: 50.0,
|
||||
// },
|
||||
// });
|
||||
// });
|
||||
|
||||
// it("should return the correct download status when model size is known and download is complete", async () => {
|
||||
// whisperFile.size = 1024;
|
||||
// jest.spyOn(whisperFile, "doesTargetExist").mockResolvedValue(true);
|
||||
// jest.spyOn(whisperFile, "isDownloadComplete").mockResolvedValue(true);
|
||||
|
||||
// const status = await whisperFile.getDownloadStatus();
|
||||
|
||||
// expect(status).toEqual({
|
||||
// doesTargetExist: true,
|
||||
// isDownloadComplete: true,
|
||||
// hasDownloadStarted: false,
|
||||
// progress: undefined,
|
||||
// });
|
||||
// });
|
||||
|
||||
// it("should return the correct download status when model size is unknown", async () => {
|
||||
// jest.spyOn(whisperFile, "doesTargetExist").mockResolvedValue(false);
|
||||
|
||||
// const status = await whisperFile.getDownloadStatus();
|
||||
|
||||
// expect(status).toEqual({
|
||||
// doesTargetExist: false,
|
||||
// isDownloadComplete: false,
|
||||
// hasDownloadStarted: false,
|
||||
// progress: undefined,
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
});
|
||||
|
Reference in New Issue
Block a user