Markdown Converter
Agent skill for markdown-converter
**FOLIO Stripes Testing Framework** - Cypress-based E2E testing toolkit for FOLIO library management system UI modules. Built around the "page object" pattern with reusable test fragments and interactors.
Sign in to like and favorite skills
FOLIO Stripes Testing Framework - Cypress-based E2E testing toolkit for FOLIO library management system UI modules. Built around the "page object" pattern with reusable test fragments and interactors.
cypress/e2e/ - Test specifications organized by FOLIO modules (inventory, orders, organizations, etc.)cypress/support/fragments/ - Reusable page objects and UI interaction helpersinteractors/ - Component-level DOM interaction abstractions from @interactors/htmlsupport/dictionary/permissions.js - Centralized permission definitions for test usersTest cases follow hierarchical describe blocks matching the provided test case hierarchy:
describe('Module', () => { describe('Feature Area', () => { describe('Specific Function', () => { // Test cases with C##### identifiers }); }); });
Hierarchy Mapping: When test cases include hierarchy patterns (e.g., "Inventory › Settings › Call number browse"), create matching nested describe blocks:
describe('Inventory', () => { describe('Settings', () => { describe('Call number browse', () => { // Test implementation }); }); });
If no hierarchy is specified in the provided test case, use an example of any similar test.
cy.getAdminToken() + API calls for test data creation in before() hooksafter() hooks with API deletionscy.createTempUser([Permissions.xyz.gui])getRandomPostfix() utilityTest fragments follow consistent patterns:
// Navigation and waiting ModuleName.waitLoading() ModuleName.openSomeForm() // Interactions ModuleName.fillField(value) ModuleName.clickButton() // Validations ModuleName.verifyElementExists() ModuleName.checkExpectedValue()
Prefer interactors over raw Cypress selectors:
// Good cy.do(Button('Save').click()) cy.expect(TextField('Name').has({value: 'test'})) // Avoid raw selectors when interactor exists cy.get('[data-testid="save-button"]').click()
support/dictionary/permissions.js.gui suffix for UI permissions: Permissions.inventoryAll.gui.cy.js) for each test unless specifically told otherwiseit block) must have tags attribute with 3 components:
{ tags: ['extendedPath', 'spitfire', 'C627455'] }
criticalPath, smoke, extendedPath (add "ECS" for consortia: criticalPathECS)spitfire, thunderjet, eureka, etc.)C######)AT_C######_Description_${randomPostfix}Cypress.env('eureka') or consortium checksTests typically combine API setup with UI validation:
before('Create test data', () => { cy.getAdminToken().then(() => { // Create via API Organizations.createOrganizationViaApi(testData.organization); }); cy.createTempUser([permissions]).then((user) => { cy.login(user.username, user.password, { path: TopMenu.modulePath, waiter: ModulePage.waitContentLoading, }); }); });
Before generating tests:
semantic_search for similar test scenariosgrep_search for relevant page objectssupport/constants.jsExample searches:
semantic_search("inventory search LCCN test patterns")grep_search("CallNumberBrowse" includePattern:"support/fragments/**")cy.wait() sparingly; prefer waitLoading() methods from fragmentsafter() hooks to prevent test pollutiongetRandomPostfix() to avoid data conflicts between test runsdescriptive-test-name.cy.jsmoduleName/subModule.js (camelCase)AT_C######_ModuleName_${randomPostfix}