🐛 Fixed bug with downloading zip folder (#541)

* 🐛Fixed bug with downloading zip folder
* ♻️Removed unused method
This commit is contained in:
Anton Shepilov
2024-05-28 13:41:11 +02:00
committed by GitHub
parent 8f75c04fdd
commit 16b39561ae
7 changed files with 29 additions and 13 deletions
@@ -135,6 +135,10 @@ export class CrudException extends Error {
return new CrudException(details, 400);
}
static unauthorized(details: string): CrudException {
return new CrudException(details, 401);
}
static notFound(details: string): CrudException {
return new CrudException(details, 404);
}
@@ -6,6 +6,7 @@ import config from "../../../../config";
import { JwtType } from "../../types";
import { executionStorage } from "../../../framework/execution-storage";
import gr from "../../../../../services/global-resolver";
import { CrudException } from "../../../framework/api/crud-service";
const jwtPlugin: FastifyPluginCallback = async (fastify, _opts, next) => {
fastify.register(cookie);
@@ -50,7 +51,7 @@ const jwtPlugin: FastifyPluginCallback = async (fastify, _opts, next) => {
try {
await authenticate(request);
} catch (err) {
throw fastify.httpErrors.unauthorized(`Bad credentials ${JSON.stringify(err)}`);
throw CrudException.unauthorized(`Bad credentials: ${err.message}`);
}
});
@@ -311,10 +311,11 @@ export const addDriveItemToArchive = async (
context: CompanyExecutionContext,
prefix?: string,
): Promise<void> => {
const item = entity || (await repository.findOne({ id, company_id: context.company.id }));
const itemPK = { id, company_id: context.company.id };
const item = entity || (await repository.findOne(itemPK));
if (!item) {
throw Error("item not found");
throw Error(`Item '${JSON.stringify(itemPK)}' not found`);
}
if (!item.is_directory) {
@@ -427,6 +427,8 @@ export class DocumentsController {
});
archive.pipe(reply.raw);
return reply;
} catch (error) {
logger.error({ error: `${error}` }, "failed to send zip file");
throw new CrudException("Failed to create zip file", 500);
@@ -400,7 +400,7 @@ export default class UserApi {
});
};
async getFolder(id: string | "root" | "trash" | "shared_with_me") {
async zipDocument(id: string | "root" | "trash" | "shared_with_me") {
return await this.platform.app.inject({
method: "GET",
url: `${UserApi.DOC_URL}/companies/${this.platform.workspace.company_id}/item/download/zip?items=${id}`,
@@ -410,7 +410,6 @@ export default class UserApi {
});
};
async getDocumentOKCheck(id: string | "root" | "trash" | "shared_with_me") {
const response = await this.getDocument(id);
expect(response.statusCode).toBe(200);
@@ -418,13 +417,6 @@ export default class UserApi {
expect(doc.item?.id).toBe(id);
};
async getFolderOKCheck(id: string | "root" | "trash" | "shared_with_me") {
const response = await this.getFolder(id);
expect(response.statusCode).toBe(200);
const doc = deserialize<DriveItemDetailsMockClass>(DriveItemDetailsMockClass, response.body);
expect(doc.item?.id).toBe(id);
};
async sharedWithMeDocuments(
payload: Record<string, any>
) {
@@ -106,6 +106,22 @@ describe("the Drive feature", () => {
expect(updateItemResult.name).toEqual("somethingelse");
});
it("Download folder as a zip should work fine", async () => {
//given
const folder = await currentUser.createDirectory("user_" + currentUser.user.id)
await currentUser.uploadRandomFileAndCreateDocument(folder.id);
//when
const zipResponse = await currentUser.zipDocument(folder.id);
//then
expect(zipResponse).toBeTruthy();
expect(zipResponse.statusCode).toBe(200);
//and data is in place
expect(zipResponse.body.length).toBeGreaterThanOrEqual(100);
});
it("did move an item to trash", async () => {
const createItemResult = await currentUser.createDefaultDocument();
@@ -286,7 +286,7 @@ describe("the public links feature", () => {
anotherUser.jwt = token.value;
await anotherUser.getDocumentOKCheck(doc.id);
expect((await anotherUser.getFolder(doc.id)).statusCode).toBe(200);
expect((await anotherUser.zipDocument(doc.id)).statusCode).toBe(200);
});
});
});