Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import type { Client } from '@opensearch-project/opensearch';
import type { FastifyInstance, FastifyPluginAsync } from 'fastify';
import { hasZodFastifySchemaValidationErrors, serializerCompiler, validatorCompiler } from 'fastify-type-provider-zod';
import type { PrismaClient } from './generated/prisma/client.js';
import crate from './routes/crate.js';
import entities from './routes/entities.js';
import entity from './routes/entity.js';
import file from './routes/file.js';
import files from './routes/files.js';
import metadata from './routes/metadata.js';
import search from './routes/search.js';
import type { FileHandler, RoCrateHandler } from './types/fileHandlers.js';
import type {
Expand Down Expand Up @@ -133,7 +133,7 @@ const app: FastifyPluginAsync<Options> = async (fastify, options) => {
fastify.register(entity, { prisma, accessTransformer, entityTransformers });
fastify.register(files, { prisma, fileAccessTransformer, fileTransformers });
fastify.register(file, { prisma, fileHandler });
fastify.register(crate, { prisma, roCrateHandler });
fastify.register(metadata, { prisma, roCrateHandler });
fastify.register(search, {
prisma,
opensearch,
Expand Down
46 changes: 23 additions & 23 deletions src/routes/crate.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { fastify, fastifyAfter, fastifyBefore, prisma } from '../test/helpers/fastify.js';
import type { FileResult, RoCrateHandler } from '../types/fileHandlers.js';
import type { StandardErrorResponse } from '../utils/errors.js';
import crateRoute from './crate.js';
import metadataRoute from './metadata.js';

vi.mock('node:fs', () => ({
createReadStream: vi.fn(),
Expand All @@ -18,7 +18,7 @@ describe('Crate Route', () => {

beforeEach(async () => {
await fastifyBefore();
await fastify.register(crateRoute, { prisma, roCrateHandler: mockRoCrateHandler });
await fastify.register(metadataRoute, { prisma, roCrateHandler: mockRoCrateHandler });
vi.clearAllMocks();
});

Expand Down Expand Up @@ -58,7 +58,7 @@ describe('Crate Route', () => {
rootCollection: 'http://example.com/collection',
};

describe('GET /entity/:id/rocrate', () => {
describe('GET /entity/:id/metadata', () => {
it('should stream RO-Crate metadata for File entity', async () => {
prisma.entity.findUnique.mockResolvedValue(mockFileEntity);

Expand All @@ -77,7 +77,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'GET',
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/metadata`,
});

expect(response.statusCode).toBe(200);
Expand Down Expand Up @@ -111,7 +111,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'GET',
url: `/entity/${encodeURIComponent('http://example.com/collection')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/collection')}/metadata`,
});

expect(response.statusCode).toBe(200);
Expand All @@ -135,7 +135,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'GET',
url: `/entity/${encodeURIComponent('http://example.com/object')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/object')}/metadata`,
});

expect(response.statusCode).toBe(200);
Expand All @@ -154,7 +154,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'GET',
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/metadata`,
});

expect(response.statusCode).toBe(302);
Expand All @@ -179,7 +179,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'GET',
url: `/entity/${encodeURIComponent('http://example.com/collection')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/collection')}/metadata`,
});

expect(response.statusCode).toBe(200);
Expand All @@ -205,7 +205,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'GET',
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/metadata`,
});

expect(response.statusCode).toBe(200);
Expand All @@ -219,7 +219,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'GET',
url: `/entity/${encodeURIComponent('http://example.com/nonexistent')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/nonexistent')}/metadata`,
});
const body = JSON.parse(response.body) as { error: { code: string; message: string } };

Expand All @@ -235,7 +235,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'GET',
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/metadata`,
});
const body = JSON.parse(response.body) as { error: { code: string; message: string } };

Expand All @@ -249,7 +249,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'GET',
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/metadata`,
});
const body = JSON.parse(response.body) as { error: { code: string } };

Expand All @@ -263,7 +263,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'GET',
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/metadata`,
});
const body = JSON.parse(response.body) as { error: { code: string } };

Expand All @@ -274,7 +274,7 @@ describe('Crate Route', () => {
it('should validate ID parameter format', async () => {
const response = await fastify.inject({
method: 'GET',
url: '/entity/invalid-id/rocrate',
url: '/entity/invalid-id/metadata',
});
const body = JSON.parse(response.body) as StandardErrorResponse;

Expand All @@ -283,7 +283,7 @@ describe('Crate Route', () => {
});
});

describe('HEAD /entity/:id/rocrate', () => {
describe('HEAD /entity/:id/metadata', () => {
it('should return RO-Crate metadata headers for File entity', async () => {
prisma.entity.findUnique.mockResolvedValue(mockFileEntity);

Expand All @@ -297,7 +297,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'HEAD',
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/metadata`,
});

expect(response.statusCode).toBe(200);
Expand Down Expand Up @@ -326,7 +326,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'HEAD',
url: `/entity/${encodeURIComponent('http://example.com/collection')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/collection')}/metadata`,
});

expect(response.statusCode).toBe(200);
Expand All @@ -346,7 +346,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'HEAD',
url: `/entity/${encodeURIComponent('http://example.com/object')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/object')}/metadata`,
});

expect(response.statusCode).toBe(200);
Expand All @@ -360,7 +360,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'HEAD',
url: `/entity/${encodeURIComponent('http://example.com/nonexistent')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/nonexistent')}/metadata`,
});
const body = JSON.parse(response.body) as { error: { code: string } };

Expand All @@ -375,7 +375,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'HEAD',
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/metadata`,
});
const body = JSON.parse(response.body) as { error: { code: string; message: string } };

Expand All @@ -390,7 +390,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'HEAD',
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/metadata`,
});
const body = JSON.parse(response.body) as { error: { code: string } };

Expand All @@ -399,7 +399,7 @@ describe('Crate Route', () => {
});
});

describe('GET /entity/:id/rocrate - exhaustiveness check', () => {
describe('GET /entity/:id/metadata - exhaustiveness check', () => {
it('should handle unexpected RO-Crate result type', async () => {
prisma.entity.findUnique.mockResolvedValue(mockFileEntity);

Expand All @@ -412,7 +412,7 @@ describe('Crate Route', () => {

const response = await fastify.inject({
method: 'GET',
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/rocrate`,
url: `/entity/${encodeURIComponent('http://example.com/entity/file.wav')}/metadata`,
});
const body = JSON.parse(response.body) as { error: { code: string } };

Expand Down
4 changes: 2 additions & 2 deletions src/routes/crate.ts → src/routes/metadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const crate: FastifyPluginAsync<CrateRouteOptions> = async (fastify, opts) => {
const { prisma, roCrateHandler } = opts;

fastify.withTypeProvider<ZodTypeProvider>().head(
'/entity/:id/rocrate',
'/entity/:id/metadata',
{
schema: {
params: paramsSchema,
Expand Down Expand Up @@ -57,7 +57,7 @@ const crate: FastifyPluginAsync<CrateRouteOptions> = async (fastify, opts) => {
);

fastify.withTypeProvider<ZodTypeProvider>().get(
'/entity/:id/rocrate',
'/entity/:id/metadata',
{
schema: {
params: paramsSchema,
Expand Down
Loading