diff --git a/lib/handler/index.js b/lib/handler/index.js index 6c78294..f9438f9 100644 --- a/lib/handler/index.js +++ b/lib/handler/index.js @@ -3,12 +3,8 @@ const axios = require("axios").default; const FormData = require("form-data"); async function readAttachment(Key, token, credentials) { - try { - const document = await readDocument(Key, token, credentials.uri); - return document; - } catch (error) { - throw new Error(error); - } + const document = await readDocument(Key, token, credentials.uri); + return document; } async function readDocument(Key, token, uri) { @@ -30,12 +26,11 @@ async function readDocument(Key, token, uri) { const responseBuffer = Buffer.from(response.data, "binary"); return responseBuffer; } catch (error) { - let statusText = "An Error Occurred"; - if (error.response?.statusText) { - statusText = error.response.statusText; + if (error.message == "Request failed with status code 404" && error.status == 404){ + error.message = "Attachment not found in the repository" } - - throw new Error(statusText); + error.code = error.status + throw error; } } diff --git a/lib/sdm.js b/lib/sdm.js index 386a6cd..9600ce3 100644 --- a/lib/sdm.js +++ b/lib/sdm.js @@ -62,13 +62,9 @@ module.exports = class SDMAttachmentsService extends ( this.creds, req.user.tokenInfo.getTokenValue() ); - try { - const Key = response?.url; - const content = await readAttachment(Key, token, this.creds); - return content; - } catch (error) { - throw new Error(error); - } + const Key = response?.url; + const content = await readAttachment(Key, token, this.creds); + return content; } async draftSaveHandler(req) { diff --git a/test/lib/handler/index.test.js b/test/lib/handler/index.test.js index 5b082a8..127b149 100644 --- a/test/lib/handler/index.test.js +++ b/test/lib/handler/index.test.js @@ -68,27 +68,43 @@ describe("handlers", () => { axios.get.mockImplementationOnce(() => Promise.reject({ response: { - statusText: "something bad happened", - }, + code: 500, + message: "Could not read the attachment", + } }) ); - + await expect( readAttachment("123", "a1b2c3", { uri: "http://example.com/" }) - ).rejects.toThrow("something bad happened"); - }); - - it('throws error with "An Error Occurred" message when statusText is missing', async () => { + ).rejects.toMatchObject({ + response: { + code: 500, + message: "Could not read the attachment", + }, + }); + }); + + it("throws specific error message for 404 status", async () => { + let actualError = { + message: "Request failed with status code 404", + code: "AN ERROR OCCURRED", + status: 404, + }; + + let checkError = { + message: "Attachment not found in the repository", + code: 404, + status: 404, + }; + axios.get.mockImplementationOnce(() => - Promise.reject({ - response: {}, - }) + Promise.reject(actualError) ); - + await expect( readAttachment("123", "a1b2c3", { uri: "http://example.com/" }) - ).rejects.toThrow("An Error Occurred"); - }); + ).rejects.toMatchObject(checkError); + }); }); describe("getRepositoryInfo", () => { diff --git a/test/lib/sdm.test.js b/test/lib/sdm.test.js index b9fc8f4..8874f3a 100644 --- a/test/lib/sdm.test.js +++ b/test/lib/sdm.test.js @@ -158,15 +158,19 @@ cds.context = { const attachments = ["attachment1", "attachment2"]; const keys = ["key1", "key2"]; const response = { url: "mockUrl" }; + const errorMessage = new Error("Attachment not found in the repository"); + errorMessage.code = 404; + getURLFromAttachments.mockResolvedValueOnce(response); + fetchAccessToken.mockResolvedValueOnce("mockToken"); readAttachment.mockImplementationOnce(() => { - throw new Error("Error reading attachment"); + throw errorMessage; }); - + await expect(service.get(attachments, keys, req)).rejects.toThrow( - "Error reading attachment" + errorMessage ); - + expect(getURLFromAttachments).toHaveBeenCalledWith(keys, attachments); expect(fetchAccessToken).toHaveBeenCalledWith( service.creds, @@ -174,7 +178,7 @@ cds.context = { ); expect(readAttachment).toHaveBeenCalledWith( "mockUrl", - token, + "mockToken", // Passing the mocked token value service.creds ); });