2564-item_priceFixed + e2e #513
|
@ -250,6 +250,18 @@ export default {
|
||||||
taxClassCheckbox: '.vn-popover.shown vn-horizontal:nth-child(11) > vn-check',
|
taxClassCheckbox: '.vn-popover.shown vn-horizontal:nth-child(11) > vn-check',
|
||||||
saveFieldsButton: '.vn-popover.shown vn-button[label="Save"] > button'
|
saveFieldsButton: '.vn-popover.shown vn-button[label="Save"] > button'
|
||||||
},
|
},
|
||||||
|
itemFixedPrice: {
|
||||||
|
add: 'vn-fixed-price vn-icon[icon="add_circle"]',
|
||||||
|
fourthFixedPrice: 'vn-fixed-price vn-tr:nth-child(4)',
|
||||||
|
fourthItemID: 'vn-fixed-price vn-tr:nth-child(4) vn-autocomplete[ng-model="price.itemFk"]',
|
||||||
|
fourthWarehouse: 'vn-fixed-price vn-tr:nth-child(4) vn-autocomplete[ng-model="price.warehouseFk"]',
|
||||||
|
fourthPPU: 'vn-fixed-price vn-tr:nth-child(4) > vn-td-editable:nth-child(4)',
|
||||||
|
fourthPPP: 'vn-fixed-price vn-tr:nth-child(4) > vn-td-editable:nth-child(5)',
|
||||||
|
fourthMinPrice: 'vn-fixed-price vn-tr:nth-child(4) > vn-td-editable:nth-child(6)',
|
||||||
|
fourthStarted: 'vn-fixed-price vn-tr:nth-child(4) vn-date-picker[ng-model="price.started"]',
|
||||||
|
fourthEnded: 'vn-fixed-price vn-tr:nth-child(4) vn-date-picker[ng-model="price.ended"]',
|
||||||
|
fourthDeleteIcon: 'vn-fixed-price vn-tr:nth-child(4) > vn-td:nth-child(9) > vn-icon-button[icon="delete"]'
|
||||||
|
},
|
||||||
itemCreateView: {
|
itemCreateView: {
|
||||||
temporalName: 'vn-item-create vn-textfield[ng-model="$ctrl.item.provisionalName"]',
|
temporalName: 'vn-item-create vn-textfield[ng-model="$ctrl.item.provisionalName"]',
|
||||||
type: 'vn-autocomplete[ng-model="$ctrl.item.typeFk"]',
|
type: 'vn-autocomplete[ng-model="$ctrl.item.typeFk"]',
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
import selectors from '../../helpers/selectors.js';
|
||||||
|
import getBrowser from '../../helpers/puppeteer';
|
||||||
|
|
||||||
|
describe('Item fixed prices path', () => {
|
||||||
|
let browser;
|
||||||
|
let page;
|
||||||
|
beforeAll(async() => {
|
||||||
|
browser = await getBrowser();
|
||||||
|
page = browser.page;
|
||||||
|
await page.loginAndModule('buyer', 'item');
|
||||||
|
await page.accessToSection('item.fixedPrice');
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async() => {
|
||||||
|
await browser.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should click on the add new foxed price button', async() => {
|
||||||
|
await page.waitToClick(selectors.itemFixedPrice.add);
|
||||||
|
await page.waitForSelector(selectors.itemFixedPrice.fourthFixedPrice);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should fill the fixed price data', async() => {
|
||||||
|
const now = new Date();
|
||||||
|
const searchValue = 'Chest ammo box';
|
||||||
|
await page.waitToClick(selectors.itemFixedPrice.fourthItemID);
|
||||||
|
await page.write('body > div > div > div.content > div.filter.ng-scope > vn-textfield', searchValue);
|
||||||
|
try {
|
||||||
|
await page.waitForFunction(searchValue => {
|
||||||
|
const element = document.querySelector('li.active');
|
||||||
|
if (element)
|
||||||
|
return element.innerText.toLowerCase().includes(searchValue.toLowerCase());
|
||||||
|
}, {}, searchValue);
|
||||||
|
} catch (error) {
|
||||||
|
const builtSelector = await page.selectorFormater(selectors.ticketSales.moreMenuState);
|
||||||
|
const inputValue = await page.evaluate(() => {
|
||||||
|
return document.querySelector('.vn-drop-down.shown vn-textfield input').value;
|
||||||
|
});
|
||||||
|
throw new Error(`${builtSelector} value is ${inputValue}! ${error}`);
|
||||||
|
}
|
||||||
|
await page.keyboard.press('Enter');
|
||||||
|
await page.autocompleteSearch(selectors.itemFixedPrice.fourthWarehouse, 'Warehouse one');
|
||||||
|
await page.writeOnEditableTD(selectors.itemFixedPrice.fourthPPU, '20');
|
||||||
|
await page.writeOnEditableTD(selectors.itemFixedPrice.fourthPPP, '10');
|
||||||
|
await page.writeOnEditableTD(selectors.itemFixedPrice.fourthMinPrice, '5');
|
||||||
|
await page.pickDate(selectors.itemFixedPrice.fourthStarted, now);
|
||||||
|
await page.pickDate(selectors.itemFixedPrice.fourthEnded, now);
|
||||||
|
await page.waitForTimeout(1000);
|
||||||
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
|
expect(message.text).toContain('Data saved!');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should reload the section and check the created price has the expected ID', async() => {
|
||||||
|
await page.accessToSection('item.index');
|
||||||
|
await page.accessToSection('item.fixedPrice');
|
||||||
|
const result = await page.getProperty('vn-fixed-price > div > vn-card > vn-table > div > vn-tbody > vn-tr:nth-child(4) > vn-td:nth-child(1) > span', 'innerText');
|
||||||
|
|
||||||
|
expect(result).toContain('13');
|
||||||
|
});
|
||||||
|
});
|
|
@ -166,5 +166,6 @@
|
||||||
"The selected ticket is not suitable for this route": "El ticket seleccionado no es apto para esta ruta",
|
"The selected ticket is not suitable for this route": "El ticket seleccionado no es apto para esta ruta",
|
||||||
"Sorts whole route": "Reordena ruta entera",
|
"Sorts whole route": "Reordena ruta entera",
|
||||||
"New ticket request has been created with price": "Se ha creado una nueva petición de compra '{{description}}' para el día <strong>{{shipped}}</strong>, con una cantidad de <strong>{{quantity}}</strong> y un precio de <strong>{{price}} €</strong>",
|
"New ticket request has been created with price": "Se ha creado una nueva petición de compra '{{description}}' para el día <strong>{{shipped}}</strong>, con una cantidad de <strong>{{quantity}}</strong> y un precio de <strong>{{price}} €</strong>",
|
||||||
"New ticket request has been created": "Se ha creado una nueva petición de compra '{{description}}' para el día <strong>{{shipped}}</strong>, con una cantidad de <strong>{{quantity}}</strong>"
|
"New ticket request has been created": "Se ha creado una nueva petición de compra '{{description}}' para el día <strong>{{shipped}}</strong>, con una cantidad de <strong>{{quantity}}</strong>",
|
||||||
|
"That item doesn't exists": "That item doesn't exists"
|
||||||
}
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
vn-id="model"
|
vn-id="model"
|
||||||
url="FixedPrices/filter"
|
url="FixedPrices/filter"
|
||||||
limit="20"
|
limit="20"
|
||||||
data="$ctrl.prices"
|
data="prices"
|
||||||
auto-load="true"
|
auto-load="true"
|
||||||
order="itemFk">
|
order="itemFk">
|
||||||
</vn-crud-model>
|
</vn-crud-model>
|
||||||
|
@ -12,10 +12,6 @@
|
||||||
data="warehouses"
|
data="warehouses"
|
||||||
order="name">
|
order="name">
|
||||||
</vn-crud-model>
|
</vn-crud-model>
|
||||||
<vn-watcher
|
|
||||||
vn-id="watcher"
|
|
||||||
data="$ctrl.prices">
|
|
||||||
</vn-watcher>
|
|
||||||
<vn-portal slot="topbar">
|
<vn-portal slot="topbar">
|
||||||
<vn-searchbar
|
<vn-searchbar
|
||||||
auto-state="false"
|
auto-state="false"
|
||||||
|
@ -43,7 +39,7 @@
|
||||||
</vn-tr>
|
</vn-tr>
|
||||||
</vn-thead>
|
</vn-thead>
|
||||||
<vn-tbody>
|
<vn-tbody>
|
||||||
<vn-tr ng-repeat="price in $ctrl.prices">
|
<vn-tr ng-repeat="price in prices">
|
||||||
<vn-td>
|
<vn-td>
|
||||||
<span
|
<span
|
||||||
ng-if="price.itemFk"
|
ng-if="price.itemFk"
|
||||||
|
|
|
@ -40,6 +40,12 @@ export default class Controller extends Section {
|
||||||
} else
|
} else
|
||||||
this.$.model.remove($index);
|
this.$.model.remove($index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itemSearchFunc($search) {
|
||||||
|
return /^\d+$/.test($search)
|
||||||
|
? {id: $search}
|
||||||
|
: {name: {like: '%' + $search + '%'}};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ngModule.vnComponent('vnFixedPrice', {
|
ngModule.vnComponent('vnFixedPrice', {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
Fixed prices: Precios fijados
|
Fixed prices: Precios fijados
|
||||||
Search prices by item ID or code: Buscar por ID de artículo o código
|
Search prices by item ID or code: Buscar por ID de artículo o código
|
||||||
Search fixed prices: Buscar precios fijados
|
Search fixed prices: Buscar precios fijados
|
||||||
|
Add fixed price: Añadir precio fijado
|
Loading…
Reference in New Issue