mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
This is in preparation for removing angular from the variant update page. Converted using https://www.codeconvert.ai/coffeescript-to-javascript-converter
151 lines
5.1 KiB
JavaScript
151 lines
5.1 KiB
JavaScript
/**
|
|
* @jest-environment jsdom
|
|
*/
|
|
|
|
import PriceParse from "js/services/price_parser";
|
|
|
|
describe("PriceParser service", function () {
|
|
let priceParser = null;
|
|
|
|
beforeEach(() => {
|
|
priceParser = new PriceParse();
|
|
});
|
|
|
|
describe("test internal method with Regexp", function () {
|
|
describe("test replaceCommaByFinalPoint() method", function () {
|
|
it("handle the default case (with two numbers after comma)", function () {
|
|
expect(priceParser.replaceCommaByFinalPoint("1,00")).toEqual("1.00");
|
|
});
|
|
it("doesn't confuse with thousands separator", function () {
|
|
expect(priceParser.replaceCommaByFinalPoint("1,000")).toEqual("1,000");
|
|
});
|
|
it("handle also when there is only one number after the decimal separator", function () {
|
|
expect(priceParser.replaceCommaByFinalPoint("1,0")).toEqual("1.0");
|
|
});
|
|
});
|
|
|
|
describe("test removeThousandsSeparator() method", function () {
|
|
it("handle the default case", function () {
|
|
expect(priceParser.removeThousandsSeparator("1,000", ",")).toEqual("1000");
|
|
expect(priceParser.removeThousandsSeparator("1,000,000", ",")).toEqual("1000000");
|
|
});
|
|
it("handle the case with decimal separator", function () {
|
|
expect(priceParser.removeThousandsSeparator("1,000,000.00", ",")).toEqual("1000000.00");
|
|
});
|
|
it("handle the case when it is actually a decimal separator (and not a thousands one)", function () {
|
|
expect(priceParser.removeThousandsSeparator("1,00", ",")).toEqual("1,00");
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("with point as decimal separator and comma as thousands separator for I18n service", function () {
|
|
beforeAll(() => {
|
|
const mockedToCurrency = jest.fn();
|
|
mockedToCurrency.mockImplementation((arg) => {
|
|
if (arg == 0.1) {
|
|
return "0.1";
|
|
} else if (arg == 1000) {
|
|
return "1,000";
|
|
}
|
|
});
|
|
|
|
global.I18n = { toCurrency: mockedToCurrency };
|
|
});
|
|
// (jest still doesn't have aroundEach https://github.com/jestjs/jest/issues/4543 )
|
|
afterAll(() => {
|
|
delete global.I18n;
|
|
});
|
|
|
|
it("handle point as decimal separator", function () {
|
|
expect(priceParser.parse("1.00")).toEqual(1.0);
|
|
});
|
|
|
|
it("handle point as decimal separator", function () {
|
|
expect(priceParser.parse("1.000")).toEqual(1.0);
|
|
});
|
|
|
|
it("also handle comma as decimal separator", function () {
|
|
expect(priceParser.parse("1,0")).toEqual(1.0);
|
|
});
|
|
|
|
it("also handle comma as decimal separator", function () {
|
|
expect(priceParser.parse("1,00")).toEqual(1.0);
|
|
});
|
|
|
|
it("also handle comma as decimal separator", function () {
|
|
expect(priceParser.parse("11,00")).toEqual(11.0);
|
|
});
|
|
|
|
it("handle comma as decimal separator but not confusing with thousands separator", function () {
|
|
expect(priceParser.parse("11,000")).toEqual(11000);
|
|
});
|
|
|
|
it("handle point as decimal separator and comma as thousands separator", function () {
|
|
expect(priceParser.parse("1,000,000.00")).toEqual(1000000);
|
|
});
|
|
|
|
it("handle integer number", function () {
|
|
expect(priceParser.parse("10")).toEqual(10);
|
|
});
|
|
|
|
it("handle integer number with comma as thousands separator", function () {
|
|
expect(priceParser.parse("1,000")).toEqual(1000);
|
|
});
|
|
|
|
it("handle integer number with no thousands separator", function () {
|
|
expect(priceParser.parse("1000")).toEqual(1000);
|
|
});
|
|
});
|
|
|
|
describe("with comma as decimal separator and final point as thousands separator for I18n service", function () {
|
|
beforeAll(() => {
|
|
const mockedToCurrency = jest.fn();
|
|
mockedToCurrency.mockImplementation((arg) => {
|
|
if (arg == 0.1) {
|
|
return "0,1";
|
|
} else if (arg == 1000) {
|
|
return "1.000";
|
|
}
|
|
});
|
|
|
|
global.I18n = { toCurrency: mockedToCurrency };
|
|
});
|
|
// (jest still doesn't have aroundEach https://github.com/jestjs/jest/issues/4543 )
|
|
afterAll(() => {
|
|
delete global.I18n;
|
|
});
|
|
|
|
it("handle comma as decimal separator", function () {
|
|
expect(priceParser.parse("1,00")).toEqual(1.0);
|
|
});
|
|
|
|
it("handle comma as decimal separator with one digit after the comma", function () {
|
|
expect(priceParser.parse("11,0")).toEqual(11.0);
|
|
});
|
|
|
|
it("handle comma as decimal separator with two digit after the comma", function () {
|
|
expect(priceParser.parse("11,00")).toEqual(11.0);
|
|
});
|
|
|
|
it("handle comma as decimal separator with three digit after the comma", function () {
|
|
expect(priceParser.parse("11,000")).toEqual(11.0);
|
|
});
|
|
|
|
it("also handle point as decimal separator", function () {
|
|
expect(priceParser.parse("1.00")).toEqual(1.0);
|
|
});
|
|
|
|
it("also handle point as decimal separator with integer part with two digits", function () {
|
|
expect(priceParser.parse("11.00")).toEqual(11.0);
|
|
});
|
|
|
|
it("handle point as decimal separator and final point as thousands separator", function () {
|
|
expect(priceParser.parse("1.000.000,00")).toEqual(1000000);
|
|
});
|
|
|
|
it("handle integer number", function () {
|
|
expect(priceParser.parse("10")).toEqual(10);
|
|
});
|
|
});
|
|
});
|