#820 e2e item.diary
This commit is contained in:
parent
30df8abed2
commit
ed15d5566e
|
@ -17,10 +17,10 @@ Nightmare.action('login', function(userName, done) {
|
||||||
|
|
||||||
Nightmare.action('changeLanguageToEnglish', function(done) {
|
Nightmare.action('changeLanguageToEnglish', function(done) {
|
||||||
this.wait('#lang')
|
this.wait('#lang')
|
||||||
.evaluate((selector) => {
|
.evaluate(selector => {
|
||||||
return document.querySelector(selector).title;
|
return document.querySelector(selector).title;
|
||||||
}, '#lang')
|
}, '#lang')
|
||||||
.then((title) => {
|
.then(title => {
|
||||||
if (title === 'Change language')
|
if (title === 'Change language')
|
||||||
this.then(done);
|
this.then(done);
|
||||||
else {
|
else {
|
||||||
|
@ -41,7 +41,7 @@ Nightmare.action('waitForLogin', function(userName, done) {
|
||||||
|
|
||||||
Nightmare.action('parsedUrl', function(done) {
|
Nightmare.action('parsedUrl', function(done) {
|
||||||
this.url()
|
this.url()
|
||||||
.then((url) => {
|
.then(url => {
|
||||||
done(null, new URL(url));
|
done(null, new URL(url));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -58,7 +58,7 @@ Nightmare.action('waitPropertyLength', function(selector, property, minLength, d
|
||||||
return element && element[property] != null && element[property] !== '' && element[property].length >= minLength;
|
return element && element[property] != null && element[property] !== '' && element[property].length >= minLength;
|
||||||
}, selector, property, minLength)
|
}, selector, property, minLength)
|
||||||
.getProperty(selector, property)
|
.getProperty(selector, property)
|
||||||
.then((result) => done(null, result), done);
|
.then(result => done(null, result), done);
|
||||||
});
|
});
|
||||||
|
|
||||||
Nightmare.action('waitProperty', function(selector, property, done) {
|
Nightmare.action('waitProperty', function(selector, property, done) {
|
||||||
|
@ -67,7 +67,7 @@ Nightmare.action('waitProperty', function(selector, property, done) {
|
||||||
return element && element[property] != null && element[property] !== '';
|
return element && element[property] != null && element[property] !== '';
|
||||||
}, selector, property)
|
}, selector, property)
|
||||||
.getProperty(selector, property)
|
.getProperty(selector, property)
|
||||||
.then((result) => done(null, result), done);
|
.then(result => done(null, result), done);
|
||||||
});
|
});
|
||||||
|
|
||||||
Nightmare.action('getInnerText', function(selector, done) {
|
Nightmare.action('getInnerText', function(selector, done) {
|
||||||
|
@ -108,7 +108,7 @@ Nightmare.action('waitToClick', function(selector, done) {
|
||||||
|
|
||||||
Nightmare.action('isVisible', function(selector, done) {
|
Nightmare.action('isVisible', function(selector, done) {
|
||||||
this.wait(selector)
|
this.wait(selector)
|
||||||
.evaluate_now((elementSelector) => {
|
.evaluate_now(elementSelector => {
|
||||||
const selectorMatches = document.querySelectorAll(elementSelector);
|
const selectorMatches = document.querySelectorAll(elementSelector);
|
||||||
const element = selectorMatches[0];
|
const element = selectorMatches[0];
|
||||||
if (selectorMatches.length > 1)
|
if (selectorMatches.length > 1)
|
||||||
|
@ -116,7 +116,7 @@ Nightmare.action('isVisible', function(selector, done) {
|
||||||
|
|
||||||
let isVisible = false;
|
let isVisible = false;
|
||||||
if (element) {
|
if (element) {
|
||||||
const eventHandler = (event) => {
|
const eventHandler = event => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
isVisible = true;
|
isVisible = true;
|
||||||
};
|
};
|
||||||
|
@ -149,7 +149,7 @@ Nightmare.action('isVisible', function(selector, done) {
|
||||||
|
|
||||||
Nightmare.action('selectText', function(selector, done) {
|
Nightmare.action('selectText', function(selector, done) {
|
||||||
this.wait(selector)
|
this.wait(selector)
|
||||||
.evaluate((elementToSelect) => {
|
.evaluate(elementToSelect => {
|
||||||
const range = document.createRange();
|
const range = document.createRange();
|
||||||
range.selectNodeContents(document.querySelector(elementToSelect));
|
range.selectNodeContents(document.querySelector(elementToSelect));
|
||||||
const sel = window.getSelection();
|
const sel = window.getSelection();
|
||||||
|
@ -161,7 +161,7 @@ Nightmare.action('selectText', function(selector, done) {
|
||||||
});
|
});
|
||||||
|
|
||||||
Nightmare.action('countElement', function(selector, done) {
|
Nightmare.action('countElement', function(selector, done) {
|
||||||
this.evaluate_now((selector) => {
|
this.evaluate_now(selector => {
|
||||||
return document.querySelectorAll(selector).length;
|
return document.querySelectorAll(selector).length;
|
||||||
}, done, selector);
|
}, done, selector);
|
||||||
});
|
});
|
||||||
|
@ -209,24 +209,24 @@ Nightmare.action('waitForTextInInput', function(selector, name, done) {
|
||||||
|
|
||||||
Nightmare.action('waitForInnerText', function(selector, done) {
|
Nightmare.action('waitForInnerText', function(selector, done) {
|
||||||
this.wait(selector)
|
this.wait(selector)
|
||||||
.wait((selector) => {
|
.wait(selector => {
|
||||||
const innerText = document.querySelector(selector).innerText;
|
const innerText = document.querySelector(selector).innerText;
|
||||||
return innerText != null && innerText != '';
|
return innerText != null && innerText != '';
|
||||||
}, selector)
|
}, selector)
|
||||||
.evaluate_now((selector) => {
|
.evaluate_now(selector => {
|
||||||
return document.querySelector(selector).innerText;
|
return document.querySelector(selector).innerText;
|
||||||
}, done, selector);
|
}, done, selector);
|
||||||
});
|
});
|
||||||
|
|
||||||
Nightmare.action('waitForEmptyInnerText', function(selector, done) {
|
Nightmare.action('waitForEmptyInnerText', function(selector, done) {
|
||||||
this.wait((selector) => {
|
this.wait(selector => {
|
||||||
return document.querySelector(selector).innerText == '';
|
return document.querySelector(selector).innerText == '';
|
||||||
}, selector)
|
}, selector)
|
||||||
.then(done);
|
.then(done);
|
||||||
});
|
});
|
||||||
|
|
||||||
Nightmare.action('waitForURL', function(hashURL, done) {
|
Nightmare.action('waitForURL', function(hashURL, done) {
|
||||||
this.wait((hash) => {
|
this.wait(hash => {
|
||||||
return document.location.hash.includes(hash);
|
return document.location.hash.includes(hash);
|
||||||
}, hashURL)
|
}, hashURL)
|
||||||
.then(done);
|
.then(done);
|
||||||
|
@ -234,7 +234,7 @@ Nightmare.action('waitForURL', function(hashURL, done) {
|
||||||
|
|
||||||
Nightmare.action('waitForShapes', function(selector, done) {
|
Nightmare.action('waitForShapes', function(selector, done) {
|
||||||
this.wait(selector)
|
this.wait(selector)
|
||||||
.evaluate_now((selector) => {
|
.evaluate_now(selector => {
|
||||||
const shapes = document.querySelectorAll(selector);
|
const shapes = document.querySelectorAll(selector);
|
||||||
const shapesList = [];
|
const shapesList = [];
|
||||||
|
|
||||||
|
@ -248,14 +248,14 @@ Nightmare.action('waitForShapes', function(selector, done) {
|
||||||
|
|
||||||
Nightmare.action('waitForSnackbar', function(done) {
|
Nightmare.action('waitForSnackbar', function(done) {
|
||||||
this.wait(500).waitForShapes('vn-snackbar .shape .text')
|
this.wait(500).waitForShapes('vn-snackbar .shape .text')
|
||||||
.then((shapes) => {
|
.then(shapes => {
|
||||||
done(null, shapes);
|
done(null, shapes);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
Nightmare.action('waitForLastShape', function(selector, done) {
|
Nightmare.action('waitForLastShape', function(selector, done) {
|
||||||
this.wait(selector)
|
this.wait(selector)
|
||||||
.evaluate_now((selector) => {
|
.evaluate_now(selector => {
|
||||||
const shape = document.querySelector(selector);
|
const shape = document.querySelector(selector);
|
||||||
|
|
||||||
return shape.innerText;
|
return shape.innerText;
|
||||||
|
@ -264,7 +264,7 @@ Nightmare.action('waitForLastShape', function(selector, done) {
|
||||||
|
|
||||||
Nightmare.action('waitForLastSnackbar', function(done) {
|
Nightmare.action('waitForLastSnackbar', function(done) {
|
||||||
this.wait(500).waitForLastShape('vn-snackbar .shape .text')
|
this.wait(500).waitForLastShape('vn-snackbar .shape .text')
|
||||||
.then((shapes) => {
|
.then(shapes => {
|
||||||
done(null, shapes);
|
done(null, shapes);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -296,8 +296,17 @@ export default {
|
||||||
botanical: `vn-item-summary vn-vertical[name="botanical"]`,
|
botanical: `vn-item-summary vn-vertical[name="botanical"]`,
|
||||||
barcode: `vn-item-summary vn-vertical[name="barcode"]`
|
barcode: `vn-item-summary vn-vertical[name="barcode"]`
|
||||||
},
|
},
|
||||||
|
itemDiary: {
|
||||||
|
thirdTicketId: 'vn-item-diary > vn-vertical > vn-card > div > vn-vertical > vn-table > div > vn-tbody > vn-tr:nth-child(3) > vn-td:nth-child(2) > span',
|
||||||
|
firstBalance: 'vn-item-diary > vn-vertical > vn-card > div > vn-vertical > vn-table > div > vn-tbody > vn-tr:nth-child(1) > vn-td.balance',
|
||||||
|
fifthBalance: 'vn-item-diary > vn-vertical > vn-card > div > vn-vertical > vn-table > div > vn-tbody > vn-tr.ng-scope.isToday.isIn > vn-td.balance > span',
|
||||||
|
warehouseSelect: 'vn-item-diary vn-autocomplete[field="$ctrl.warehouseFk"] > div > div > input',
|
||||||
|
warehouseSelectFourthOption: 'vn-item-diary > vn-vertical > vn-card > div > vn-vertical > vn-horizontal > vn-autocomplete > vn-drop-down > vn-popover > div > div.content > div > div.list > ul > li:nth-child(4)'
|
||||||
|
},
|
||||||
ticketSummary: {
|
ticketSummary: {
|
||||||
sale: 'vn-ticket-summary > vn-card > div > vn-vertical > vn-horizontal > table > tbody > tr',
|
sale: 'vn-ticket-summary > vn-card > div > vn-vertical > vn-horizontal > table > tbody > tr',
|
||||||
|
firstSaleItemId: 'vn-ticket-summary > vn-card > div > vn-vertical > vn-horizontal:nth-child(3) > table > tbody > tr > td:nth-child(2) > span',
|
||||||
|
popoverDiaryButton: 'vn-ticket-summary > vn-item-descriptor-popover vn-item-descriptor vn-icon[icon="icon-transaction"]',
|
||||||
firstSaleQuantity: 'vn-ticket-summary > vn-card > div > vn-vertical > vn-horizontal:nth-child(3) > table > tbody > tr > td:nth-child(4)',
|
firstSaleQuantity: 'vn-ticket-summary > vn-card > div > vn-vertical > vn-horizontal:nth-child(3) > table > tbody > tr > td:nth-child(4)',
|
||||||
firstSaleDiscount: 'vn-ticket-summary > vn-card > div > vn-vertical > vn-horizontal:nth-child(3) > table > tbody > tr > td:nth-child(6)'
|
firstSaleDiscount: 'vn-ticket-summary > vn-card > div > vn-vertical > vn-horizontal:nth-child(3) > table > tbody > tr > td:nth-child(6)'
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
import selectors from '../../helpers/selectors.js';
|
||||||
|
import config from '../../helpers/config.js';
|
||||||
|
import createNightmare from '../../helpers/nightmare';
|
||||||
|
|
||||||
|
describe('Ticket diary path', () => {
|
||||||
|
const nightmare = createNightmare();
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
nightmare
|
||||||
|
.waitForLogin('employee');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should click on the Tickets button of the top bar menu', async () => {
|
||||||
|
const url = await nightmare
|
||||||
|
.waitToClick(selectors.globalItems.applicationsMenuButton)
|
||||||
|
.wait(selectors.globalItems.applicationsMenuVisible)
|
||||||
|
.waitToClick(selectors.globalItems.ticketsButton)
|
||||||
|
.wait(selectors.ticketsIndex.searchResult)
|
||||||
|
.parsedUrl();
|
||||||
|
|
||||||
|
expect(url.hash).toEqual('#!/ticket/index');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should search for a specific ticket', async () => {
|
||||||
|
const result = await nightmare
|
||||||
|
.wait(selectors.ticketsIndex.searchResult)
|
||||||
|
.type(selectors.ticketsIndex.searchTicketInput, 'id:1')
|
||||||
|
.click(selectors.ticketsIndex.searchButton)
|
||||||
|
.waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1)
|
||||||
|
.countElement(selectors.ticketsIndex.searchResult);
|
||||||
|
|
||||||
|
expect(result).toEqual(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should click on the search result to access to the ticket summary`, async () => {
|
||||||
|
const url = await nightmare
|
||||||
|
.waitForTextInElement(selectors.ticketsIndex.searchResult, 'address 21')
|
||||||
|
.waitToClick(selectors.ticketsIndex.searchResult)
|
||||||
|
.waitForURL('/summary')
|
||||||
|
.url();
|
||||||
|
|
||||||
|
expect(url).toContain('/summary');
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should navigate to the item diary from the 1st sale item id descriptor popover`, async () => {
|
||||||
|
const url = await nightmare
|
||||||
|
.waitToClick(selectors.ticketSummary.firstSaleItemId)
|
||||||
|
.waitToClick(selectors.ticketSummary.popoverDiaryButton)
|
||||||
|
.waitForLogin('employee')
|
||||||
|
.goto(`${config.url}#!/item/1/diary?warehouseFk=1&ticketFk=1`)
|
||||||
|
.parsedUrl();
|
||||||
|
|
||||||
|
expect(url.hash).toContain('/diary');
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should check the seventh line id is marked as counter`, async () => {
|
||||||
|
const result = await nightmare
|
||||||
|
.waitProperty(selectors.itemDiary.thirdTicketId, 'className')
|
||||||
|
.getProperty(selectors.itemDiary.thirdTicketId, 'className');
|
||||||
|
|
||||||
|
expect(result).toContain('counter');
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should check the fifth line balance is marked as counter`, async () => {
|
||||||
|
const result = await nightmare
|
||||||
|
.getProperty(selectors.itemDiary.fifthBalance, 'className');
|
||||||
|
|
||||||
|
expect(result).toContain('counter');
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should change to the warehouse two and check there are sales marked as negative balance`, async () => {
|
||||||
|
const result = await nightmare
|
||||||
|
.waitToClick(selectors.itemDiary.warehouseSelect)
|
||||||
|
.waitToClick(selectors.itemDiary.warehouseSelectFourthOption)
|
||||||
|
.waitProperty(selectors.itemDiary.firstBalance, 'className')
|
||||||
|
.getProperty(selectors.itemDiary.firstBalance, 'className');
|
||||||
|
|
||||||
|
expect(result).toContain('balance');
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue