Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/knowledgebase/gui-architecture-deferred.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ Plans: `docs/plans/2026-06-03-012`, `021`–`029`, `033`–`057`. Surface refere
| Directory picker init/sync → `SettingsService` | Done | plan `075`, PR #123 |
| Mod context menu + global flyout → `MenuBuilderService` | Done | plan `072`, PR #130 |

**Headless tests:** `dotnet test src/ModSync.Tests/ModSync.Tests.csproj --filter SettingsService` (plan `077`); `--filter MenuBuilderService` (plan `072`); `--filter FilterItemModel` (plan `112`).
**Headless tests:** `dotnet test src/ModSync.Tests/ModSync.Tests.csproj --filter SettingsService` (plan `077`); `--filter MenuBuilderService` (plan `072`); `--filter FileTreeNode` (plan `111`).
**Headless tests:** `dotnet test src/ModSync.Tests/ModSync.Tests.csproj --filter SettingsService` (plan `077`); `--filter MenuBuilderService` (plan `072`); `--filter ArchiveEnumerationService` (plan `110`).
**Headless tests:** `dotnet test src/ModSync.Tests/ModSync.Tests.csproj --filter SettingsService` (plan `077`); `--filter MenuBuilderService` (plan `072`); `--filter ValidationServiceTests` (plan `109`).
Expand Down
19 changes: 19 additions & 0 deletions docs/plans/2026-06-04-112-test-filter-item-models-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
title: "test: TierFilterItem and SelectionFilterItem models"
status: shipped
pr: pending
---

# test: TierFilterItem and SelectionFilterItem models

## Problem

Filter sidebar models format tier/category labels and selection state but had no dedicated tests beyond `FilterUIService` integration coverage.

## Solution

Add `FilterItemModelTests` for `DisplayText`, `EffectiveSelection`, and selection toggles.

## Verification

`dotnet test src/ModSync.Tests/ModSync.Tests.csproj --filter FilterItemModel
78 changes: 78 additions & 0 deletions src/ModSync.Tests/FilterItemModelTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// Copyright 2021-2025 ModSync
// Licensed under the Business Source License 1.1 (BSL 1.1).
// See LICENSE.txt file in the project root for full license information.

using ModSync.Models;
using Xunit;

namespace ModSync.Tests
{
public sealed class FilterItemModelTests
{
[Fact(DisplayName = "TierFilterItem DisplayText formats name and count")]
public void TierFilterItem_DisplayText_FormatsNameAndCount()
{
var item = new TierFilterItem
{
Name = "1 - Essential",
Count = 3,
};

Assert.Equal("1 - Essential (3)", item.DisplayText);
}

[Fact(DisplayName = "TierFilterItem EffectiveSelection reflects selected or included state")]
public void TierFilterItem_EffectiveSelection_ReflectsSelectionState()
{
var item = new TierFilterItem();

item.IsIncluded = true;
Assert.True(item.EffectiveSelection);

item.IsIncluded = false;
item.IsSelected = true;
Assert.True(item.EffectiveSelection);

item.IsSelected = false;
Assert.False(item.EffectiveSelection);
}

[Fact(DisplayName = "TierFilterItem count change updates DisplayText")]
public void TierFilterItem_CountChange_UpdatesDisplayText()
{
var item = new TierFilterItem
{
Name = "2 - Recommended",
Count = 1,
};

item.Count = 5;

Assert.Equal("2 - Recommended (5)", item.DisplayText);
}

[Fact(DisplayName = "SelectionFilterItem DisplayText formats name and count")]
public void SelectionFilterItem_DisplayText_FormatsNameAndCount()
{
var item = new SelectionFilterItem
{
Name = "Patch",
Count = 2,
};

Assert.Equal("Patch (2)", item.DisplayText);
}

[Fact(DisplayName = "SelectionFilterItem IsSelected toggles independently")]
public void SelectionFilterItem_IsSelected_Toggles()
{
var item = new SelectionFilterItem { IsSelected = false };

item.IsSelected = true;
Assert.True(item.IsSelected);

item.IsSelected = false;
Assert.False(item.IsSelected);
}
}
}
Loading