TUI is a doomed path. Stick with CLI
This commit is contained in:
130
tests/tui/utils/inputValidator.test.js
Normal file
130
tests/tui/utils/inputValidator.test.js
Normal file
@@ -0,0 +1,130 @@
|
||||
/**
|
||||
* Input Validator Tests
|
||||
* Tests for comprehensive input validation
|
||||
* Requirements: 5.4, 5.6
|
||||
*/
|
||||
|
||||
const inputValidator = require("../../../src/tui/utils/inputValidator");
|
||||
|
||||
describe("InputValidator Tests", () => {
|
||||
test("should validate operation type correctly", () => {
|
||||
const validResult = inputValidator.validateField("operationType", "update");
|
||||
expect(validResult.isValid).toBe(true);
|
||||
expect(validResult.value).toBe("update");
|
||||
|
||||
const invalidResult = inputValidator.validateField(
|
||||
"operationType",
|
||||
"invalid"
|
||||
);
|
||||
expect(invalidResult.isValid).toBe(false);
|
||||
expect(invalidResult.errors).toContain(
|
||||
"operationType must be one of: update, rollback"
|
||||
);
|
||||
});
|
||||
|
||||
test("should validate scheduled time correctly", () => {
|
||||
const futureDate = new Date(Date.now() + 86400000).toISOString();
|
||||
const validResult = inputValidator.validateField(
|
||||
"scheduledTime",
|
||||
futureDate
|
||||
);
|
||||
expect(validResult.isValid).toBe(true);
|
||||
|
||||
const pastDate = new Date(Date.now() - 86400000).toISOString();
|
||||
const invalidResult = inputValidator.validateField(
|
||||
"scheduledTime",
|
||||
pastDate
|
||||
);
|
||||
expect(invalidResult.isValid).toBe(false);
|
||||
});
|
||||
|
||||
test("should validate shop domain correctly", () => {
|
||||
const validDomain = "test-store.myshopify.com";
|
||||
const validResult = inputValidator.validateField("shopDomain", validDomain);
|
||||
expect(validResult.isValid).toBe(true);
|
||||
|
||||
const invalidDomain = "invalid domain";
|
||||
const invalidResult = inputValidator.validateField(
|
||||
"shopDomain",
|
||||
invalidDomain
|
||||
);
|
||||
expect(invalidResult.isValid).toBe(false);
|
||||
});
|
||||
|
||||
test("should validate price adjustment correctly", () => {
|
||||
const validPercentage = 25.5;
|
||||
const validResult = inputValidator.validateField(
|
||||
"priceAdjustment",
|
||||
validPercentage
|
||||
);
|
||||
expect(validResult.isValid).toBe(true);
|
||||
expect(validResult.value).toBe(25.5);
|
||||
|
||||
const invalidPercentage = 1500; // Too high
|
||||
const invalidResult = inputValidator.validateField(
|
||||
"priceAdjustment",
|
||||
invalidPercentage
|
||||
);
|
||||
expect(invalidResult.isValid).toBe(false);
|
||||
});
|
||||
|
||||
test("should validate multiple fields", () => {
|
||||
const data = {
|
||||
operationType: "update",
|
||||
scheduledTime: new Date(Date.now() + 86400000).toISOString(),
|
||||
recurrence: "weekly",
|
||||
description: "Test schedule",
|
||||
};
|
||||
|
||||
const result = inputValidator.validateFields(data);
|
||||
expect(result.isValid).toBe(true);
|
||||
expect(result.data.operationType).toBe("update");
|
||||
expect(result.data.recurrence).toBe("weekly");
|
||||
});
|
||||
|
||||
test("should handle optional fields correctly", () => {
|
||||
const data = {
|
||||
operationType: "update",
|
||||
scheduledTime: new Date(Date.now() + 86400000).toISOString(),
|
||||
recurrence: "once",
|
||||
// description is optional and missing
|
||||
};
|
||||
|
||||
const result = inputValidator.validateFields(data);
|
||||
expect(result.isValid).toBe(true);
|
||||
expect(result.data.description).toBeUndefined();
|
||||
});
|
||||
|
||||
test("should convert string numbers to numbers", () => {
|
||||
const result = inputValidator.validateField("priceAdjustment", "25.5");
|
||||
expect(result.isValid).toBe(true);
|
||||
expect(result.value).toBe(25.5);
|
||||
expect(typeof result.value).toBe("number");
|
||||
});
|
||||
|
||||
test("should sanitize input strings", () => {
|
||||
const dirtyInput = " test string with \x00 control chars ";
|
||||
const sanitized = inputValidator.sanitizeInput(dirtyInput, {
|
||||
trim: true,
|
||||
removeControlChars: true,
|
||||
});
|
||||
|
||||
expect(sanitized).toBe("test string with control chars");
|
||||
});
|
||||
|
||||
test("should validate string length limits", () => {
|
||||
const longDescription = "x".repeat(501);
|
||||
const result = inputValidator.validateField("description", longDescription);
|
||||
|
||||
expect(result.isValid).toBe(false);
|
||||
expect(
|
||||
result.errors.some((error) => error.includes("500 characters"))
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
test("should validate required fields", () => {
|
||||
const result = inputValidator.validateField("operationType", "");
|
||||
expect(result.isValid).toBe(false);
|
||||
expect(result.errors).toContain("operationType is required");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user