1
/** @jest-environment node */
3
import { prisma } from "@/src/server/db";
4
import { makeAPICall, pruneDatabase } from "@/src/__tests__/test-utils";
5
import { v4 } from "uuid";
7
describe("/api/public/datasets and /api/public/dataset-items API Endpoints", () => {
8
beforeEach(async () => await pruneDatabase());
9
afterEach(async () => await pruneDatabase());
11
it("should create and get a dataset", async () => {
12
await makeAPICall("POST", "/api/public/datasets", {
16
const dbDataset = await prisma.dataset.findMany({
22
expect(dbDataset.length).toBeGreaterThan(0);
24
const getDataset = await makeAPICall(
26
`/api/public/datasets/dataset-name`,
29
expect(getDataset.status).toBe(200);
30
expect(getDataset.body).toMatchObject({
35
it("should create and get a dataset item (via datasets and individually)", async () => {
36
await makeAPICall("POST", "/api/public/datasets", {
39
await makeAPICall("POST", "/api/public/dataset-items", {
40
datasetName: "dataset-name",
41
input: { key: "value" },
42
expectedOutput: { key: "value" },
44
const dbDatasetItem = await prisma.datasetItem.findFirst({
52
expect(dbDatasetItem).not.toBeNull();
54
const getDataset = await makeAPICall(
56
`/api/public/datasets/dataset-name`,
58
expect(getDataset.status).toBe(200);
59
expect(getDataset.body).toMatchObject({
63
id: dbDatasetItem!.id,
64
input: { key: "value" },
65
expectedOutput: { key: "value" },
70
const getDatasetItem = await makeAPICall(
72
`/api/public/dataset-items/${dbDatasetItem!.id}`,
74
expect(getDatasetItem.status).toBe(200);
75
expect(getDatasetItem.body).toMatchObject({
76
id: dbDatasetItem!.id,
77
input: { key: "value" },
78
expectedOutput: { key: "value" },
82
it("should upsert a dataset item", async () => {
83
await makeAPICall("POST", "/api/public/datasets", {
87
const item1 = await makeAPICall("POST", "/api/public/dataset-items", {
88
id: "dataset-item-id",
89
datasetName: "dataset-name",
90
input: { key: "value" },
92
expect(item1.status).toBe(200);
93
expect(item1.body).toMatchObject({
94
id: "dataset-item-id",
97
const item2 = await makeAPICall("POST", "/api/public/dataset-items", {
98
id: "dataset-item-id",
99
datasetName: "dataset-name",
100
input: { key: "value2" },
102
expect(item2.status).toBe(200);
103
expect(item2.body).toMatchObject({
104
id: "dataset-item-id",
105
input: { key: "value2" },
108
const dbDatasetItem = await prisma.datasetItem.findFirst({
109
where: { id: "dataset-item-id" },
111
expect(dbDatasetItem).not.toBeNull();
112
expect(dbDatasetItem?.input).toMatchObject({ key: "value2" });
115
it("should create and get a dataset run", async () => {
116
const dataset = await makeAPICall("POST", "/api/public/datasets", {
117
name: "dataset-name",
119
expect(dataset.status).toBe(200);
120
expect(dataset.body).toMatchObject({
121
name: "dataset-name",
123
await makeAPICall("POST", "/api/public/dataset-items", {
124
datasetName: "dataset-name",
125
id: "dataset-item-id",
126
input: { key: "value" },
127
expectedOutput: { key: "value" },
129
const traceId = v4();
130
const observationId = v4();
131
const response = await makeAPICall("POST", "/api/public/ingestion", {
135
type: "trace-create",
136
timestamp: new Date().toISOString(),
141
metadata: { key: "value" },
148
type: "observation-create",
149
timestamp: new Date().toISOString(),
154
name: "generation-name",
155
startTime: "2021-01-01T00:00:00.000Z",
156
endTime: "2021-01-01T00:00:00.000Z",
157
modelParameters: { key: "value" },
158
input: { key: "value" },
159
metadata: { key: "value" },
165
expect(response.status).toBe(207);
167
const runItem = await makeAPICall("POST", "/api/public/dataset-run-items", {
168
datasetItemId: "dataset-item-id",
169
observationId: observationId,
172
const dbRun = await prisma.datasetRuns.findFirst({
177
expect(dbRun).not.toBeNull();
178
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
179
expect(dbRun?.datasetId).toBe(dataset.body.id);
180
expect(runItem.status).toBe(200);
181
expect(runItem.body).toMatchObject({
182
datasetItemId: "dataset-item-id",
183
observationId: observationId,
184
datasetRunId: dbRun?.id,