File size: 4,720 Bytes
0ad74ed |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
import {
describe,
beforeAll,
afterEach,
afterAll,
test,
expect,
vi
} from "vitest";
import { Client, client, duplicate } from "..";
import {
transformed_api_info,
config_response,
response_api_info
} from "./test_data";
import { initialise_server } from "./server";
import { SPACE_METADATA_ERROR_MSG } from "../constants";
const app_reference = "hmb/hello_world";
const broken_app_reference = "hmb/bye_world";
const direct_app_reference = "https://hmb-hello-world.hf.space";
const secret_direct_app_reference = "https://hmb-secret-world.hf.space";
const server = initialise_server();
beforeAll(() => server.listen());
afterEach(() => server.resetHandlers());
afterAll(() => server.close());
describe("Client class", () => {
describe("initialisation", () => {
test("fetch is bound to the Client instance", async () => {
const test = await Client.connect("hmb/hello_world");
const fetch_method = test.fetch;
const res = await fetch_method(direct_app_reference + "/info");
await expect(res.json()).resolves.toEqual(response_api_info);
});
test("stream is bound to the Client instance", async () => {
const test = await Client.connect("hmb/hello_world");
const stream_method = test.stream;
const url = new URL(`${direct_app_reference}/queue/data`);
const stream = stream_method(url);
expect(stream).toBeDefined();
expect(stream.onmessage).toBeDefined();
});
test("backwards compatibility of client using deprecated syntax", async () => {
const app = await client(app_reference);
expect(app.config).toEqual(config_response);
});
test("connecting to a running app with a space reference", async () => {
const app = await Client.connect(app_reference);
expect(app.config).toEqual(config_response);
});
test("connecting to a running app with a direct app URL", async () => {
const app = await Client.connect(direct_app_reference);
expect(app.config).toEqual(config_response);
});
test("connecting successfully to a private running app with a space reference", async () => {
const app = await Client.connect("hmb/secret_world", {
hf_token: "hf_123"
});
expect(app.config).toEqual({
...config_response,
root: "https://hmb-secret-world.hf.space"
});
});
test("connecting successfully to a private running app with a direct app URL ", async () => {
const app = await Client.connect(secret_direct_app_reference, {
hf_token: "hf_123"
});
expect(app.config).toEqual({
...config_response,
root: "https://hmb-secret-world.hf.space"
});
});
test("unsuccessfully attempting to connect to a private running app", async () => {
await expect(
Client.connect("hmb/secret_world", {
hf_token: "hf_bad_token"
})
).rejects.toThrowError(SPACE_METADATA_ERROR_MSG);
});
test("viewing the api info of a running app", async () => {
const app = await Client.connect(app_reference);
expect(await app.view_api()).toEqual(transformed_api_info);
});
test("viewing the api info of a non-existent app", async () => {
const app = Client.connect(broken_app_reference);
await expect(app).rejects.toThrowError();
});
});
describe("duplicate", () => {
test("backwards compatibility of duplicate using deprecated syntax", async () => {
const app = await duplicate("gradio/hello_world", {
hf_token: "hf_123",
private: true,
hardware: "cpu-basic"
});
expect(app.config).toEqual(config_response);
});
test("creating a duplicate of a running app", async () => {
const duplicate = await Client.duplicate("gradio/hello_world", {
hf_token: "hf_123",
private: true,
hardware: "cpu-basic"
});
expect(duplicate.config).toEqual(config_response);
});
test("creating a duplicate of a running app without a token", async () => {
const duplicate = Client.duplicate("gradio/hello_world", {
private: true,
hardware: "cpu-basic"
});
await expect(duplicate).rejects.toThrow("Error: Unauthorized");
});
test("creating a duplicate of a broken app", async () => {
const duplicate = Client.duplicate(broken_app_reference);
await expect(duplicate).rejects.toThrow(SPACE_METADATA_ERROR_MSG);
});
});
describe("overriding the Client class", () => {
test("overriding methods on the Client class", async () => {
const mocked_fetch = vi.fn(
(input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
return Promise.resolve(
new Response(JSON.stringify({ data: "test" }))
);
}
);
class CustomClient extends Client {
fetch = mocked_fetch;
}
await CustomClient.connect("hmb/hello_world");
expect(mocked_fetch).toHaveBeenCalled();
});
});
});
|