# 2026-03-27 Q-004 Coverage Remediation Pass 3

## Scope

- Continue remediating `Q-004 自动化覆盖率不足`.
- This pass stayed on the remaining real gaps instead of moving to `Q-005`.
- Focus areas:
  - Frontend `UsersPage`
  - Frontend deeper `ProfileSecurityPage` action branches
  - Backend `internal/repository`
  - Backend `internal/auth/providers`

## Changes

### Frontend

- Added page-level regression tests for:
  - `frontend/admin/src/pages/admin/UsersPage/UsersPage.test.tsx`
  - `frontend/admin/src/pages/admin/ProfileSecurityPage/ProfileSecurityPage.behavior.test.tsx`
- Newly covered user-facing branches include:
  - `UsersPage`
    - initial load
    - keyword filter and reset
    - refresh
    - create/detail/edit/assign-role overlay flows
    - self-delete guard
    - all status transition branches (`1 -> 3`, `3 -> 1`, `2 -> 1`, `0 -> 1`)
    - role-fetch failure
    - page error retry
  - `ProfileSecurityPage`
    - TOTP setup open
    - enable validation and success path
    - disable validation and success path
    - avatar type and size validation
    - valid avatar upload success path
    - device enable/disable/delete flows

### Backend

- Added repository regression tests in:
  - `internal/repository/repository_additional_test.go`
- Added provider non-network coverage in:
  - `internal/auth/providers/provider_urls_additional_test.go`
- Fixed one real repository defect in:
  - `internal/repository/device.go`
  - explicit `status=0` on device create was being swallowed by the DB default, causing inactive devices to persist as active

## Verified Commands

```powershell
cd D:\project\frontend\admin
npm.cmd run test:run -- src/pages/admin/UsersPage/UsersPage.test.tsx src/pages/admin/ProfileSecurityPage/ProfileSecurityPage.behavior.test.tsx
npm.cmd run lint
npm.cmd run build
npm.cmd run test:coverage

cd D:\project
$env:GOCACHE='D:\project\.tmp\gocache'
$env:GOPATH='D:\project\.tmp\go'
$env:GOMODCACHE='D:\project\.tmp\go\pkg\mod'
go test ./internal/repository ./internal/auth/providers -count=1
go test ./internal/auth/providers ./internal/repository -cover
go test ./... -count=1
go vet ./...
go build ./cmd/server
```

## Results

### Frontend coverage

- Overall:
  - statements `49.18%`
  - branches `42.86%`
  - functions `44.92%`
  - lines `49.79%`
- Target modules:
  - `src/pages/admin/UsersPage/UsersPage.tsx`: `90.98%` statements, `68.75%` branches
  - `src/pages/admin/ProfileSecurityPage/ProfileSecurityPage.tsx`: `70.17%` statements, `48.97%` branches
  - `src/pages/admin/ProfileSecurityPage/ContactBindingsSection.tsx`: `85.29%` statements
  - `src/pages/admin/WebhooksPage/WebhooksPage.tsx`: `93.15%`
  - `src/pages/admin/ImportExportPage/ImportExportPage.tsx`: `83.58%`

### Backend coverage

- `internal/repository`: `37.1%`
- `internal/auth/providers`: `8.5%`

## Real Conclusion

- This pass materially reduced the previously explicit `UsersPage` and `ProfileSecurityPage` gaps.
- It also exposed and closed a real persistence bug in `DeviceRepository.Create`.
- `Q-004` has improved again, but it still cannot be honestly declared closed.
- The main remaining gaps are still:
  - low-coverage frontend service layers and multiple untouched admin pages
  - deeper `internal/auth/providers` non-network parsing/error paths
  - the rest of `internal/repository` beyond the newly covered device/login-log/password-history/operation-log paths
