mirror of
https://github.com/fosrl/pangolin.git
synced 2026-09-22 02:28:26 +02:00
Fix integration site resource lookup
This commit is contained in:
@@ -0,0 +1,58 @@
|
|||||||
|
import { assertEquals } from "@test/assert";
|
||||||
|
import { getSiteResourceParamsSchema } from "./getSiteResource";
|
||||||
|
|
||||||
|
function testSiteResourceIdOnlyParams() {
|
||||||
|
const result = getSiteResourceParamsSchema.safeParse({
|
||||||
|
siteResourceId: "42"
|
||||||
|
});
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
result.success,
|
||||||
|
true,
|
||||||
|
"siteResourceId-only integration routes should pass validation"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (result.success) {
|
||||||
|
assertEquals(
|
||||||
|
result.data.siteResourceId,
|
||||||
|
42,
|
||||||
|
"siteResourceId should be parsed as a number"
|
||||||
|
);
|
||||||
|
assertEquals(
|
||||||
|
result.data.orgId,
|
||||||
|
undefined,
|
||||||
|
"orgId should remain optional"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function testOrgScopedParamsRemainSupported() {
|
||||||
|
const result = getSiteResourceParamsSchema.safeParse({
|
||||||
|
siteResourceId: "42",
|
||||||
|
orgId: "org-id"
|
||||||
|
});
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
result.success,
|
||||||
|
true,
|
||||||
|
"org-scoped routes should continue to pass validation"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testInvalidSiteResourceId() {
|
||||||
|
const result = getSiteResourceParamsSchema.safeParse({
|
||||||
|
siteResourceId: "not-a-number"
|
||||||
|
});
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
result.success,
|
||||||
|
false,
|
||||||
|
"non-numeric siteResourceIds should fail validation"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
testSiteResourceIdOnlyParams();
|
||||||
|
testOrgScopedParamsRemainSupported();
|
||||||
|
testInvalidSiteResourceId();
|
||||||
|
|
||||||
|
console.log("All getSiteResource parameter validation tests passed.");
|
||||||
@@ -10,7 +10,7 @@ import { fromError } from "zod-validation-error";
|
|||||||
import logger from "@server/logger";
|
import logger from "@server/logger";
|
||||||
import { OpenAPITags, registry } from "@server/openApi";
|
import { OpenAPITags, registry } from "@server/openApi";
|
||||||
|
|
||||||
const getSiteResourceParamsSchema = z.strictObject({
|
export const getSiteResourceParamsSchema = z.strictObject({
|
||||||
siteResourceId: z
|
siteResourceId: z
|
||||||
.string()
|
.string()
|
||||||
.optional()
|
.optional()
|
||||||
@@ -18,19 +18,21 @@ const getSiteResourceParamsSchema = z.strictObject({
|
|||||||
.pipe(z.int().positive().optional())
|
.pipe(z.int().positive().optional())
|
||||||
.optional(),
|
.optional(),
|
||||||
niceId: z.string().optional(),
|
niceId: z.string().optional(),
|
||||||
orgId: z.string()
|
orgId: z.string().optional()
|
||||||
});
|
});
|
||||||
|
|
||||||
async function query(siteResourceId?: number, niceId?: string, orgId?: string) {
|
async function query(siteResourceId?: number, niceId?: string, orgId?: string) {
|
||||||
if (siteResourceId && orgId) {
|
if (siteResourceId) {
|
||||||
const [siteResource] = await db
|
const [siteResource] = await db
|
||||||
.select()
|
.select()
|
||||||
.from(siteResources)
|
.from(siteResources)
|
||||||
.where(
|
.where(
|
||||||
and(
|
orgId
|
||||||
eq(siteResources.siteResourceId, siteResourceId),
|
? and(
|
||||||
eq(siteResources.orgId, orgId)
|
eq(siteResources.siteResourceId, siteResourceId),
|
||||||
)
|
eq(siteResources.orgId, orgId)
|
||||||
|
)
|
||||||
|
: eq(siteResources.siteResourceId, siteResourceId)
|
||||||
)
|
)
|
||||||
.limit(1);
|
.limit(1);
|
||||||
return siteResource;
|
return siteResource;
|
||||||
@@ -60,9 +62,7 @@ registry.registerPath({
|
|||||||
tags: [OpenAPITags.PrivateResourceLegacy],
|
tags: [OpenAPITags.PrivateResourceLegacy],
|
||||||
request: {
|
request: {
|
||||||
params: z.object({
|
params: z.object({
|
||||||
siteResourceId: z.number(),
|
siteResourceId: z.number()
|
||||||
siteId: z.number(),
|
|
||||||
orgId: z.string()
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
responses: {
|
responses: {
|
||||||
@@ -90,9 +90,7 @@ registry.registerPath({
|
|||||||
tags: [OpenAPITags.PrivateResource],
|
tags: [OpenAPITags.PrivateResource],
|
||||||
request: {
|
request: {
|
||||||
params: z.object({
|
params: z.object({
|
||||||
siteResourceId: z.number(),
|
siteResourceId: z.number()
|
||||||
siteId: z.number(),
|
|
||||||
orgId: z.string()
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
responses: {
|
responses: {
|
||||||
|
|||||||
Reference in New Issue
Block a user