Files
ClaudeDo/tests/ClaudeDo.Worker.Tests/UiVm/TaskRowViewModelTests.cs
T
mika kuns 38af549a80 feat(ui,worker): surface task numbers in row/detail UI and worker log
Slice 4/5 of task-numbers: TaskRowViewModel.Number renders as a dimmed
"#123" before the row title; DetailsIslandViewModel.TaskIdBadge now
shows "#123" instead of the unusable "#T<guid-prefix>" handle; and the
curated WorkerLog business events in TaskRunner, TaskMergeService, and
TaskResetService prefix their quoted title with "#<Number>".
2026-08-11 13:51:20 +02:00

64 lines
1.9 KiB
C#

using System.Collections.Generic;
using ClaudeDo.Data.Models;
using ClaudeDo.Ui.ViewModels.Islands;
using Xunit;
using TaskStatus = ClaudeDo.Data.Models.TaskStatus;
namespace ClaudeDo.Worker.Tests.UiVm;
public class TaskRowViewModelTests
{
[Theory]
[InlineData(TaskStatus.Running, "running")]
[InlineData(TaskStatus.WaitingForReview, "review")]
[InlineData(TaskStatus.Failed, "error")]
[InlineData(TaskStatus.Done, "done")]
[InlineData(TaskStatus.Queued, "queued")]
[InlineData(TaskStatus.Idle, "idle")]
public void StatusChipClass_Maps_Correctly(TaskStatus s, string expected)
{
var vm = new TaskRowViewModel { Id = "t" };
vm.Status = s;
Assert.Equal(expected, vm.StatusChipClass);
}
[Fact]
public void Number_SetFromEntity_SurvivesUpdateFromEntity()
{
var entity = new TaskEntity
{
Id = "t", ListId = "l1", Title = "Task", Number = 123, CreatedAt = DateTime.UtcNow,
};
var vm = TaskRowViewModel.FromEntity(entity);
Assert.Equal(123, vm.Number);
// Simulates the TaskUpdated refresh path: the entity is re-fetched and the same
// row is updated in place rather than replaced.
entity.Title = "Task (edited)";
vm.UpdateFromEntity(entity);
Assert.Equal(123, vm.Number);
}
[Fact]
public void IsDropTarget_Follows_Either_DropHint_And_Raises_PropertyChanged()
{
var vm = new TaskRowViewModel { Id = "t" };
var raised = new List<string?>();
vm.PropertyChanged += (_, e) => raised.Add(e.PropertyName);
Assert.False(vm.IsDropTarget);
vm.DropHintAbove = true;
Assert.True(vm.IsDropTarget);
Assert.Contains(nameof(TaskRowViewModel.IsDropTarget), raised);
vm.DropHintAbove = false;
vm.DropHintBelow = true;
Assert.True(vm.IsDropTarget);
vm.DropHintBelow = false;
Assert.False(vm.IsDropTarget);
}
}