import { describe, it, expect } from "vitest";
import { parseZenrusData, ZenrusData } from "../api.js";
describe("parseZenrusData", () => {
const mockJsContent = "var current = {0:81.08,1:94.15,2:62.17,17:704753890.00,18:7010681.00,19:675619811.00}";
it("должна корректно парсить курс доллара", () => {
const result = parseZenrusData(mockJsContent);
expect(result.usd).toBe("81.08");
});
it("должна корректно парсить курс евро", () => {
const result = parseZenrusData(mockJsContent);
expect(result.eur).toBe("94.15");
});
it("должна корректно парсить цену нефти в долларах", () => {
const result = parseZenrusData(mockJsContent);
expect(result.brent).toBe("62.17");
});
it("должна корректно парсить и вычислять цену нефти в рублях", () => {
const result = parseZenrusData(mockJsContent);
// 81.08 * 62.17 ≈ 5041
expect(result.brentRub).toBe("5041");
});
it("должна вернуть все данные в правильном формате", () => {
const result = parseZenrusData(mockJsContent);
expect(result).toEqual({
usd: "81.08",
eur: "94.15",
brent: "62.17",
brentRub: "5041",
});
});
it("должна возвращать N/A для отсутствующих данных", () => {
const emptyJs = "var current = {}";
const result = parseZenrusData(emptyJs);
expect(result).toEqual({
usd: "N/A",
eur: "N/A",
brent: "N/A",
brentRub: "N/A",
});
});
it("должна возвращать N/A если формат неверный", () => {
const invalidJs = "something else";
const result = parseZenrusData(invalidJs);
expect(result).toEqual({
usd: "N/A",
eur: "N/A",
brent: "N/A",
brentRub: "N/A",
});
});
it("должна корректно обрабатывать десятичные числа", () => {
const jsWithDecimals = "var current = {0:100.50,1:120.75,2:80.25}";
const result = parseZenrusData(jsWithDecimals);
expect(result.usd).toBe("100.50");
expect(result.eur).toBe("120.75");
expect(result.brent).toBe("80.25");
// 100.50 * 80.25 = 8065.125 ≈ 8065
expect(result.brentRub).toBe("8065");
});
it("должна обрабатывать частично отсутствующие данные", () => {
const partialJs = "var current = {0:85.00,1:95.00}";
const result = parseZenrusData(partialJs);
expect(result.usd).toBe("85.00");
expect(result.eur).toBe("95.00");
expect(result.brent).toBe("N/A");
expect(result.brentRub).toBe("N/A");
});
it("должна корректно вычислять Brent в рублях при наличии USD и Brent", () => {
const jsData = "var current = {0:80.00,2:60.00}";
const result = parseZenrusData(jsData);
expect(result.usd).toBe("80.00");
expect(result.brent).toBe("60.00");
// 80.00 * 60.00 = 4800
expect(result.brentRub).toBe("4800");
});
it("должна обрабатывать целые числа", () => {
const jsWithIntegers = "var current = {0:80,1:95,2:60}";
const result = parseZenrusData(jsWithIntegers);
expect(result.usd).toBe("80.00");
expect(result.eur).toBe("95.00");
expect(result.brent).toBe("60.00");
expect(result.brentRub).toBe("4800");
});
});