Implemented Rollback Functionality

This commit is contained in:
2025-08-06 15:18:44 -05:00
parent d741dd5466
commit 78818793f2
20 changed files with 6365 additions and 74 deletions

View File

@@ -13,6 +13,7 @@ describe("Environment Configuration", () => {
delete process.env.SHOPIFY_ACCESS_TOKEN;
delete process.env.TARGET_TAG;
delete process.env.PRICE_ADJUSTMENT_PERCENTAGE;
delete process.env.OPERATION_MODE;
});
afterAll(() => {
@@ -35,6 +36,7 @@ describe("Environment Configuration", () => {
accessToken: "shpat_1234567890abcdef",
targetTag: "sale",
priceAdjustmentPercentage: 10,
operationMode: "update",
});
});
@@ -247,5 +249,164 @@ describe("Environment Configuration", () => {
expect(config.targetTag).toBe("sale-2024_special!");
});
});
describe("Operation Mode", () => {
test("should default to 'update' when OPERATION_MODE is not set", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "10";
// OPERATION_MODE is not set
const config = loadEnvironmentConfig();
expect(config.operationMode).toBe("update");
});
test("should accept 'update' operation mode", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "10";
process.env.OPERATION_MODE = "update";
const config = loadEnvironmentConfig();
expect(config.operationMode).toBe("update");
});
test("should accept 'rollback' operation mode", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "10";
process.env.OPERATION_MODE = "rollback";
const config = loadEnvironmentConfig();
expect(config.operationMode).toBe("rollback");
});
test("should throw error for invalid operation mode", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "10";
process.env.OPERATION_MODE = "invalid";
expect(() => loadEnvironmentConfig()).toThrow(
'Invalid OPERATION_MODE: "invalid". Must be either "update" or "rollback".'
);
});
test("should throw error for empty operation mode", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "10";
process.env.OPERATION_MODE = "";
const config = loadEnvironmentConfig();
// Empty string should default to "update"
expect(config.operationMode).toBe("update");
});
test("should handle case sensitivity in operation mode", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "10";
process.env.OPERATION_MODE = "UPDATE";
expect(() => loadEnvironmentConfig()).toThrow(
'Invalid OPERATION_MODE: "UPDATE". Must be either "update" or "rollback".'
);
});
test("should handle whitespace in operation mode", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "10";
process.env.OPERATION_MODE = " rollback ";
expect(() => loadEnvironmentConfig()).toThrow(
'Invalid OPERATION_MODE: " rollback ". Must be either "update" or "rollback".'
);
});
test("should handle null operation mode", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "10";
process.env.OPERATION_MODE = null;
const config = loadEnvironmentConfig();
// Null should default to "update"
expect(config.operationMode).toBe("update");
});
test("should handle undefined operation mode", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "10";
process.env.OPERATION_MODE = undefined;
const config = loadEnvironmentConfig();
// Undefined should default to "update"
expect(config.operationMode).toBe("update");
});
});
describe("Rollback Mode Specific Validation", () => {
test("should validate rollback mode with all required variables", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "10";
process.env.OPERATION_MODE = "rollback";
const config = loadEnvironmentConfig();
expect(config).toEqual({
shopDomain: "test-shop.myshopify.com",
accessToken: "shpat_1234567890abcdef",
targetTag: "sale",
priceAdjustmentPercentage: 10,
operationMode: "rollback",
});
});
test("should validate rollback mode even with zero percentage", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "0";
process.env.OPERATION_MODE = "rollback";
const config = loadEnvironmentConfig();
expect(config.operationMode).toBe("rollback");
expect(config.priceAdjustmentPercentage).toBe(0);
});
test("should validate rollback mode with negative percentage", () => {
process.env.SHOPIFY_SHOP_DOMAIN = "test-shop.myshopify.com";
process.env.SHOPIFY_ACCESS_TOKEN = "shpat_1234567890abcdef";
process.env.TARGET_TAG = "sale";
process.env.PRICE_ADJUSTMENT_PERCENTAGE = "-20";
process.env.OPERATION_MODE = "rollback";
const config = loadEnvironmentConfig();
expect(config.operationMode).toBe("rollback");
expect(config.priceAdjustmentPercentage).toBe(-20);
});
});
});
});