/**
* Smoke тесты для DataProcessor
* Проверяют основную функциональность без внешних зависимостей
*/
import { DataProcessor } from "../../src/utils/data-processor";
describe("DataProcessor Smoke Tests", () => {
describe("Basic Functionality", () => {
it("should mask full names correctly", () => {
expect(DataProcessor.maskFullName("иванов иван иванович")).toBe("Иванов Иван Иванович");
expect(DataProcessor.maskFullName("петров")).toBe("Петров");
expect(DataProcessor.maskFullName("")).toBe("");
});
it("should normalize phone numbers correctly", () => {
expect(DataProcessor.normalizePhoneNumber("8 999 123 45 67")).toBe("+79991234567");
expect(DataProcessor.normalizePhoneNumber("+7 (999) 123-45-67")).toBe("+79991234567");
expect(DataProcessor.normalizePhoneNumber("79991234567")).toBe("+79991234567");
expect(DataProcessor.normalizePhoneNumber("9991234567")).toBe("+79991234567");
});
it("should normalize emails correctly", () => {
expect(DataProcessor.normalizeEmail("IVAN@EXAMPLE.COM")).toBe("ivan@example.com");
expect(DataProcessor.normalizeEmail("Petr@Example.Com")).toBe("petr@example.com");
expect(DataProcessor.normalizeEmail("")).toBe("");
});
it("should parse different text formats", () => {
// Natural format
const naturalResult = DataProcessor.parseAdvancedText(
"Иванов Иван Иванович, email: ivan@example.com, телефон: +7 999 123 45 67"
);
expect(naturalResult.lastName).toBe("Иванов Иван Иванович");
expect(naturalResult.phones).toBeUndefined();
// CSV format
const csvResult = DataProcessor.parseAdvancedText("Сидоров,Сидор,Сидорович,sidor@example.com,+7 999 345 67 89");
expect(csvResult.lastName).toBe("Сидоров");
expect(csvResult.firstName).toBe("Сидор");
expect(csvResult.email).toBe("sidor@example.com");
});
it("should validate employee drafts correctly", () => {
// Valid draft
const validDraft = {
isValid: false,
lastName: "Иванов",
firstName: "Иван",
middleName: "Иванович",
email: "ivan@example.com",
phones: ["+79991234567"],
};
const validResult = DataProcessor.validateEmployeeDraft(validDraft);
expect(validResult.isValid).toBe(true);
// Invalid draft
const invalidDraft = {
isValid: false,
lastName: "Иванов",
firstName: "Иван",
// missing email and phones
};
const invalidResult = DataProcessor.validateEmployeeDraft(invalidDraft);
expect(invalidResult.isValid).toBe(false);
expect(invalidResult.errors).toContain("Email обязателен");
});
it("should assess data quality correctly", () => {
// High quality data
const highQualityDraft = {
lastName: "Иванов",
firstName: "Иван",
middleName: "Иванович",
email: "ivan@example.com",
phones: ["+79991234567"],
isValid: true,
};
const highQualityResult = DataProcessor.validateDataQuality(highQualityDraft);
expect(highQualityResult.score).toBe(100);
expect(highQualityResult.issues).toHaveLength(0);
// Low quality data
const lowQualityDraft = {
lastName: "Иванов",
firstName: "Иван",
isValid: false,
errors: ["Email обязателен", "Телефон обязателен"],
};
const lowQualityResult = DataProcessor.validateDataQuality(lowQualityDraft);
expect(lowQualityResult.score).toBeLessThan(100);
expect(lowQualityResult.issues.length).toBeGreaterThan(0);
});
it("should clean text correctly", () => {
const text1 = "Иванов Иван! @#$%^&*()_+ ivan@example.com +7(999)123-45-67";
const cleaned1 = DataProcessor.cleanText(text1);
expect(cleaned1).toBe("@ ^ *()_+ ivan@example.com +7(999)123-45-67");
const text2 = "Иванов Иван Иванович";
const cleaned2 = DataProcessor.cleanText(text2);
expect(cleaned2).toBe("");
});
});
describe("Error Handling", () => {
it("should handle empty inputs gracefully", () => {
expect(DataProcessor.maskFullName("")).toBe("");
expect(DataProcessor.normalizePhoneNumber("")).toBe("");
expect(DataProcessor.normalizeEmail("")).toBe("");
expect(DataProcessor.cleanText("")).toBe("");
});
it("should handle invalid inputs gracefully", () => {
expect(DataProcessor.normalizePhoneNumber("123")).toBe("123");
expect(DataProcessor.normalizeEmail("invalid-email")).toBe("invalid-email");
});
it("should handle incomplete data in parsing", () => {
const result = DataProcessor.parseAdvancedText("Кузнецов Кузнец");
expect(result.lastName).toBe("Кузнецов");
expect(result.firstName).toBe("Кузнец");
expect(result.middleName).toBeUndefined();
expect(result.email).toBeUndefined();
expect(result.phones).toBeUndefined();
});
});
describe("Performance", () => {
it("should process multiple operations quickly", () => {
const startTime = Date.now();
// Выполняем множество операций
for (let i = 0; i < 100; i++) {
DataProcessor.maskFullName(`Сотрудник${i} Имя${i}`);
DataProcessor.normalizePhoneNumber(
`8 999 ${i.toString().padStart(3, "0")} ${i.toString().padStart(2, "0")} ${i.toString().padStart(2, "0")}`
);
DataProcessor.normalizeEmail(`email${i}@example.com`);
DataProcessor.parseAdvancedText(`Сотрудник${i},Имя${i},email${i}@example.com`);
}
const duration = Date.now() - startTime;
expect(duration).toBeLessThan(1000); // Должно выполниться менее чем за 1 секунду
});
});
});