Skip to content

test: phase 2 coverage for ConfigService and clock-dependent resolvers - #30

Merged
jonas1307 merged 1 commit into
mainfrom
test/phase-2-seams
Jul 25, 2026
Merged

test: phase 2 coverage for ConfigService and clock-dependent resolvers#30
jonas1307 merged 1 commit into
mainfrom
test/phase-2-seams

Conversation

@jonas1307

Copy link
Copy Markdown
Owner

Phase 2 (part 1): ConfigService and clock-dependent resolver coverage

Follows the Phase 1 suite. Adds two small production seams and the tests they unlock. No runtime behavior changes.

Production seams

  • ValidationUtils.Clock (TimeProvider, defaults to TimeProvider.System) — DateTime.Today is now Clock.GetLocalNow().Date. All existing callers are unchanged; tests swap in a fixed clock.
  • ConfigService honors a TIMETRACKER_CONFIG_DIR override in GetConfigPath(). Unset for normal users, so the runtime config path is unchanged; tests point it at a throwaway directory.
  • InternalsVisibleTo("Timetracker.Tests") for the internal clock.

Tests (16 new, 83 total)

  • ResolveDateTests — absolute week/month/last-week/last-month ranges against a pinned FixedClock, incl. Sunday and year-boundary (Jan -> Dec) edges.
  • ConfigServiceTests — Save/Load round-trip (token decrypts back), non-destructive merge, GetTableBorder, DeleteConfig, all against a temp dir.
  • ConfigValidatorFirstTimeTests — first-time-setup credential rules (url/token required only when no config exists), enabled by the temp-dir seam.

Parallelization is disabled at the assembly level because the clock seam is process-global static; the suite runs in ~0.35s. Clock and env var are reset via IDisposable.

Pack of the tool is unaffected.

Part of #29 — the remaining item (HttpService with a mock, which needs a client-injection refactor) will land in a follow-up PR that closes the issue.

Add a TimeProvider clock seam to ValidationUtils and a config-dir override to
ConfigService so the date resolvers, config round-trip/merge, and the first-time
ConfigValidator rules can be tested without touching the real store or wall clock.
@jonas1307 jonas1307 self-assigned this Jul 25, 2026
@jonas1307
jonas1307 merged commit fc1f16a into main Jul 25, 2026
1 check passed
@jonas1307
jonas1307 deleted the test/phase-2-seams branch July 25, 2026 03:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant