describe("Categories - Advanced Tests", () => { beforeEach(() => { cy.login(); }); describe("Category CRUD Operations", () => { it("should create a new category", () => { cy.visit("/categories"); cy.get(".bg-primary-600.rounded-full").first().click(); // Fill category information cy.get('input[name="name"]').type("دسته‌بندی تست"); cy.get('textarea[name="description"]').type("توضیحات دسته‌بندی تست"); cy.get('input[name="sort_order"]').clear().type("1"); // Enable category cy.get('input[name="enabled"]').check({ force: true }); // Submit form cy.get('button[type="submit"]').click(); // Verify redirect and success cy.url().should("include", "/categories"); cy.contains("دسته‌بندی تست").should("be.visible"); }); it("should edit an existing category", () => { cy.visit("/categories"); // Click edit on first category cy.get("tbody tr") .first() .within(() => { cy.get( '[data-testid="edit-button"], [title="ویرایش"], .text-blue-600' ) .first() .click(); }); // Update category name cy.get('input[name="name"]').clear().type("دسته‌بندی ویرایش شده"); cy.get('button[type="submit"]').click(); // Verify changes cy.url().should("include", "/categories"); cy.contains("دسته‌بندی ویرایش شده").should("be.visible"); }); it("should delete a category with confirmation", () => { cy.visit("/categories"); // Click delete on first category cy.get("tbody tr") .first() .within(() => { cy.get('[data-testid="delete-button"], [title="حذف"], .text-red-600') .first() .click(); }); // Confirm deletion in modal cy.get('.modal, [role="dialog"]').should("be.visible"); cy.get("button").contains("حذف").click(); // Verify success message cy.contains("دسته‌بندی با موفقیت حذف شد", { timeout: 10000 }).should( "be.visible" ); }); }); describe("Category Form Validation", () => { beforeEach(() => { cy.visit("/categories"); cy.get(".bg-primary-600.rounded-full").first().click(); }); it("should show validation errors for empty required fields", () => { // Try to submit empty form cy.get('button[type="submit"]').click(); // Check for validation messages cy.contains("نام دسته‌بندی الزامی است", { timeout: 5000 }).should( "be.visible" ); }); it("should validate minimum length for category name", () => { cy.get('input[name="name"]').type("a"); cy.get('button[type="submit"]').click(); cy.contains("نام دسته‌بندی باید حداقل", { timeout: 5000 }).should( "be.visible" ); }); it("should validate sort order is a number", () => { cy.get('input[name="name"]').type("دسته‌بندی تست"); cy.get('input[name="sort_order"]').clear().type("abc"); cy.get('button[type="submit"]').click(); cy.contains("ترتیب نمایش باید عدد باشد").should("be.visible"); }); }); describe("Category Search and Filter", () => { beforeEach(() => { cy.visit("/categories"); }); it("should search categories by name", () => { cy.get('input[placeholder*="جستجو"], input[name="search"]').type("دسته"); cy.get('button[type="submit"], button').contains("جستجو").click(); // Wait for results cy.wait(2000); // Check search results cy.get("tbody tr").should("have.length.at.least", 0); }); it("should filter categories by status", () => { cy.get('select[name="enabled"], select').first().select("true"); cy.get("button").contains("اعمال فیلتر").click(); cy.wait(2000); // Results should be filtered cy.get("tbody tr").should("have.length.at.least", 0); }); }); describe("Category Status Management", () => { beforeEach(() => { cy.visit("/categories"); }); it("should toggle category status", () => { cy.get("tbody tr") .first() .within(() => { cy.get('input[type="checkbox"], .toggle') .first() .click({ force: true }); }); cy.contains("وضعیت دسته‌بندی با موفقیت تغییر کرد").should("be.visible"); }); }); describe("Category Image Upload", () => { beforeEach(() => { cy.visit("/categories"); cy.get(".bg-primary-600.rounded-full").first().click(); }); it("should upload category image", () => { cy.get('input[name="name"]').type("دسته‌بندی با تصویر"); // Upload image cy.get('input[type="file"]').selectFile( "cypress/fixtures/category-image.jpg", { force: true } ); // Wait for upload cy.wait(2000); cy.get('button[type="submit"]').click(); // Verify success cy.url().should("include", "/categories"); cy.contains("دسته‌بندی با تصویر").should("be.visible"); }); it("should validate image format", () => { cy.get('input[type="file"]').selectFile( "cypress/fixtures/invalid-file.txt", { force: true } ); cy.contains("فرمت فایل باید تصویر باشد").should("be.visible"); }); }); describe("Category Import/Export", () => { beforeEach(() => { cy.visit("/categories"); }); it("should show import modal", () => { cy.get("button").contains("وارد کردن").click(); cy.get('.modal, [role="dialog"]').should("be.visible"); cy.contains("وارد کردن دسته‌بندی‌ها از فایل Excel").should("be.visible"); }); it("should validate Excel file upload", () => { cy.get("button").contains("وارد کردن").click(); // Upload valid Excel file cy.get('input[type="file"]').selectFile( "cypress/fixtures/categories.xlsx", { force: true } ); cy.get("button").contains("شروع وارد کردن").should("not.be.disabled"); }); }); });