19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:29:53 +01:00
parent 6e54c1af6c
commit 3ca647e428
1087 changed files with 132065 additions and 108499 deletions

View file

@ -0,0 +1,48 @@
import { test, expect } from "@odoo/hoot";
import { mockDate } from "@odoo/hoot-mock";
import { mountWithCleanup } from "@web/../tests/web_test_helpers";
import { getFilledOrder, setupPosEnv } from "@point_of_sale/../tests/unit/utils";
import { definePosModels } from "@point_of_sale/../tests/unit/data/generate_model_definitions";
import { ManageGiftCardPopup } from "@pos_loyalty/app/components/popups/manage_giftcard_popup/manage_giftcard_popup";
definePosModels();
test("addBalance", async () => {
const store = await setupPosEnv();
// Freeze current date so luxon.DateTime.now() is fixed
mockDate("2025-01-01");
let payloadResult = null;
const order = await getFilledOrder(store);
const popup = await mountWithCleanup(ManageGiftCardPopup, {
props: {
line: order.lines[0],
title: "Sell/Manage physical gift card",
getPayload: (code, amount, expDate) => {
payloadResult = { code, amount, expDate };
},
close: () => {},
},
});
popup.state.inputValue = "";
popup.state.amountValue = "";
const valid = popup.validateCode();
expect(valid).toBe(false);
expect(popup.state.error).toBe(true);
popup.state.inputValue = "101";
popup.state.amountValue = "100";
popup.state.error = false;
popup.state.amountError = false;
await popup.addBalance();
expect(payloadResult.code).toBe("101");
expect(payloadResult.amount).toBe(100);
// expiration is +1 year
expect(payloadResult.expDate).toBe("2026-01-01");
});

View file

@ -0,0 +1,52 @@
import { test, expect } from "@odoo/hoot";
import { mountWithCleanup } from "@web/../tests/web_test_helpers";
import { setupPosEnv } from "@point_of_sale/../tests/unit/utils";
import { ControlButtons } from "@point_of_sale/app/screens/product_screen/control_buttons/control_buttons";
import { definePosModels } from "@point_of_sale/../tests/unit/data/generate_model_definitions";
import { addProductLineToOrder } from "@pos_loyalty/../tests/unit/utils";
definePosModels();
test("_applyReward", async () => {
const store = await setupPosEnv();
const models = store.models;
const order = store.addNewOrder();
// Get card #1 - belongs to a loyalty-type program
const card = models["loyalty.card"].get(1);
// Get reward #2 - belongs to the same loyalty program, type = discount reward
const reward = models["loyalty.reward"].get(2);
await addProductLineToOrder(store, order);
// Total quantity in the order
const potentialQty = order.getOrderlines().reduce((acc, line) => acc + line.qty, 0);
const component = await mountWithCleanup(ControlButtons, {});
const result = await component._applyReward(reward, card.id, potentialQty);
expect(result).toBe(true);
});
test("getPotentialRewards", async () => {
const store = await setupPosEnv();
const models = store.models;
const order = store.addNewOrder();
// Get loyalty program #1 - type = loyalty
const loyaltyProgram = models["loyalty.program"].get(1);
// Get card #1 - linked to loyalty program #1
const card = models["loyalty.card"].get(1);
await addProductLineToOrder(store, order);
order._code_activated_coupon_ids = [card];
const component = await mountWithCleanup(ControlButtons, {});
const rewards = component.getPotentialRewards();
const reward = rewards[0].reward;
expect(reward).toEqual(models["loyalty.reward"].get(1));
expect(reward.program_id).toEqual(loyaltyProgram);
});

View file

@ -0,0 +1,43 @@
import { test, expect } from "@odoo/hoot";
import { mountWithCleanup } from "@web/../tests/web_test_helpers";
import { OrderSummary } from "@point_of_sale/app/screens/product_screen/order_summary/order_summary";
import { setupPosEnv } from "@point_of_sale/../tests/unit/utils";
import { definePosModels } from "@point_of_sale/../tests/unit/data/generate_model_definitions";
import { addProductLineToOrder } from "@pos_loyalty/../tests/unit/utils";
definePosModels();
test("_updateGiftCardOrderline", async () => {
const store = await setupPosEnv();
const models = store.models;
const order = store.addNewOrder();
const product = models["product.product"].get(1);
// Program #3 - loyalty program for gift cards
const program = models["loyalty.program"].get(3);
// Card #3 - gift card which program type is gift_card
const card = models["loyalty.card"].get(3);
await addProductLineToOrder(store, order);
const points = product.lst_price;
order.uiState.couponPointChanges[card.id] = {
coupon_id: card.id,
program_id: program.id,
product_id: product.id,
points: points,
manual: false,
};
const component = await mountWithCleanup(OrderSummary, {});
await component._updateGiftCardOrderline("ABC123", points);
const updatedLine = order.getSelectedOrderline();
expect(updatedLine.gift_code).toBe("ABC123");
expect(updatedLine.product_id.id).toBe(product.id);
expect(updatedLine.getQuantity()).toBe(1);
expect(order.uiState.couponPointChanges[card.id]).toBe(undefined);
});

View file

@ -0,0 +1,49 @@
import { test, expect } from "@odoo/hoot";
import { mountWithCleanup } from "@web/../tests/web_test_helpers";
import { setupPosEnv } from "@point_of_sale/../tests/unit/utils";
import { PartnerLine } from "@point_of_sale/app/screens/partner_list/partner_line/partner_line";
import { definePosModels } from "@point_of_sale/../tests/unit/data/generate_model_definitions";
definePosModels();
test("_getLoyaltyPointsRepr", async () => {
const store = await setupPosEnv();
const models = store.models;
const partner = models["res.partner"].get(1);
// Get first 3 loyalty cards and map them with program
const loyaltyCards = models["loyalty.card"]
.getAll()
.slice(0, 3)
.map((element) => ({
id: element.id,
points: element.points,
partner_id: partner.id,
program_id: models["loyalty.program"].get(element.id),
}));
const component = await mountWithCleanup(PartnerLine, {
props: {
partner,
close: () => {},
isSelected: false,
isBalanceDisplayed: true,
onClickEdit: () => {},
onClickUnselect: () => {},
onClickPartner: () => {},
onClickOrders: () => {},
},
env: {
...store.env,
utils: {
formatCurrency: (val) => `$${val.toFixed(2)}`,
},
},
});
const results = loyaltyCards.map((card) => component._getLoyaltyPointsRepr(card));
expect(results[0]).toBe("10.00 Points");
expect(results[1]).toBe("E-Wallet Program: $25.00");
expect(results[2]).toMatch("15.00 Gift Card Points");
});