From af3fd91f2d8891dbfeb2a6f2b8b64ce82c995fc6 Mon Sep 17 00:00:00 2001 From: Alvin Sebastian Date: Wed, 9 Sep 2026 05:43:37 +0000 Subject: [PATCH] fix: rename endpoint rocrate to metadata --- src/app.ts | 4 +-- src/routes/crate.test.ts | 46 ++++++++++++++-------------- src/routes/{crate.ts => metadata.ts} | 4 +-- 3 files changed, 27 insertions(+), 27 deletions(-) rename src/routes/{crate.ts => metadata.ts} (98%) diff --git a/src/app.ts b/src/app.ts index f511176..b86d325 100644 --- a/src/app.ts +++ b/src/app.ts @@ -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 { @@ -133,7 +133,7 @@ const app: FastifyPluginAsync = 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, diff --git a/src/routes/crate.test.ts b/src/routes/crate.test.ts index 344f459..1e5e391 100644 --- a/src/routes/crate.test.ts +++ b/src/routes/crate.test.ts @@ -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(), @@ -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(); }); @@ -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); @@ -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); @@ -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); @@ -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); @@ -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); @@ -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); @@ -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); @@ -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 } }; @@ -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 } }; @@ -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 } }; @@ -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 } }; @@ -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; @@ -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); @@ -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); @@ -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); @@ -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); @@ -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 } }; @@ -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 } }; @@ -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 } }; @@ -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); @@ -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 } }; diff --git a/src/routes/crate.ts b/src/routes/metadata.ts similarity index 98% rename from src/routes/crate.ts rename to src/routes/metadata.ts index 01493cc..6651dcf 100644 --- a/src/routes/crate.ts +++ b/src/routes/metadata.ts @@ -20,7 +20,7 @@ const crate: FastifyPluginAsync = async (fastify, opts) => { const { prisma, roCrateHandler } = opts; fastify.withTypeProvider().head( - '/entity/:id/rocrate', + '/entity/:id/metadata', { schema: { params: paramsSchema, @@ -57,7 +57,7 @@ const crate: FastifyPluginAsync = async (fastify, opts) => { ); fastify.withTypeProvider().get( - '/entity/:id/rocrate', + '/entity/:id/metadata', { schema: { params: paramsSchema,