describe("Discount Codes Management", () => { beforeEach(() => { cy.login(); cy.visit("/discount-codes"); cy.waitForLoading(); }); it("should display discount codes list page", () => { cy.contains("مدیریت کدهای تخفیف").should("be.visible"); cy.contains("ایجاد و مدیریت کدهای تخفیف").should("be.visible"); cy.get('[title="کد تخفیف جدید"]').should("be.visible"); }); it("should navigate to create discount code page", () => { cy.get('[title="کد تخفیف جدید"]').click(); cy.url().should("include", "/discount-codes/create"); cy.contains("ایجاد کد تخفیف").should("be.visible"); cy.contains("ایجاد و مدیریت کدهای تخفیف برای فروشگاه").should("be.visible"); }); it("should create a percentage discount code", () => { cy.get('[title="کد تخفیف جدید"]').click(); // Fill basic information cy.get('input[name="code"]').type("SAVE20"); cy.get('input[name="name"]').type("تخفیف ۲۰ درصدی"); cy.get('textarea[name="description"]').type("تخفیف ۲۰ درصدی برای کل خرید"); // Set discount settings cy.get('select[name="type"]').select("percentage"); cy.get('input[name="value"]').type("20"); cy.get('select[name="status"]').select("active"); cy.get('select[name="application_level"]').select("invoice"); // Set limits cy.get('input[name="min_purchase_amount"]').type("100000"); cy.get('input[name="max_discount_amount"]').type("50000"); cy.get('input[name="usage_limit"]').type("1000"); cy.get('input[name="user_usage_limit"]').type("1"); // Set date range cy.get('input[name="valid_from"]').type("2024-01-01T00:00"); cy.get('input[name="valid_to"]').type("2024-12-31T23:59"); // Set user restrictions cy.get('select[name="user_restrictions.user_group"]').select("loyal"); // Set meta information cy.get('input[name="meta.campaign"]').type("summer_sale"); cy.get('input[name="meta.category"]').type("general"); // Submit form cy.get('button[type="submit"]').click(); // Verify creation cy.url().should("include", "/discount-codes"); cy.contains("کد تخفیف با موفقیت ایجاد شد").should("be.visible"); cy.contains("SAVE20").should("be.visible"); }); it("should create a fixed amount discount code", () => { cy.get('[title="کد تخفیف جدید"]').click(); // Fill basic information cy.get('input[name="code"]').type("FIXED50000"); cy.get('input[name="name"]').type("تخفیف ۵۰ هزار تومانی"); cy.get('textarea[name="description"]').type( "تخفیف مبلغ ثابت ۵۰ هزار تومان" ); // Set discount settings cy.get('select[name="type"]').select("fixed"); cy.get('input[name="value"]').type("50000"); cy.get('select[name="status"]').select("active"); cy.get('select[name="application_level"]').select("invoice"); // Set single use cy.get('input[name="single_use"]').check(); // Set user restrictions for new users only cy.get('input[name="user_restrictions.new_users_only"]').check(); // Submit form cy.get('button[type="submit"]').click(); // Verify creation cy.url().should("include", "/discount-codes"); cy.contains("کد تخفیف با موفقیت ایجاد شد").should("be.visible"); cy.contains("FIXED50000").should("be.visible"); }); it("should create a fee percentage discount code", () => { cy.get('[title="کد تخفیف جدید"]').click(); // Fill basic information cy.get('input[name="code"]').type("FEEREDUCTION10"); cy.get('input[name="name"]').type("کاهش کارمزد ۱۰ درصدی"); // Set discount settings cy.get('select[name="type"]').select("fee_percentage"); cy.get('input[name="value"]').type("10"); cy.get('select[name="application_level"]').select("product_fee"); // Submit form cy.get('button[type="submit"]').click(); // Verify creation cy.url().should("include", "/discount-codes"); cy.contains("کد تخفیف با موفقیت ایجاد شد").should("be.visible"); cy.contains("FEEREDUCTION10").should("be.visible"); }); it("should validate required fields", () => { cy.get('[title="کد تخفیف جدید"]').click(); // Try to submit without required fields cy.get('button[type="submit"]').should("be.disabled"); // Fill only code field cy.get('input[name="code"]').type("TEST"); cy.get('button[type="submit"]').should("be.disabled"); // Fill name field cy.get('input[name="name"]').type("Test"); cy.get('button[type="submit"]').should("be.disabled"); // Fill all required fields cy.get('select[name="type"]').select("percentage"); cy.get('input[name="value"]').type("10"); cy.get('select[name="status"]').select("active"); cy.get('select[name="application_level"]').select("invoice"); // Now submit button should be enabled cy.get('button[type="submit"]').should("not.be.disabled"); }); it("should validate code length", () => { cy.get('[title="کد تخفیف جدید"]').click(); // Test code too short cy.get('input[name="code"]').type("AB"); cy.get('input[name="name"]').type("Test"); cy.get('select[name="type"]').select("percentage"); cy.get('input[name="value"]').type("10"); cy.contains("کد باید حداقل ۳ کاراکتر باشد").should("be.visible"); // Clear and test code too long cy.get('input[name="code"]').clear().type("A".repeat(51)); cy.contains("کد نباید بیشتر از ۵۰ کاراکتر باشد").should("be.visible"); }); it("should validate percentage value range", () => { cy.get('[title="کد تخفیف جدید"]').click(); cy.get('input[name="code"]').type("TESTPERCENTAGE"); cy.get('input[name="name"]').type("Test Percentage"); cy.get('select[name="type"]').select("percentage"); // Test value too high for percentage (should warn in UI for >100) cy.get('input[name="value"]').type("150"); // The form should still accept it but backend will validate cy.get('select[name="status"]').select("active"); cy.get('select[name="application_level"]').select("invoice"); }); it("should search and filter discount codes", () => { // Assuming we have some discount codes in the list cy.get('input[placeholder="جستجو بر اساس کد..."]').type("SAVE"); cy.wait(500); // Wait for search to filter // Test status filter cy.get("select").contains("همه وضعیت‌ها").parent().select("active"); cy.wait(500); // Clear filters cy.contains("پاک کردن فیلترها").click(); cy.get('input[placeholder="جستجو بر اساس کد..."]').should("have.value", ""); }); it("should edit existing discount code", () => { // Assuming we have discount codes in the list cy.get("table tbody tr") .first() .within(() => { cy.get('[title="ویرایش"]').click(); }); cy.url().should("include", "/discount-codes/"); cy.url().should("include", "/edit"); cy.contains("ویرایش کد تخفیف").should("be.visible"); // Modify the discount code cy.get('input[name="name"]').clear().type("کد تخفیف ویرایش شده"); cy.get('textarea[name="description"]').clear().type("توضیحات ویرایش شده"); // Submit changes cy.get('button[type="submit"]').click(); // Verify update cy.url().should("include", "/discount-codes"); cy.contains("کد تخفیف با موفقیت به‌روزرسانی شد").should("be.visible"); cy.contains("کد تخفیف ویرایش شده").should("be.visible"); }); it("should delete discount code", () => { // Create a test discount code first cy.get('[title="کد تخفیف جدید"]').click(); cy.get('input[name="code"]').type("TESTDELETE"); cy.get('input[name="name"]').type("Test Delete"); cy.get('select[name="type"]').select("percentage"); cy.get('input[name="value"]').type("10"); cy.get('select[name="status"]').select("active"); cy.get('select[name="application_level"]').select("invoice"); cy.get('button[type="submit"]').click(); // Wait for creation cy.contains("کد تخفیف با موفقیت ایجاد شد").should("be.visible"); // Find and delete the test discount code cy.contains("TESTDELETE") .parent() .parent() .within(() => { cy.get('[title="حذف"]').click(); }); // Confirm deletion in modal cy.contains("آیا از حذف این کد تخفیف اطمینان دارید؟").should("be.visible"); cy.contains("button", "حذف").click(); // Verify deletion cy.contains("کد تخفیف با موفقیت حذف شد").should("be.visible"); cy.contains("TESTDELETE").should("not.exist"); }); it("should display proper status badges", () => { // Check if status badges are displayed with correct colors cy.get("table tbody tr").each(($row) => { cy.wrap($row).within(() => { cy.get("span") .contains(/فعال|غیرفعال/) .should("exist"); }); }); }); it("should show empty state when no discount codes exist", () => { // This test assumes a clean state or uses a filter that returns no results cy.get('input[placeholder="جستجو بر اساس کد..."]').type("NONEXISTENTCODE"); cy.wait(500); cy.contains("هیچ کد تخفیفی یافت نشد").should("be.visible"); cy.contains("برای شروع یک کد تخفیف ایجاد کنید").should("be.visible"); }); it("should cancel discount code creation", () => { cy.get('[title="کد تخفیف جدید"]').click(); // Fill some data cy.get('input[name="code"]').type("CANCELTEST"); cy.get('input[name="name"]').type("Cancel Test"); // Click cancel cy.contains("button", "انصراف").click(); // Should return to list page cy.url().should("include", "/discount-codes"); cy.url().should("not.include", "/create"); }); it("should handle user restrictions properly", () => { cy.get('[title="کد تخفیف جدید"]').click(); // Fill basic fields cy.get('input[name="code"]').type("USERRESTRICT"); cy.get('input[name="name"]').type("User Restriction Test"); cy.get('select[name="type"]').select("percentage"); cy.get('input[name="value"]').type("15"); cy.get('select[name="status"]').select("active"); cy.get('select[name="application_level"]').select("invoice"); // Set user restrictions cy.get('select[name="user_restrictions.user_group"]').select("new"); cy.get('input[name="user_restrictions.min_purchase_count"]').type("0"); cy.get('input[name="user_restrictions.max_purchase_count"]').type("5"); cy.get('input[name="user_restrictions.referrer_user_id"]').type("123"); // Check warning about mutually exclusive options cy.get('input[name="user_restrictions.new_users_only"]').check(); cy.get('input[name="user_restrictions.loyal_users_only"]').check(); // Should show warning cy.contains( "new_users_only و loyal_users_only نمی‌توانند همزمان فعال باشند" ).should("be.visible"); cy.get('button[type="submit"]').click(); cy.url().should("include", "/discount-codes"); cy.contains("کد تخفیف با موفقیت ایجاد شد").should("be.visible"); }); it("should validate form sections are properly organized", () => { cy.get('[title="کد تخفیف جدید"]').click(); // Verify all sections exist cy.contains("اطلاعات اصلی کد تخفیف").should("be.visible"); cy.contains("تنظیمات تخفیف").should("be.visible"); cy.contains("بازه زمانی اعتبار").should("be.visible"); cy.contains("محدودیت‌های کاربری").should("be.visible"); cy.contains("اطلاعات تکمیلی").should("be.visible"); // Verify form has proper styling cy.get(".bg-gradient-to-r").should("have.length.greaterThan", 3); cy.get(".rounded-xl").should("have.length.greaterThan", 3); }); it("should handle back navigation properly", () => { cy.get('[title="کد تخفیف جدید"]').click(); // Click back button cy.contains("بازگشت").click(); // Should return to list page cy.url().should("include", "/discount-codes"); cy.url().should("not.include", "/create"); cy.contains("مدیریت کدهای تخفیف").should("be.visible"); }); });