fix: Document.findByPk() with and (#6208)

This commit is contained in:
Apoorv Mishra
2023-11-23 18:59:56 +05:30
committed by GitHub
parent 5c55b1367b
commit ea8ebc3b2a
2 changed files with 47 additions and 2 deletions

View File

@@ -1,3 +1,4 @@
import { EmptyResultError } from "sequelize";
import slugify from "@shared/utils/slugify";
import Document from "@server/models/Document";
import {
@@ -176,6 +177,34 @@ describe("#findByPk", () => {
const response = await Document.findByPk(id);
expect(response?.id).toBe(document.id);
});
it("should test with rejectOnEmpty flag", async () => {
const user = await buildUser();
const document = await buildDocument({
teamId: user.teamId,
createdById: user.id,
});
await expect(
Document.findByPk(document.id, {
userId: user.id,
rejectOnEmpty: true,
})
).resolves.not.toBeNull();
await expect(
Document.findByPk(document.urlId, {
userId: user.id,
rejectOnEmpty: true,
})
).resolves.not.toBeNull();
await expect(
Document.findByPk("0e8280ea-7b4c-40e5-98ba-ec8a2f00f5e8", {
userId: user.id,
rejectOnEmpty: true,
})
).rejects.toThrow(EmptyResultError);
});
});
describe("tasks", () => {

View File

@@ -11,6 +11,7 @@ import {
FindOptions,
ScopeOptions,
WhereOptions,
EmptyResultError,
} from "sequelize";
import {
ForeignKey,
@@ -58,6 +59,7 @@ export const DOCUMENT_VERSION = 2;
type AdditionalFindOptions = {
userId?: string;
includeState?: boolean;
rejectOnEmpty?: boolean | Error;
};
@DefaultScope(() => ({
@@ -513,22 +515,36 @@ class Document extends ParanoidModel {
]);
if (isUUID(id)) {
return scope.findOne({
const document = await scope.findOne({
where: {
id,
},
...rest,
rejectOnEmpty: false,
});
if (!document && rest.rejectOnEmpty) {
throw new EmptyResultError(`Document doesn't exist with id: ${id}`);
}
return document;
}
const match = id.match(SLUG_URL_REGEX);
if (match) {
return scope.findOne({
const document = await scope.findOne({
where: {
urlId: match[1],
},
...rest,
rejectOnEmpty: false,
});
if (!document && rest.rejectOnEmpty) {
throw new EmptyResultError(`Document doesn't exist with id: ${id}`);
}
return document;
}
return null;