{"id":48020666,"url":"https://github.com/cadentdev/meta-editor","last_synced_at":"2026-04-04T13:46:49.431Z","repository":{"id":296381030,"uuid":"993108137","full_name":"cadentdev/meta-editor","owner":"cadentdev","description":"A web-based editor that prepares a post for publication on the web by adding essential meta data","archived":false,"fork":false,"pushed_at":"2025-10-02T01:44:30.000Z","size":399,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-02T02:39:11.920Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cadentdev.png","metadata":{"files":{"readme":"README-TESTING.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-30T08:23:20.000Z","updated_at":"2025-08-19T14:23:16.000Z","dependencies_parsed_at":"2025-08-17T00:08:44.925Z","dependency_job_id":"1b1fe9c5-a254-461e-924a-78a87f35bbe7","html_url":"https://github.com/cadentdev/meta-editor","commit_stats":null,"previous_names":["cadentdev/meta-editor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cadentdev/meta-editor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadentdev%2Fmeta-editor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadentdev%2Fmeta-editor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadentdev%2Fmeta-editor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadentdev%2Fmeta-editor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cadentdev","download_url":"https://codeload.github.com/cadentdev/meta-editor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadentdev%2Fmeta-editor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31402276,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-04T13:46:49.255Z","updated_at":"2026-04-04T13:46:49.380Z","avatar_url":"https://github.com/cadentdev.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Testing Documentation for Meta Editor\n\n## Overview\nThis document describes the comprehensive unit testing setup for Meta Editor v0.2. The tests validate the existing functionality without requiring any code changes.\n\n## Test Structure\n\n### Test Files\n- `tests/setup.js` - Jest configuration and mocks\n- `tests/validation.test.js` - Input validation functions\n- `tests/ui-state.test.js` - UI state management\n- `tests/data-transformation.test.js` - Data processing and preview generation\n- `tests/localStorage.test.js` - Local storage operations\n- `tests/menu-actions.test.js` - Menu action handlers\n\n### Coverage Areas\n\n#### 1. Validation Functions (`validation.test.js`)\n- **validateFilename()** - Filename format validation\n- **validateTitle()** - Title length and content validation  \n- **validateDate()** - Date presence validation\n- **validateSummary()** - Summary length and content validation\n- **formatDate()** - Date formatting for frontmatter\n\n**Key Test Cases:**\n- Empty field validation\n- Minimum length requirements\n- Format validation (filename regex, date formats)\n- Character count limits\n- Whitespace trimming\n\n#### 2. UI State Management (`ui-state.test.js`)\n- **updateZenModeMenuText()** - Dynamic menu text updates\n- **updateToolbarMenuText()** - Toolbar visibility text\n- **loadUIState()** / **saveUIState()** - Persistence\n- **applyUIState()** - DOM manipulation for state changes\n- **toggleZenMode()** / **toggleUIElement()** - State toggles\n\n**Key Test Cases:**\n- Menu text reflects current state\n- localStorage persistence and loading\n- DOM element visibility changes\n- Independent toolbar/zen mode controls\n- Error handling for corrupted localStorage\n\n#### 3. Data Transformation (`data-transformation.test.js`)\n- **extractHeroImage()** - Markdown image parsing\n- **updatePreview()** - Frontmatter and content generation\n- **addTag()** / **removeTag()** / **renderTags()** - Tag management\n- **formatDate()** - Date formatting\n\n**Key Test Cases:**\n- Hero image extraction from various markdown formats\n- Frontmatter generation with all field combinations\n- Tag addition/removal and duplicate prevention\n- Preview content structure and formatting\n- Empty field handling\n\n#### 4. LocalStorage Operations (`localStorage.test.js`)\n- **saveToLocalStorage()** / **loadFromLocalStorage()** - Data persistence\n- **saveHeaderTemplate()** / **loadHeaderTemplate()** - Template management\n- **saveFooterTemplate()** / **loadFooterTemplate()** - Template management\n- **checkForDefaultTemplates()** - Auto-loading templates\n\n**Key Test Cases:**\n- Complete form data save/load cycle\n- Hero image data persistence\n- Template save/load with confirmation dialogs\n- Error handling for corrupted JSON\n- Partial data loading\n- Auto-template loading when fields are empty\n\n#### 5. Menu Actions (`menu-actions.test.js`)\n- **handleMenuAction()** - Central action dispatcher\n- **closeAllMenus()** - Menu visibility management\n- **copyToClipboard()** - Clipboard operations\n- **downloadMarkdown()** - File download functionality\n- **clearEditor()** - Form reset functionality\n\n**Key Test Cases:**\n- All menu action types (about, save, download, etc.)\n- Menu closing before action execution\n- Clipboard API success/failure scenarios\n- Download link creation and cleanup\n- Form clearing with user confirmation\n- File validation before download\n- Status message updates and timeouts\n\n## Mocking Strategy\n\n### Browser APIs\n- **localStorage** - Complete mock with getItem/setItem/removeItem\n- **navigator.clipboard** - Mock with success/failure scenarios\n- **URL.createObjectURL/revokeObjectURL** - Mock for download functionality\n- **FileReader** - Mock for file upload simulation\n- **alert/confirm** - Mock for user interaction testing\n\n### External Libraries\n- **marked** - Markdown parsing library mock\n- **js-yaml** - YAML frontmatter parsing mock\n\n### DOM APIs\n- Complete DOM element creation and manipulation\n- Event listener attachment and triggering\n- CSS class and style property changes\n\n## Test Execution\n\n### Prerequisites\n```bash\nnpm install\n```\n\n### Running Tests\n```bash\n# Run all tests\nnpm test\n\n# Run tests in watch mode\nnpm run test:watch\n\n# Run tests with coverage report\nnpm run test:coverage\n```\n\n### Coverage Goals\n- **Functions**: 95%+ coverage of all testable functions\n- **Lines**: 90%+ line coverage\n- **Branches**: 85%+ branch coverage for conditional logic\n\n## Error Scenarios Tested\n\n### Validation Errors\n- Empty required fields\n- Invalid filename formats\n- Content length violations\n- Invalid date formats\n\n### Storage Errors  \n- Corrupted localStorage JSON\n- Missing localStorage data\n- Storage quota exceeded scenarios\n\n### UI Errors\n- Missing DOM elements\n- Invalid state transitions\n- Menu interaction failures\n\n### API Errors\n- Clipboard API failures\n- File download errors\n- Template loading failures\n\n## Key Testing Principles\n\n### 1. Isolation\nEach test function is extracted and tested independently with controlled inputs and mocked dependencies.\n\n### 2. Realistic DOM\nTests create realistic DOM structures that mirror the actual application HTML.\n\n### 3. State Management\nUI state is properly initialized and managed across test scenarios.\n\n### 4. Error Coverage\nBoth success and failure paths are tested for robust error handling validation.\n\n### 5. Async Handling\nClipboard operations and other async functions are properly tested with Promise resolution/rejection.\n\n## Test Reliability Features\n\n### Setup/Teardown\n- **beforeEach()** - Resets DOM and mocks for each test\n- **mockClear()** - Clears mock call history\n- Mock restoration for console methods\n\n### Mock Isolation\n- No shared state between tests\n- Fresh DOM creation for each test\n- Independent localStorage mock state\n\n### Deterministic Results\n- Fixed date/time mocking for consistent results\n- Controlled random data generation\n- Predictable file naming and content\n\n## Integration with Development\n\n### Continuous Testing\n- Tests can be run during development with `--watch` mode\n- Coverage reports help identify untested code paths\n- Jest configuration supports ES modules and modern JavaScript\n\n### Code Quality\n- Tests validate existing functionality without requiring changes\n- Comprehensive error scenario coverage\n- Realistic user interaction simulation\n\n## Future Enhancements\n\n### Additional Test Types\n- Integration tests for component interactions\n- E2E tests for complete user workflows  \n- Performance tests for large content handling\n\n### Enhanced Mocking\n- More sophisticated FileReader simulation\n- Network request mocking for future features\n- Advanced DOM event simulation\n\nThis testing setup provides comprehensive validation of the Meta Editor's core functionality while maintaining the principle of testing existing code without modifications.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcadentdev%2Fmeta-editor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcadentdev%2Fmeta-editor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcadentdev%2Fmeta-editor/lists"}