Skip to content

refactor(mocks): extract MockTypeModel.Visibility helper#5443

Merged
thomhurst merged 1 commit intomainfrom
fix/5426-cleanup
Apr 7, 2026
Merged

refactor(mocks): extract MockTypeModel.Visibility helper#5443
thomhurst merged 1 commit intomainfrom
fix/5426-cleanup

Conversation

@thomhurst
Copy link
Copy Markdown
Owner

Summary

  • Follow-up cleanup to [Bug]: CS9338 for interface mock when interface is not public #5426 fix (commit 53bd350 on main).
  • Extracts a single Visibility property on MockTypeModel to replace the duplicated IsPublic ? "public" : "internal" ternary across five builders.
  • Restores the optional defaults on spanReturnElementType / spanReturnType in GenerateVoidUnifiedClass by moving the visibility parameter earlier in the signature (it had been demoted to required to make room for the new param).

Test plan

  • TUnit.Mocks.Tests builds clean
  • Issue5426Tests (3/3) pass

Replaces the duplicated 'IsPublic ? "public" : "internal"' ternary
across five builders with a single Visibility property on MockTypeModel.
Also restores the optional defaults on spanReturnElementType/spanReturnType
in GenerateVoidUnifiedClass by moving the new visibility parameter earlier
in the signature.
Copy link
Copy Markdown
Contributor

@claude claude bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Clean, well-scoped refactor. No issues found.

What this does well

DRY principle applied correctly — the duplicated model.IsPublic ? "public" : "internal" ternary appeared in 5 separate builders, all computing the same value from the same source. Extracting it to MockTypeModel.Visibility is the right place for this logic: the model owns the data, so the derived string belongs there too.

Signature fix in GenerateVoidUnifiedClass — moving visibility to an earlier position in the parameter list was necessary to restore the optional defaults on spanReturnElementType / spanReturnType. C# requires that parameters with defaults trail all required parameters, so the previous ordering was forcing callers to always pass nulls explicitly. The reordering is correct and improves call-site ergonomics.

Minimal footprint — the PR touches exactly the right files and nothing more. The XML doc comment on Visibility is concise and useful.

Minor notes (no action needed)

  • IsPublic is still present on the model (correctly, as the source of truth). Visibility is a purely derived helper — that separation is appropriate.
  • If visibility ever needs to support more than two states (e.g., protected internal), this is the one place to update — a good consolidation point.

@codacy-production
Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 complexity

Metric Results
Complexity 0

View in Codacy

TIP This summary will be updated as you push new changes. Give us feedback

@thomhurst thomhurst enabled auto-merge (squash) April 7, 2026 18:15
@thomhurst thomhurst linked an issue Apr 7, 2026 that may be closed by this pull request
1 task
@thomhurst thomhurst merged commit 1be83c3 into main Apr 7, 2026
15 checks passed
@thomhurst thomhurst deleted the fix/5426-cleanup branch April 7, 2026 18:33
This was referenced Apr 7, 2026
intellitect-bot pushed a commit to IntelliTect/EssentialCSharp.Web that referenced this pull request Apr 8, 2026
Updated [TUnit](https://github.com/thomhurst/TUnit) from 1.28.7 to
1.29.0.

<details>
<summary>Release notes</summary>

_Sourced from [TUnit's
releases](https://github.com/thomhurst/TUnit/releases)._

## 1.29.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.29.0 -->

## What's Changed
### Other Changes
* 🤖 Update Mock Benchmark Results by @​thomhurst in
thomhurst/TUnit#5420
* fix(mocks): resolve build errors when mocking Azure SDK clients by
@​thomhurst in thomhurst/TUnit#5440
* fix: deduplicate virtual hook overrides across class hierarchy
(#​5428) by @​thomhurst in thomhurst/TUnit#5441
* fix(mocks): unique __argArray locals per event in RaiseEvent dispatch
(#​5423) by @​thomhurst in thomhurst/TUnit#5442
* refactor(mocks): extract MockTypeModel.Visibility helper by
@​thomhurst in thomhurst/TUnit#5443
* fix(mocks): preserve nullable annotations on generated event
implementations by @​thomhurst in
thomhurst/TUnit#5444
* fix(mocks): preserve nullability on event handler types (#​5425) by
@​thomhurst in thomhurst/TUnit#5445
### Dependencies
* chore(deps): update tunit to 1.28.7 by @​thomhurst in
thomhurst/TUnit#5416
* chore(deps): update dependency polyfill to v10 by @​thomhurst in
thomhurst/TUnit#5417
* chore(deps): update dependency polyfill to v10 by @​thomhurst in
thomhurst/TUnit#5418
* chore(deps): update dependency mockolate to 2.4.0 by @​thomhurst in
thomhurst/TUnit#5431
* chore(deps): update mstest to 4.2.1 by @​thomhurst in
thomhurst/TUnit#5433
* chore(deps): update dependency microsoft.net.test.sdk to 18.4.0 by
@​thomhurst in thomhurst/TUnit#5435
* chore(deps): update microsoft.testing to 2.2.1 by @​thomhurst in
thomhurst/TUnit#5432
* chore(deps): update dependency
microsoft.testing.extensions.codecoverage to 18.6.2 by @​thomhurst in
thomhurst/TUnit#5437
* chore(deps): update dependency @​docusaurus/theme-mermaid to ^3.10.0
by @​thomhurst in thomhurst/TUnit#5438
* chore(deps): update docusaurus to v3.10.0 by @​thomhurst in
thomhurst/TUnit#5439


**Full Changelog**:
thomhurst/TUnit@v1.28.7...v1.29.0

Commits viewable in [compare
view](thomhurst/TUnit@v1.28.7...v1.29.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=TUnit&package-manager=nuget&previous-version=1.28.7&new-version=1.29.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
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.

[Bug]: CS9338 for interface mock when interface is not public

1 participant