Skip to content

Align squad model and roster guidance#25

Merged
mpaulosky merged 4 commits into
devfrom
squad/20-align-squad-model-and-roster-docs
Apr 19, 2026
Merged

Align squad model and roster guidance#25
mpaulosky merged 4 commits into
devfrom
squad/20-align-squad-model-and-roster-docs

docs(squad): watch PR checks faster

c952dd6
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
GitHub Actions / Test Results succeeded Apr 19, 2026 in 0s

81 passed, 0 failed and 0 skipped

Tests passed successfully

Report Passed Failed Skipped Time
test-results/architecture/architecture-tests.trx 6✅ 2s
test-results/integration/integration-tests.trx 9✅ 16s
test-results/unit/unit-tests.trx 66✅ 3s

✅ test-results/architecture/architecture-tests.trx

6 tests were completed in 2s with 6 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
MyBlog.Architecture.Tests.DomainLayerTests 3✅ 106ms
MyBlog.Architecture.Tests.VsaLayerTests 3✅ 123ms

✅ MyBlog.Architecture.Tests.DomainLayerTests

✅ Domain_Entities_Should_Be_Sealed
✅ Domain_Should_Not_Have_InMemoryRepository
✅ Domain_Should_Not_Reference_Web

✅ MyBlog.Architecture.Tests.VsaLayerTests

✅ Data_Layer_Should_Not_Be_Referenced_Outside_Web
✅ Features_Should_Not_Reference_Each_Other
✅ Handlers_Should_HaveNameEndingWithHandler_And_BeSealed

✅ test-results/integration/integration-tests.trx

9 tests were completed in 16s with 9 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
MyBlog.Integration.Tests.BlogPosts.MongoDbBlogPostRepositoryTests 9✅ 2s

✅ MyBlog.Integration.Tests.BlogPosts.MongoDbBlogPostRepositoryTests

✅ AddAsync persists post to MongoDB
✅ DeleteAsync does nothing when post not found
✅ DeleteAsync removes post from MongoDB
✅ GetAllAsync returns empty when no posts exist
✅ GetAllAsync returns posts ordered by newest first
✅ GetByIdAsync returns null when not found
✅ GetByIdAsync returns post when found
✅ UpdateAsync modifies post in MongoDB
✅ UpdateAsync throws when version conflicts with concurrent update

✅ test-results/unit/unit-tests.trx

66 tests were completed in 3s with 66 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
MyBlog.Unit.Tests.BlogPostTests 7✅ 11ms
MyBlog.Unit.Tests.Components.Layout.NavMenuTests 4✅ 426ms
MyBlog.Unit.Tests.Components.RazorSmokeTests 18✅ 978ms
MyBlog.Unit.Tests.Features.UserManagement.ProfileTests 2✅ 244ms
MyBlog.Unit.Tests.Handlers.CreateBlogPostHandlerTests 2✅ 66ms
MyBlog.Unit.Tests.Handlers.DeleteBlogPostHandlerTests 3✅ 7ms
MyBlog.Unit.Tests.Handlers.EditBlogPostHandlerTests 6✅ 16ms
MyBlog.Unit.Tests.Handlers.GetBlogPostsHandlerTests 4✅ 73ms
MyBlog.Unit.Tests.ResultTests 6✅ 7ms
MyBlog.Unit.Tests.Security.RoleClaimsHelperTests 14✅ 272ms

✅ MyBlog.Unit.Tests.BlogPostTests

✅ Create_WithBlankArgs_ThrowsArgumentException(title: "", content: "content", author: "author")
✅ Create_WithBlankArgs_ThrowsArgumentException(title: "title", content: "", author: "author")
✅ Create_WithBlankArgs_ThrowsArgumentException(title: "title", content: "content", author: "")
✅ Create_WithValidArgs_ReturnsBlogPost
✅ Publish_SetsIsPublished_True
✅ Unpublish_SetsIsPublished_False
✅ Update_ChangesTitle_AndContent

✅ MyBlog.Unit.Tests.Components.Layout.NavMenuTests

✅ AuthenticatedAdmin_UsesDisplayNameAsProfileLabel_AndShowsAdminLinks
✅ AuthenticatedUser_WithoutName_FallsBackToProfileLabel
✅ NavMenu_LoadsThemeFromJs_AndAllowsThemeInteraction
✅ UnauthenticatedUser_SeesLoginAndNoProtectedLinks

✅ MyBlog.Unit.Tests.Components.RazorSmokeTests

✅ BlogIndex_ConfirmDelete_SendsDeleteCommandAndRefreshesList
✅ BlogIndex_RendersPostsForAuthorizedUser_AndCanOpenDeleteDialog
✅ BlogIndex_ShowsConcurrencyWarning_WhenDeleteFailsWithConcurrency
✅ BlogIndex_ShowsEmptyState_WhenNoPostsExist
✅ ConfirmDeleteDialog_ShowsDialog_WhenVisible
✅ CreatePost_RendersForm
✅ CreatePost_SubmitsAndNavigatesToBlog_WhenCommandSucceeds
✅ EditPost_LoadsExistingPost
✅ EditPost_ShowsConcurrencyMessage_WhenSaveFailsWithConcurrency
✅ EditPost_SubmitsAndNavigatesToBlog_WhenSaveSucceeds
✅ Error_UsesCascadingHttpContextTraceIdentifier
✅ Home_RendersWelcomeMessage
✅ MainLayout_RendersMainContentTargetAndFooter
✅ ManageRoles_AssignButton_SendsCommandAndRefreshesUsers
✅ ManageRoles_RemoveButton_SendsCommandAndRefreshesUsers
✅ ManageRoles_RendersUsersAndAvailableRoles
✅ NotFound_RendersNotFoundMessage
✅ RedirectToLogin_NavigatesToLoginWithReturnUrl

✅ MyBlog.Unit.Tests.Features.UserManagement.ProfileTests

✅ Profile_RendersIdentityDetailsRolesPictureAndClaims
✅ Profile_UsesFallbackValues_WhenOptionalClaimsAreMissing

✅ MyBlog.Unit.Tests.Handlers.CreateBlogPostHandlerTests

✅ Handle_RepoThrows_ReturnsFailResult
✅ Handle_Success_CreatesPostInvalidatesCacheAndReturnsGuid

✅ MyBlog.Unit.Tests.Handlers.DeleteBlogPostHandlerTests

✅ Handle_ConcurrentDelete_ReturnsConcurrencyErrorCode
✅ Handle_RepoThrows_ReturnsFailResult
✅ Handle_Success_DeletesAndInvalidatesBothCaches

✅ MyBlog.Unit.Tests.Handlers.EditBlogPostHandlerTests

✅ HandleEdit_ConcurrentUpdate_ReturnsConcurrencyErrorCode
✅ HandleEdit_NotFound_ReturnsFailResult
✅ HandleEdit_Success_UpdatesPostAndInvalidatesBothCaches
✅ HandleGetById_CacheMissRepoReturnsNull_ReturnsOkWithNull
✅ HandleGetById_CacheMissRepoReturnsPost_MapsToDtoAndCachesBoth
✅ HandleGetById_L1CacheHit_ReturnsCachedDtoWithoutRepo

✅ MyBlog.Unit.Tests.Handlers.GetBlogPostsHandlerTests

✅ Handle_CacheMiss_CallsRepoAndPopulatesBothCaches
✅ Handle_L1CacheHit_ReturnsCachedDataWithoutCallingRepo
✅ Handle_L2CacheHit_DeserializesAndPopulatesL1
✅ Handle_RepoThrows_ReturnsFailResult

✅ MyBlog.Unit.Tests.ResultTests

✅ Fail_CreatesFailedNonGenericResultWithCodeAndDetails
✅ FromValue_ReturnsFailedResultWhenValueIsNull
✅ GenericFail_CreatesFailedResultWithCode
✅ GenericOk_CarriesValue
✅ ImplicitConversions_WorkForGenericResult
✅ Ok_CreatesSuccessfulNonGenericResult

✅ MyBlog.Unit.Tests.Security.RoleClaimsHelperTests

✅ AddRoleClaims_AddsExpandedRoleClaimsWithoutDuplicates
✅ AddRoleClaims_InfersNamespacedRoleClaims_WhenConfiguredTypesDoNotMatch
✅ ExpandRoleValues_ParsesSupportedFormats(input: " [\"Admin\",\"Author\"] ", expected: ["Admin", "Author"])
✅ ExpandRoleValues_ParsesSupportedFormats(input: "Admin,Author", expected: ["Admin", "Author"])
✅ ExpandRoleValues_ParsesSupportedFormats(input: "Admin", expected: ["Admin"])
✅ GetRoleClaimTypes_ReturnsDefaults_WhenConfigurationIsMissing
✅ GetRoleClaimTypes_UsesConfiguredDistinctValues_WhenPresent
✅ GetRoles_CollectsDistinctRolesAcrossMultipleClaimTypes
✅ GetRoles_IncludesNamespacedRoleClaims_WhenRoleClaimTypeWasNotConfigured
✅ IsRoleClaimType_DetectsExpectedClaimTypes(claimType: "http://schemas.microsoft.com/ws/2008/06/identity/c"···, expected: True)
✅ IsRoleClaimType_DetectsExpectedClaimTypes(claimType: "https://articlesite.com/app_metadata", expected: False)
✅ IsRoleClaimType_DetectsExpectedClaimTypes(claimType: "https://articlesite.com/roles", expected: True)
✅ IsRoleClaimType_DetectsExpectedClaimTypes(claimType: "role", expected: True)
✅ IsRoleClaimType_DetectsExpectedClaimTypes(claimType: "roles", expected: True)