Implemented Rollback Functionality
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user