Files
ConvertX/tests/converters/vcf.test.ts
2026-01-11 16:38:32 +01:00

99 lines
2.1 KiB
TypeScript

import { expect, test, describe } from "bun:test";
import { convert, parseVCF, toCSV } from "../../src/converters/vcf";
describe("parseVCF", () => {
test("should parse a simple VCF card", () => {
const vcfData = `BEGIN:VCARD
VERSION:3.0
FN:John Doe
N:Doe;John;;;
TEL:+123456789
EMAIL:john@example.com
ORG:Example Corp
END:VCARD`;
const result = parseVCF(vcfData);
expect(result).toEqual([
{
"Full Name": "John Doe",
"Last Name": "Doe",
"First Name": "John",
Phone: "+123456789",
Email: "john@example.com",
Organization: "Example Corp",
},
]);
});
test("should handle multiple cards", () => {
const vcfData = `BEGIN:VCARD
FN:John Doe
END:VCARD
BEGIN:VCARD
FN:Jane Smith
END:VCARD`;
const result = parseVCF(vcfData);
expect(result).toEqual([{ "Full Name": "John Doe" }, { "Full Name": "Jane Smith" }]);
});
test("should parse VCF with TYPE parameters", () => {
const vcfData = `BEGIN:VCARD
VERSION:3.0
FN:John Doe
N:Doe;John;;;
TEL;TYPE=WORK,VOICE:(111) 555-1212
EMAIL;TYPE=PREF,INTERNET:john.doe@example.com
END:VCARD`;
const result = parseVCF(vcfData);
expect(result).toEqual([
{
"Full Name": "John Doe",
"Last Name": "Doe",
"First Name": "John",
Phone: "(111) 555-1212",
Email: "john.doe@example.com",
},
]);
});
});
describe("toCSV", () => {
test("should convert contacts to CSV", () => {
const contacts = [
{
"Full Name": "John Doe",
Phone: "+123",
Email: "john@example.com",
},
];
const result = toCSV(contacts);
expect(result).toBe('Full Name,Phone,Email\n"John Doe","+123","john@example.com"');
});
test("should escape quotes", () => {
const contacts = [{ "Full Name": 'John "Johnny" Doe' }];
const result = toCSV(contacts);
expect(result).toBe('Full Name\n"John ""Johnny"" Doe"');
});
test("should handle empty data", () => {
const result = toCSV([]);
expect(result).toBe("");
});
});
describe("convert", () => {
test("should be a function", () => {
expect(typeof convert).toBe("function");
});
});