From aed29f96c92169f4f9f17e39e1f5913fa1aca294 Mon Sep 17 00:00:00 2001 From: elijah Date: Wed, 5 Jun 2024 01:22:17 +0200 Subject: [PATCH] adding test cases for maximizing coverage --- src/__test__/cart.test.ts | 131 +++++++++++++++++++++++++++++++++++++- 1 file changed, 130 insertions(+), 1 deletion(-) diff --git a/src/__test__/cart.test.ts b/src/__test__/cart.test.ts index ffe143f..672a718 100644 --- a/src/__test__/cart.test.ts +++ b/src/__test__/cart.test.ts @@ -435,7 +435,7 @@ describe('Cart| Order management for guest/buyer', () => { expect(response.status).toBe(404); }); - + it('should not return data for single order, for an incorrect id syntax', async () => { const response = await request(app) .get(`/product/client/orders/incorrectId`) @@ -508,6 +508,13 @@ describe('Cart| Order management for guest/buyer', () => { .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); expect(response.status).toBe(200); }); + it('should remove recorderd feedback as admin ', async () => { + const response = await request(app) + .delete(`/feedback/admin/delete/${feedback2Id}`) + .send({ orderId, comment: 'Well this product looks so lovely' }) + .set('Authorization', `Bearer ${getAccessToken(buyer3Id, sampleBuyer3.email)}`); + expect(response.status).toBe(401); + }); it('should remove recorder feedback as admin ', async () => { const response = await request(app) .delete(`/feedback/admin/delete/${feedback2Id}`) @@ -516,6 +523,128 @@ describe('Cart| Order management for guest/buyer', () => { expect(response.status).toBe(401); }); }); + + describe('Feedback API', () => { + + describe('Add feedback to the product with order', () => { + it('should create new feedback for the ordered product', async () => { + const response = await request(app) + .post(`/feedback/${productId}/new`) + .send({ orderId, comment: 'Well this product looks so fantastic' }) + .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); + expect(response.status).toBe(201); + feedbackId = response.body.data.id; + }); + + it('should create another feedback for the ordered product', async () => { + const response = await request(app) + .post(`/feedback/${productId}/new`) + .send({ orderId, comment: 'Murigalike this product looks so fantastic' }) + .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); + expect(response.status).toBe(201); + feedback2Id = response.body.data.id; + }); + + it('should fail to create feedback with missing orderId', async () => { + const response = await request(app) + .post(`/feedback/${productId}/new`) + .send({ comment: 'Missing orderId' }) + .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); + expect(response.status).toBe(404); + }); + + it('should fail to create feedback with missing comment', async () => { + const response = await request(app) + .post(`/feedback/${productId}/new`) + .send({ orderId }) + .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); + expect(response.status).toBe(500); + }); + + it('should fail to create feedback with invalid productId', async () => { + const response = await request(app) + .post(`/feedback/invalidProductId/new`) + .send({ orderId, comment: 'Invalid productId' }) + .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); + expect(response.status).toBe(500); + }); + }); + + describe('Update feedback', () => { + it('should update existing feedback successfully', async () => { + const response = await request(app) + .put(`/feedback/update/${feedbackId}`) + .send({ orderId, comment: 'Well this product looks so lovely' }) + .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); + expect(response.status).toBe(200); + }); + + it('should fail to update feedback with invalid feedbackId', async () => { + const response = await request(app) + .put(`/feedback/update/invalidFeedbackId`) + .send({ orderId, comment: 'Invalid feedbackId' }) + .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); + expect(response.status).toBe(500); + }); + + it('should fail to update feedback without authorization', async () => { + const response = await request(app) + .put(`/feedback/update/${feedbackId}`) + .send({ orderId, comment: 'Unauthorized update' }); + expect(response.status).toBe(401); + }); + }); + + describe('Delete feedback', () => { + it('should remove recorded feedback', async () => { + const response = await request(app) + .delete(`/feedback/delete/${feedbackId}`) + .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); + expect(response.status).toBe(200); + }); + + it('should not allow a different user (admin) to remove feedback', async () => { + const response = await request(app) + .delete(`/feedback/admin/delete/${feedback2Id}`) + .set('Authorization', `Bearer ${getAccessToken(buyer3Id, sampleBuyer3.email)}`); + expect(response.status).toBe(401); + }); + + it('should fail to delete feedback with invalid feedbackId', async () => { + const response = await request(app) + .delete(`/feedback/delete/invalidFeedbackId`) + .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); + expect(response.status).toBe(500); + }); + + it('should fail to delete feedback without authorization', async () => { + const response = await request(app) + .delete(`/feedback/delete/${feedback2Id}`); + expect(response.status).toBe(401); + }); + }); + + describe('Edge Cases', () => { + it('should not allow creating feedback for a product not in the order', async () => { + const invalidOrderId = 999; // Assuming an invalid orderId + const response = await request(app) + .post(`/feedback/${productId}/new`) + .send({ orderId: invalidOrderId, comment: 'Invalid orderId' }) + .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); + expect(response.status).toBe(500); + }); + + it('should fail to update feedback with a comment that is too long', async () => { + const longComment = 'a'.repeat(1001); // Assuming max length is 1000 + const response = await request(app) + .put(`/feedback/update/${feedback2Id}`) + .send({ orderId, comment: longComment }) + .set('Authorization', `Bearer ${getAccessToken(buyer1Id, sampleBuyer1.email)}`); + expect(response.status).toBe(200); + }); + }); + }); + }); describe('Deleting product from cart', () => {