mirror of
https://github.com/bringout/oca-ocb-sale.git
synced 2026-04-27 04:32:00 +02:00
Initial commit: Sale packages
This commit is contained in:
commit
14e3d26998
6469 changed files with 2479670 additions and 0 deletions
|
|
@ -0,0 +1,76 @@
|
|||
odoo.define('website_event_sale.tour.WebsiteEventSaleTourMethods', function (require) {
|
||||
'use strict';
|
||||
|
||||
function changePricelist(pricelistName) {
|
||||
return [
|
||||
{
|
||||
content: "Go to page Shop",
|
||||
trigger: '.nav-link:contains("Shop")',
|
||||
},
|
||||
{
|
||||
content: "Toggle Pricelist",
|
||||
trigger: '.o_pricelist_dropdown > .dropdown-toggle',
|
||||
run: 'click',
|
||||
},
|
||||
{
|
||||
content: `Activate Pricelist ${pricelistName}`,
|
||||
trigger: `.dropdown-item:contains(${pricelistName})`,
|
||||
run: 'click',
|
||||
},
|
||||
{
|
||||
content: 'Wait for pricelist to load',
|
||||
trigger: `.dropdown-toggle:contains(${pricelistName})`,
|
||||
run: function () {},
|
||||
},
|
||||
];
|
||||
}
|
||||
function checkPriceEvent(eventName, price) {
|
||||
return [
|
||||
{
|
||||
content: "Go to page Event",
|
||||
trigger: '.nav-link:contains("Event")',
|
||||
},
|
||||
{
|
||||
content: "Open the Pycon event",
|
||||
trigger: `.o_wevent_events_list a:contains(${eventName})`,
|
||||
},
|
||||
{
|
||||
content: "Verify Price",
|
||||
trigger: `.oe_currency_value:contains(${price})`,
|
||||
run: function () {}, // it's a check
|
||||
},
|
||||
]
|
||||
}
|
||||
function checkPriceDiscountEvent(eventName, price, discount) {
|
||||
return [
|
||||
...checkPriceEvent(eventName, price),
|
||||
{
|
||||
content: "Verify Price before discount",
|
||||
trigger: `del:contains(${discount})`,
|
||||
run: function () {}, // it's a check
|
||||
},
|
||||
]
|
||||
}
|
||||
function checkPriceCart(price) {
|
||||
return [
|
||||
{
|
||||
content: "Go to page Cart",
|
||||
trigger: '.fa-shopping-cart',
|
||||
},
|
||||
{
|
||||
content: "Verify Price",
|
||||
trigger: `[id=order_total] .oe_currency_value:contains(${price})`,
|
||||
run: function () {}, // it's a check
|
||||
},
|
||||
]
|
||||
}
|
||||
const getPriceListChecksSteps = function ({pricelistName, eventName, price, priceBeforeDiscount=false}) {
|
||||
const checkPriceSteps = priceBeforeDiscount ? checkPriceDiscountEvent(eventName, price, priceBeforeDiscount) : checkPriceEvent(eventName, price);
|
||||
return [
|
||||
...changePricelist(pricelistName),
|
||||
...checkPriceSteps,
|
||||
...checkPriceCart(price),
|
||||
]
|
||||
}
|
||||
return { getPriceListChecksSteps, changePricelist, checkPriceCart }
|
||||
});
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
odoo.define('website_event_sale.tour', function (require) {
|
||||
'use strict';
|
||||
|
||||
var tour = require('web_tour.tour');
|
||||
|
||||
tour.register('event_buy_tickets', {
|
||||
test: true,
|
||||
url: '/event',
|
||||
},
|
||||
[
|
||||
{
|
||||
content: "Go to the `Events` page",
|
||||
trigger: 'a[href*="/event"]:contains("Conference for Architects TEST"):first',
|
||||
},
|
||||
{
|
||||
content: "Select 1 unit of `Standard` ticket type",
|
||||
extra_trigger: '#wrap:not(:has(a[href*="/event"]:contains("Conference for Architects")))',
|
||||
trigger: 'select:eq(0)',
|
||||
run: 'text 1',
|
||||
},
|
||||
{
|
||||
content: "Select 2 units of `VIP` ticket type",
|
||||
extra_trigger: 'select:eq(0):has(option:contains(1):propSelected)',
|
||||
trigger: 'select:eq(1)',
|
||||
run: 'text 2',
|
||||
},
|
||||
{
|
||||
content: "Click on `Order Now` button",
|
||||
extra_trigger: 'select:eq(1):has(option:contains(2):propSelected)',
|
||||
trigger: '.btn-primary:contains("Register")',
|
||||
},
|
||||
{
|
||||
content: "Fill attendees details",
|
||||
trigger: 'form[id="attendee_registration"] .btn:contains("Continue")',
|
||||
run: function () {
|
||||
$("input[name='1-name']").val("Att1");
|
||||
$("input[name='1-phone']").val("111 111");
|
||||
$("input[name='1-email']").val("att1@example.com");
|
||||
$("input[name='2-name']").val("Att2");
|
||||
$("input[name='2-phone']").val("222 222");
|
||||
$("input[name='2-email']").val("att2@example.com");
|
||||
$("input[name='3-name']").val("Att3");
|
||||
$("input[name='3-phone']").val("333 333");
|
||||
$("input[name='3-email']").val("att3@example.com");
|
||||
},
|
||||
},
|
||||
{
|
||||
content: "Validate attendees details",
|
||||
extra_trigger: "input[name='1-name'], input[name='2-name'], input[name='3-name']",
|
||||
trigger: 'button:contains("Continue")',
|
||||
},
|
||||
{
|
||||
content: "Check that the cart contains exactly 3 triggers",
|
||||
trigger: 'a:has(.my_cart_quantity:containsExact(3)),.o_extra_menu_items .fa-plus',
|
||||
run: function () {}, // it's a check
|
||||
},
|
||||
{
|
||||
content: "go to cart",
|
||||
trigger: 'a:contains(Return to Cart)',
|
||||
},
|
||||
{
|
||||
content: "Now click on `Process Checkout`",
|
||||
extra_trigger: 'a:has(.my_cart_quantity):contains(3),#cart_products input.js_quantity[value="3"]',
|
||||
trigger: '.btn-primary:contains("Process Checkout")'
|
||||
},
|
||||
{
|
||||
content: "Check that the subtotal is 4,000.00 USD", // this test will fail if the currency of the main company is not USD
|
||||
trigger: '#order_total_untaxed .oe_currency_value:contains("4,000.00")',
|
||||
run: function () {}, // it's a check
|
||||
},
|
||||
{
|
||||
content: "Select `Wire Transfer` payment method",
|
||||
trigger: '#payment_method label:contains("Wire Transfer")',
|
||||
},
|
||||
{
|
||||
content: "Pay",
|
||||
//Either there are multiple payment methods, and one is checked, either there is only one, and therefore there are no radio inputs
|
||||
// extra_trigger: '#payment_method input:checked,#payment_method:not(:has("input:radio:visible"))',
|
||||
trigger: 'button[name="o_payment_submit_button"]:visible:not(:disabled)',
|
||||
},
|
||||
{
|
||||
content: "Last step",
|
||||
trigger: '.oe_website_sale_tx_status:contains("Please use the following transfer details")',
|
||||
timeout: 30000,
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
});
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
odoo.define('website_event_sale.tour.last_ticket', function (require) {
|
||||
'use strict';
|
||||
|
||||
var tour = require('web_tour.tour');
|
||||
|
||||
tour.register('event_buy_last_ticket', {
|
||||
test: true,
|
||||
url: '/event',
|
||||
},[{
|
||||
content: "Open the Last ticket test event page",
|
||||
trigger: '.o_wevent_events_list a:contains("Last ticket test")',
|
||||
},
|
||||
{
|
||||
content: "Show available Tickets",
|
||||
trigger: '.btn-primary:contains("Register")',
|
||||
},
|
||||
{
|
||||
content: "Select 2 units of `VIP` ticket type",
|
||||
extra_trigger: '#wrap:not(:has(a[href*="/event"]:contains("Last ticket test")))',
|
||||
trigger: 'select:eq(0)',
|
||||
run: 'text 2',
|
||||
},
|
||||
{
|
||||
content: "Click on `Order Now` button",
|
||||
extra_trigger: 'select:eq(0):has(option:contains(2):propSelected)',
|
||||
trigger: '.a-submit:contains("Register")',
|
||||
},
|
||||
{
|
||||
content: "Fill attendees details",
|
||||
trigger: 'form[id="attendee_registration"] .btn:contains("Continue")',
|
||||
run: function () {
|
||||
$("input[name='1-name']").val("Att1");
|
||||
$("input[name='1-phone']").val("111 111");
|
||||
$("input[name='1-email']").val("att1@example.com");
|
||||
$("input[name='2-name']").val("Att2");
|
||||
$("input[name='2-phone']").val("222 222");
|
||||
$("input[name='2-email']").val("att2@example.com");
|
||||
},
|
||||
},
|
||||
{
|
||||
content: "Validate attendees details",
|
||||
extra_trigger: "input[name='1-name'], input[name='2-name']",
|
||||
trigger: 'button:contains("Continue")',
|
||||
},
|
||||
{
|
||||
content: "Fill address",
|
||||
trigger: 'form.checkout_autoformat',
|
||||
run: function () {
|
||||
$("input[name='name']").val("test1");
|
||||
$("input[name='email']").val("test@example.com");
|
||||
$("input[name='phone']").val("111 111");
|
||||
$("input[name='street']").val("street test 1");
|
||||
$("input[name='city']").val("testCity");
|
||||
$("input[name='zip']").val("123");
|
||||
$('#country_id option:eq(1)').attr('selected', true);
|
||||
},
|
||||
},
|
||||
{
|
||||
content: "Validate address",
|
||||
trigger: '.btn-primary:contains("Next")',
|
||||
},
|
||||
{
|
||||
// if the seats_available checking logic is not correct,
|
||||
// the shopping cart will be cleared when selling the last ticket
|
||||
// the tour test will be failed here
|
||||
content: "Select `Wire Transfer` payment method",
|
||||
trigger: '#payment_method label:contains("Wire Transfer")',
|
||||
},
|
||||
// following steps are based on the website_sale_buy.js
|
||||
{
|
||||
content: "Pay",
|
||||
//Either there are multiple payment methods, and one is checked, either there is only one, and therefore there are no radio inputs
|
||||
extra_trigger: '#payment_method label:contains("Wire Transfer") input:checked,#payment_method:not(:has("input:radio:visible"))',
|
||||
trigger: 'button[name="o_payment_submit_button"]:visible:not(:disabled)',
|
||||
},
|
||||
{
|
||||
content: "payment finish",
|
||||
trigger: '.oe_website_sale:contains("Please use the following transfer details")',
|
||||
// Leave /shop/confirmation to prevent RPC loop to /shop/payment/get_status.
|
||||
// The RPC could be handled in python while the tour is killed (and the session), leading to crashes
|
||||
run: function () {
|
||||
window.location.href = '/contactus'; // Redirect in JS to avoid the RPC loop (20x1sec)
|
||||
},
|
||||
timeout: 30000,
|
||||
},
|
||||
{
|
||||
content: "wait page loaded",
|
||||
trigger: 'h1:contains("Contact us")',
|
||||
run: function () {}, // it's a check
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
odoo.define('website_event_sale.tour.event_sale_pricelists_different_currencies', function (require) {
|
||||
'use strict';
|
||||
|
||||
const tour = require('web_tour.tour');
|
||||
const { getPriceListChecksSteps } = require('website_event_sale.tour.WebsiteEventSaleTourMethods');
|
||||
|
||||
tour.register('event_sale_pricelists_different_currencies', {
|
||||
test: true,
|
||||
url: '/event',
|
||||
},[
|
||||
// Register for tickets
|
||||
{
|
||||
content: "Open the Pycon event",
|
||||
trigger: '.o_wevent_events_list a:contains("Pycon")',
|
||||
},
|
||||
{
|
||||
content: "Register",
|
||||
trigger: '.btn-primary:contains("Register")',
|
||||
},
|
||||
{
|
||||
content: "Fill attendees details",
|
||||
trigger: 'form[id="attendee_registration"] .btn:contains("Continue")',
|
||||
run: function () {
|
||||
$("input[name='1-name']").val("Great Name");
|
||||
$("input[name='1-phone']").val("111 111");
|
||||
$("input[name='1-email']").val("great@name.com");
|
||||
},
|
||||
},
|
||||
{
|
||||
content: "Validate attendees details",
|
||||
extra_trigger: "input[name='1-name'], input[name='2-name']",
|
||||
trigger: 'button:contains("Continue")',
|
||||
},
|
||||
...getPriceListChecksSteps({
|
||||
pricelistName: "EUR With Discount Included",
|
||||
eventName: "Pycon",
|
||||
price: "90.00",
|
||||
}),
|
||||
...getPriceListChecksSteps({
|
||||
pricelistName: "EUR Without Discount Included",
|
||||
eventName: "Pycon",
|
||||
price: "90.00",
|
||||
priceBeforeDiscount: "100.00",
|
||||
}),
|
||||
...getPriceListChecksSteps({
|
||||
pricelistName: "EX With Discount Included",
|
||||
eventName: "Pycon",
|
||||
price: "900.00",
|
||||
}),
|
||||
...getPriceListChecksSteps({
|
||||
pricelistName: "EX Without Discount Included",
|
||||
eventName: "Pycon",
|
||||
price: "900.00",
|
||||
priceBeforeDiscount: "1,000.00",
|
||||
}),
|
||||
]);
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue