# Task 4: data-testid Verification — Login Page
# Date: 2026-03-01

## Note: Inertia/Vue SPA — data-testid renders client-side, not in initial HTML
## curl -s http://cts-work.test/login returns raw HTML before Vue hydration
## data-testid attributes are compiled into the JS bundles

## Login JS bundle data-testid count:
# grep -o 'data-testid' public/build/assets/Login-*.js | wc -l
# Result: 3 (login-oauth-button, login-test-button, guest-layout-logo-link)

## Total data-testid in built JS:
# grep -roh 'data-testid' public/build/assets/*.js | wc -l
# Result: 90

## Total data-testid in Vue source files:
# grep -roh 'data-testid' resources/js/ | wc -l
# Result: 98

## Breakdown by file (source):
# Login.vue: 2 (login-oauth-button, login-test-button)
# Dashboard.vue: 1 (dashboard-welcome-text)
# Services/Index.vue: 9 (empty, table, row, reopen, download, edit, finalize, confirm-cancel, confirm-submit)
# Services/Edit.vue: 3 (back-icon, back, block-toggle)
# Songs/Index.vue: 14 (upload-area, file-input, search, clear, edit, translate, download, delete, pagination x2, delete-cancel, delete-confirm, edit-modal)
# Songs/Translate.vue: 8 (back, url-input, fetch, source-textarea, apply, save, original-textarea, translation-textarea)
# InformationBlock.vue: 3 (block, uploader, grid)
# ModerationBlock.vue: 3 (block, uploader, grid)
# SermonBlock.vue: 3 (block, uploader, grid)
# SongsBlock.vue: 9 (block, song-card, request, search, select, assign, translation-checkbox, preview, download)
# ArrangementConfigurator.vue: 7 (configurator, select, add, clone, delete, drag-handle, remove)
# SlideUploader.vue: 4 (uploader, expire-input, error-dismiss, dropzone)
# SlideGrid.vue: 6 (grid, delete, fullimage-link, expire-input, expire-save, expire-cancel)
# SongEditModal.vue: 6 (modal, close, error-close, title-input, ccli-input, copyright-textarea)
# SongPreviewModal.vue: 5 (modal, pdf-link, close, error-close, bottom-close)
# AuthenticatedLayout.vue: 12 (logo, nav-services, nav-songs, sync-timestamp, sync-button, user-dropdown, logout, hamburger, mobile-nav-services, mobile-nav-songs, mobile-sync, mobile-logout)
# GuestLayout.vue: 1 (logo-link)
# MainLayout.vue: 1 (main-layout)
# ConfirmDialog.vue: 2 (cancel, confirm)
