UNPKG

ryuu.js

Version:

Ryuu JavaScript Utility Library

257 lines (206 loc) 10.6 kB
# Domo.js Demo App This folder contains a comprehensive testing suite for the `domo.js` library, designed to test every aspect of the API in a real Domo app environment. ## Project Structure ``` demo/ ├── index.html # Main demo page (refactored version) ├── manifest.json # Domo app configuration ├── thumbnail.png # App thumbnail ├── domo.js # Built library file ├── README.md # This documentation └── assets/ # Organized assets ├── css/ │ └── styles.css # All CSS styles, organized by component └── js/ ├── tests.js # Test definitions and configuration ├── utils.js # Utility functions and helpers └── app.js # Main application logic ``` ## Refactoring Improvements ### 🏗️ **Separation of Concerns** - **HTML**: Clean semantic structure without inline styles or scripts - **CSS**: Organized by components with clear sections and responsive design - **JavaScript**: Modular architecture with separate concerns ### 📁 **Modular Architecture** - **`tests-standalone.js`**: All test definitions, configurations, and metadata - **`utils-standalone.js`**: DOM utilities, statistics, formatting, and export functions - **`app-standalone.js`**: Main application logic and orchestration - **`styles.css`**: Comprehensive CSS organized by component type ### 🎯 **Code Quality Improvements** - **Type Safety**: Better error handling and validation - **Maintainability**: Clear function separation and documentation - **Extensibility**: Easy to add new tests or modify existing ones - **Performance**: Optimized DOM operations and event handling ### 🎨 **Enhanced User Experience** - **Clean Interface**: Modern design with improved visual hierarchy - **Responsive Layout**: Works seamlessly on desktop and mobile devices - **Better Status Indicators**: Clear visual feedback for test states - **Organized Actions**: Intuitive button placement and functionality ## Key Features ### 🧪 **Comprehensive Test Coverage** - **HTTP Methods**: GET, POST, PUT, DELETE, getAll - **Event Listeners**: onDataUpdated, onFiltersUpdated, onVariablesUpdated, onAppDataUpdated - **Utility Functions**: Navigation, extend functionality, utility helpers - **Performance Monitoring**: Timing information for all API calls - **Error Handling**: Detailed error reporting with proper formatting ### 📊 **Advanced Testing Features** - **Individual Test Controls**: Run and clear individual tests - **Export Functionality**: Export test results as JSON with metadata - **Real-time Statistics**: Live counters for passed/failed/pending tests - **Enhanced Logging**: Detailed console output and visual feedback - **Event-Driven Testing**: Automatic detection and handling of event-based APIs ### 🔧 **Developer Experience** - **Modular Codebase**: Easy to extend and maintain - **Clear Documentation**: Well-documented functions and classes - **Error Boundaries**: Robust error handling throughout the application - **Performance Monitoring**: Built-in timing and performance metrics ## How to Use ### Basic Testing 1. Open `index.html` in a browser within a Domo app context 2. Click "🚀 Run All Tests" to execute all automated tests 3. Review results in the interface ### Individual Test Management 1. **Run Specific Tests**: Use the "▶️ Run" buttons for individual tests 2. **Clear Results**: Use "🧹 Clear" buttons to reset individual test states 3. **View Details**: Check the "Details & Results" column for comprehensive output 4. **Monitor Performance**: Review timing information for each API call ### Event-Based Testing Some tests require manual interaction: - **onDataUpdated**: Change the linked dataset - **onFiltersUpdated**: Modify page filters - **onVariablesUpdated**: Change dashboard variables - **onAppDataUpdated**: Use the "📤 Send App Data" button ### Export and Analysis 1. **Export Results**: Click "📊 Export Results" to download comprehensive test data 2. **Review Statistics**: Monitor real-time pass/fail counters 3. **Debug Issues**: Check browser console for detailed logging ## Development ### File Organization #### **CSS Architecture** (`assets/css/styles.css`) - **Base Styles**: Typography, layout fundamentals - **Layout Components**: Container, header, controls, content sections - **Button Components**: Primary, secondary, small variants with hover states - **Statistics Display**: Real-time counters and status indicators - **Table Components**: Responsive table design with hover effects - **Test Result Components**: Status badges, timing displays, error formatting - **Loading Spinner**: Animated loading indicators - **Responsive Design**: Mobile-first responsive breakpoints #### **JavaScript Architecture** **`tests.js`** - Test Configuration - Test definitions with categories and descriptions - HTTP endpoint configurations and test data - Event listener setup and callback definitions - Helper functions for test management and data reset **`utils.js`** - Utility Classes - **DOMUtils**: DOM manipulation and element creation - **StatisticsManager**: Real-time statistics tracking and updates - **ResultFormatter**: Test result formatting and display - **ExportUtils**: JSON export functionality with metadata - **GeneralUtils**: Common utilities like debouncing and logging **`app.js`** - Main Application - **DomoTestApp**: Main application class with lifecycle management - **Test Execution**: Sequential test running with error handling - **Event Management**: Domo.js event listener registration and callbacks - **UI Coordination**: Button states, loading indicators, and user interactions ### Adding New Tests 1. **Define the Test** in `tests.js`: ```javascript { name: "new-api-test", category: "http", // or "events", "utilities" description: "Description of what this test does", fn: async () => { // Test implementation const result = await domo.newApiMethod(); return { data: result, timing: "..." }; }, } ``` 2. **Categories**: Tests are automatically organized by category 3. **Event Tests**: Use `fn: () => new Promise()` for event-driven tests 4. **Custom Buttons**: Add `customButton: true` for special UI requirements ### Building and Deployment ```bash # Build the domo.js library (from project root) npm run build # This copies dist/domo.js to demo/domo.js automatically ``` ### Code Quality and Standards #### **Error Handling** - Comprehensive try-catch blocks around async operations - Detailed error logging with context information - User-friendly error messages in the UI - Graceful degradation for missing APIs #### **Performance Considerations** - Debounced UI updates to prevent excessive re-renders - Efficient DOM manipulation using utility classes - Lazy initialization of expensive operations - Memory leak prevention with proper event cleanup #### **Accessibility** - Semantic HTML structure with proper headings - Keyboard navigation support - Screen reader compatible status indicators - High contrast color schemes ## API Coverage The demo comprehensively tests the following domo.js APIs: ### **HTTP Methods** - `domo.get()` - Retrieve data from endpoints - `domo.post()` - Create new records with validation - `domo.put()` - Update existing records - `domo.delete()` - Remove records with confirmation - All methods include timing and error handling ### **Event System** - `domo.onDataUpdated()` - Dataset change events with callback registration - `domo.onFiltersUpdated()` - Filter change events with real-time updates - `domo.onVariablesUpdated()` - Variable change events with payload validation - `domo.onAppDataUpdated()` - App data events with custom data handling - `domo.requestFiltersUpdate()` - Proactive filter update requests - `domo.requestVariablesUpdate()` - Variable update with structured payloads - `domo.requestAppDataUpdate()` - App data transmission with validation ### **Configuration and Setup** The demo uses the following configuration from `manifest.json`: - **Collection**: `SanityTest` for HTTP method testing - **Dataset**: Linked dataset for data update events - **Variables**: Dashboard variables for variable testing - **Embedding**: Required for full event testing capability ## Troubleshooting ### **Common Issues** #### **domo.js Not Loaded** ``` Error: domo.js is not loaded ``` **Solution**: Ensure the library file exists and is accessible. Check the build process. #### **Event Tests Not Triggering** **Symptoms**: Event-driven tests remain in "Pending" state **Solution**: Verify the app is embedded in a dashboard with appropriate data sources and user permissions. #### **HTTP Tests Failing** **Symptoms**: 403, 404, or network errors in HTTP tests **Solution**: Check collection permissions, data source configuration, and network connectivity. #### **Performance Issues** **Symptoms**: Slow test execution or UI freezing **Solution**: Check browser console for errors, ensure adequate system resources, and verify network stability. ### **Browser Compatibility** - **Modern Browsers**: Chrome 80+, Firefox 75+, Safari 13+, Edge 80+ - **ES6 Support**: Required for async/await and modern JavaScript features - **Mobile Browsers**: iOS Safari 13+, Android Chrome 80+ - **Development Tools**: Chrome DevTools recommended for debugging ### **Debug Mode** Enable detailed logging by opening browser console: - Application initialization logs - Test execution timing and results - Event registration and callback execution - Error stack traces with context ## Legacy Support ### **Original Demo** The original single-file demo has been completely replaced by the refactored version. The benefits include: - **Cleaner Code**: Separated concerns with modular architecture - **Better Maintenance**: Individual files can be updated independently - **Enhanced Performance**: Optimized loading and execution - **Professional Structure**: Modern web development best practices ### **File Structure Benefits** The simplified three-file JavaScript structure provides: - **`tests.js`**: Easy to add or modify test cases - **`utils.js`**: Reusable utility functions across the application - **`app.js`**: Main orchestration logic with clear entry points ### **Compatibility** The refactored version provides the same testing functionality as the original with improved maintainability and performance. All API coverage and test results remain identical.