[IMP] point_of_sale: add a basic UI unit test based on the new 'Tour' module
This commit is contained in:
@@ -1,93 +1,89 @@
|
||||
function openerp_pos_tests(instance, module){ //module is instance.point_of_sale
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
// Various UI Tests to measure performance and memory leaks.
|
||||
module.UiTester = function(){
|
||||
var running = false;
|
||||
var queue = new module.JobQueue();
|
||||
openerp.Tour.register({
|
||||
id: 'pos_basic_order',
|
||||
name: 'Complete a basic order trough the Front-End',
|
||||
path: '/web#model=pos.session.opening&action=point_of_sale.action_pos_session_opening',
|
||||
mode: 'test',
|
||||
steps: [
|
||||
{
|
||||
title: 'Wait fot the bloody screen to be ready',
|
||||
wait: 200,
|
||||
},
|
||||
{
|
||||
title: 'Load the Session',
|
||||
waitNot: '.oe_loading:visible',
|
||||
element: 'span:contains("Resume Session"),span:contains("Start Session")',
|
||||
},
|
||||
{
|
||||
title: 'Loading the Loading Screen',
|
||||
waitFor: '.loader'
|
||||
},
|
||||
{
|
||||
title: 'Waiting for the end of loading...',
|
||||
waitFor: '.loader:hidden',
|
||||
},
|
||||
{
|
||||
title: 'Loading The Point of Sale',
|
||||
waitFor: '.pos',
|
||||
},
|
||||
{
|
||||
title: 'On va manger des CHIPS!',
|
||||
element: '.product-list .product-name:contains("250g Lays Pickels")',
|
||||
},
|
||||
{
|
||||
title: 'The chips have been added to the Order',
|
||||
waitFor: '.order .product-name:contains("250g Lays Pickels")',
|
||||
},
|
||||
{
|
||||
title: 'The order total has been updated to the correct value',
|
||||
wait: 2000,
|
||||
waitFor: '.order .total .value:contains("1.48 €")',
|
||||
},
|
||||
{
|
||||
title: "Let's buy more chips",
|
||||
element: '.product-list .product-name:contains("250g Lays Pickels")',
|
||||
},
|
||||
{
|
||||
title: "Let's veryify we pay the correct price for two bags of chips",
|
||||
waitFor: '.order .total .value:contains("2.96 €")',
|
||||
},
|
||||
{
|
||||
title: "Let's pay with a debit card",
|
||||
element: ".paypad-button:contains('Bank')",
|
||||
},
|
||||
{
|
||||
title: "Let's accept the payment",
|
||||
onload: function(){
|
||||
// The test cannot validate or cancel the print() ... so we replace it by a noop !.
|
||||
window._print = window.print;
|
||||
window.print = function(){ console.log('Print!') };
|
||||
},
|
||||
element: ".button .iconlabel:contains('Validate'):visible",
|
||||
},
|
||||
{
|
||||
title: "Let's finish the order",
|
||||
element: ".button:not(.disabled) .iconlabel:contains('Next'):visible",
|
||||
},
|
||||
{
|
||||
onload: function(){
|
||||
window.print = window._print;
|
||||
window._print = undefined;
|
||||
},
|
||||
title: "Let's wait for the order posting",
|
||||
waitFor: ".oe_status.js_synch .js_connected:visible",
|
||||
},
|
||||
{
|
||||
title: "Let's close the Point of Sale",
|
||||
element: ".header-button:contains('Close')",
|
||||
},
|
||||
{
|
||||
title: "Wait for the backend to ready itself",
|
||||
element: 'span:contains("Resume Session"),span:contains("Start Session")',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// stop the currently running test
|
||||
this.stop = function(){
|
||||
queue.clear();
|
||||
};
|
||||
})();
|
||||
|
||||
// randomly switch product categories
|
||||
this.category_switch = function(interval){
|
||||
queue.schedule(function(){
|
||||
var breadcrumbs = $('.breadcrumb-button');
|
||||
var categories = $('.category-button');
|
||||
if(categories.length > 0){
|
||||
var rnd = Math.floor(Math.random()*categories.length);
|
||||
categories.eq(rnd).click();
|
||||
}else{
|
||||
var rnd = Math.floor(Math.random()*breadcrumbs.length);
|
||||
breadcrumbs.eq(rnd).click();
|
||||
}
|
||||
},{repeat:true, duration:interval});
|
||||
};
|
||||
|
||||
// randomly order products then resets the order
|
||||
this.order_products = function(interval){
|
||||
|
||||
queue.schedule(function(){
|
||||
var def = new $.Deferred();
|
||||
var order_queue = new module.JobQueue();
|
||||
var order_size = 1 + Math.floor(Math.random()*10);
|
||||
|
||||
while(order_size--){
|
||||
order_queue.schedule(function(){
|
||||
var products = $('.product');
|
||||
if(products.length > 0){
|
||||
var rnd = Math.floor(Math.random()*products.length);
|
||||
products.eq(rnd).click();
|
||||
}
|
||||
},{duration:20});
|
||||
}
|
||||
order_queue.finished().then(function(){
|
||||
$('.deleteorder-button').click();
|
||||
def.resolve();
|
||||
});
|
||||
return def;
|
||||
},{repeat:true, duration: interval});
|
||||
|
||||
};
|
||||
|
||||
// makes a complete product order cycle ( print via proxy must be activated, and scale deactivated )
|
||||
this.full_order_cycle = function(interval){
|
||||
queue.schedule(function(){
|
||||
var def = new $.Deferred();
|
||||
var order_queue = new module.JobQueue();
|
||||
var order_size = 1 + Math.floor(Math.random()*50);
|
||||
|
||||
while(order_size--){
|
||||
order_queue.schedule(function(){
|
||||
var products = $('.product');
|
||||
if(products.length > 0){
|
||||
var rnd = Math.floor(Math.random()*products.length);
|
||||
products.eq(rnd).click();
|
||||
}
|
||||
},{duration:50});
|
||||
}
|
||||
order_queue.schedule(function(){
|
||||
$('.paypad-button:first').click();
|
||||
},{duration:250});
|
||||
order_queue.schedule(function(){
|
||||
$('.paymentline-input:first').val(10000);
|
||||
$('.paymentline-input:first').keydown();
|
||||
$('.paymentline-input:first').keyup();
|
||||
},{duration:250});
|
||||
order_queue.schedule(function(){
|
||||
$('.pos-actionbar-button-list .button:eq(2)').click();
|
||||
},{duration:250});
|
||||
order_queue.schedule(function(){
|
||||
def.resolve();
|
||||
});
|
||||
return def;
|
||||
},{repeat: true, duration: interval});
|
||||
};
|
||||
};
|
||||
|
||||
if(jQuery.deparam(jQuery.param.querystring()).debug !== undefined){
|
||||
window.pos_test_ui = new module.UiTester();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user