test: phase 2 coverage for ConfigService and clock-dependent resolvers - #30
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 toTimeProvider.System) —DateTime.Todayis nowClock.GetLocalNow().Date. All existing callers are unchanged; tests swap in a fixed clock.ConfigServicehonors aTIMETRACKER_CONFIG_DIRoverride inGetConfigPath(). 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 pinnedFixedClock, 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.