diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index f7d5d94f1c..fc509b39c6 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -1530,7 +1530,7 @@ INSERT INTO `vn`.`ticketRequest`(`id`, `description`, `requesterFk`, `attenderFk VALUES (1, 'Ranged weapon longbow 2m', 18, 35, 5, 1, 9.10, 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), (2, 'Melee weapon combat first 15cm', 18, 35, 10, 2, 1.07, 0, NULL, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), - (3, 'Melee weapon heavy shield 1x0.5m', 18, 35, 20, 4, 3.06, 0, NULL, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), + (3, 'Melee weapon heavy shield 1x0.5m', 18, 35, 20, NULL, 3.06, NULL, NULL, 23, CURDATE()), (4, 'Melee weapon combat first 15cm', 18, 35, 15, NULL, 1.30, NULL, NULL, 11, CURDATE()), (5, 'Melee weapon combat first 15cm', 18, 35, 15, 4, 1.30, 0, NULL, 18, CURDATE()); diff --git a/e2e/helpers/extensions.js b/e2e/helpers/extensions.js index 816eea0643..32c531f7cc 100644 --- a/e2e/helpers/extensions.js +++ b/e2e/helpers/extensions.js @@ -179,6 +179,13 @@ let actions = { await this.click(selector); }, + writeOnEditableTD: async function(selector, text) { + let builtSelector = await this.selectorFormater(selector); + await this.waitToClick(selector); + await this.type(builtSelector, text); + await this.keyboard.press('Enter'); + }, + focusElement: async function(selector) { await this.wait(selector); return await this.evaluate(selector => { @@ -284,22 +291,14 @@ let actions = { }, {}, selector, text); }, - selectorFormater: async function(selector) { - let builtSelector = `${selector} input`; - - if (selector.includes('vn-autocomplete')) - return builtSelector = `${selector} input`; - + selectorFormater: function(selector) { if (selector.includes('vn-textarea')) - return builtSelector = `${selector} textarea`; - - if (selector.includes('vn-textfield')) - return builtSelector = `${selector} input`; + return `${selector} textarea`; if (selector.includes('vn-input-file')) - return builtSelector = `${selector} section`; + return `${selector} section`; - return builtSelector; + return `${selector} input`; }, waitForTextInField: async function(selector, text) { diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index bbf3d04524..873e7c0b5d 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -250,6 +250,17 @@ export default { inactiveIcon: 'vn-item-descriptor vn-icon[icon="icon-unavailable"]', navigateBackToIndex: 'vn-item-descriptor vn-icon[icon="chevron_left"]' }, + itemRequest: { + firstRequestItemID: 'vn-item-request vn-tbody > vn-tr:nth-child(1) > vn-td-editable:nth-child(7)', + firstRequestQuantity: 'vn-item-request vn-tbody > vn-tr:nth-child(1) > vn-td-editable:nth-child(8)', + firstRequestConcept: 'vn-item-request vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(9)', + secondRequestStatus: 'vn-item-request vn-tbody > vn-tr:nth-child(2) > vn-td:nth-child(10)', + firstRequestStatus: 'vn-item-request vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(10)', + secondRequestDecline: 'vn-item-request vn-tbody > vn-tr:nth-child(1) vn-icon-button[icon="thumb_down"]', + declineReason: 'vn-textarea[ng-model="$ctrl.denyObservation"]', + acceptDeclineReason: 'button[response="accept"]', + + }, itemBasicData: { basicDataButton: 'vn-left-menu a[ui-sref="item.card.basicData"]', goToItemIndexButton: 'vn-item-descriptor [ui-sref="item.index"]', diff --git a/e2e/paths/04-item/13_request.spec.js b/e2e/paths/04-item/13_request.spec.js new file mode 100644 index 0000000000..d6aecbb48e --- /dev/null +++ b/e2e/paths/04-item/13_request.spec.js @@ -0,0 +1,48 @@ +import selectors from '../../helpers/selectors.js'; +import getBrowser from '../../helpers/puppeteer'; + +describe('Item request path', () => { + let browser; + let page; + beforeAll(async() => { + browser = await getBrowser(); + page = browser.page; + await page.loginAndModule('buyer', 'item'); + await page.accessToSection('item.request'); + }); + + afterAll(async() => { + await browser.close(); + }); + + it('should reach the item request section', async() => { + const result = await page.expectURL('/item/request'); + + expect(result).toBe(true); + }); + + it('should fill the id and quantity then check the concept was updated', async() => { + await page.writeOnEditableTD(selectors.itemRequest.firstRequestItemID, '4'); + await page.writeOnEditableTD(selectors.itemRequest.firstRequestQuantity, '10'); + await page.waitForTextInElement(selectors.itemRequest.firstRequestConcept, 'Melee weapon heavy shield 1x0.5m'); + let filledConcept = await page.waitToGetProperty(selectors.itemRequest.firstRequestConcept, 'innerText'); + + expect(filledConcept).toContain('Melee weapon heavy shield 1x0.5m'); + }); + + it('should the status of the request should now be accepted', async() => { + let status = await page.waitToGetProperty(selectors.itemRequest.firstRequestStatus, 'innerText'); + + expect(status).toContain('Aceptada'); + }); + + it('should now click on the second declain request icon then type the reason', async() => { + await page.waitToClick(selectors.itemRequest.secondRequestDecline); + await page.write(selectors.itemRequest.declineReason, 'not quite as expected'); + await page.waitToClick(selectors.itemRequest.acceptDeclineReason); + await page.waitForContentLoaded(); + let status = await page.waitToGetProperty(selectors.itemRequest.firstRequestStatus, 'innerText'); + + expect(status).toContain('Denegada'); + }); +}); diff --git a/modules/item/front/request/index.html b/modules/item/front/request/index.html index e0cf05107d..3216e05e16 100644 --- a/modules/item/front/request/index.html +++ b/modules/item/front/request/index.html @@ -85,7 +85,7 @@ { - it('should return all ticket requests', async() => { + it('should now return all ticket requests', async() => { let ctx = {req: {accessToken: {userId: 9}}, args: {}}; let result = await app.models.TicketRequest.filter(ctx); - expect(result.length).toEqual(2); + expect(result.length).toEqual(3); }); it('should return the ticket request matching a generic search value which is the ticket ID', async() => { @@ -42,7 +42,7 @@ describe('ticket-request filter()', () => { let result = await app.models.TicketRequest.filter(ctx); let requestId = result[0].id; - expect(requestId).toEqual(4); + expect(requestId).toEqual(3); }); it('should return the ticket request matching the isOk triple-state', async() => { @@ -51,7 +51,7 @@ describe('ticket-request filter()', () => { let result = await app.models.TicketRequest.filter(ctx); let requestId = result[0].id; - expect(requestId).toEqual(4); + expect(requestId).toEqual(3); }); it('should return the ticket request matching the client ID', async() => { @@ -69,7 +69,7 @@ describe('ticket-request filter()', () => { let result = await app.models.TicketRequest.filter(ctx); let requestId = result[0].id; - expect(requestId).toEqual(4); + expect(requestId).toEqual(3); }); it('should return the ticket request matching the salesPerson ID', async() => { @@ -78,6 +78,6 @@ describe('ticket-request filter()', () => { let result = await app.models.TicketRequest.filter(ctx); let requestId = result[0].id; - expect(requestId).toEqual(4); + expect(requestId).toEqual(3); }); });