XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Text.Json;
using XFEEDToolBox.Core.Engineering;
using XFEEDToolBox.Core.Planning;
using XFEEDToolBox.Core.Presentation;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public class MaterialChecklistTests
{
    [Test] public void InitiallyCoveredMaterialsAreNotAdded()
    {
        var checklist=new MaterialChecklist();
        var rows=checklist.Update([new("nickel","Nickel",24,30),new("zinc","Zinc",4,4),new("conductivecomponents","Conductive Components",20,5)]);
        Check.Equal(1,rows.Count);Check.Equal("conductivecomponents",rows[0].Key);Check.Equal("15",rows[0].MissingText);
        Check.That(checklist.Keys.SequenceEqual(new[]{"conductivecomponents"}));
    }
    [Test] public void RestockingMarksTheExistingRowWithoutRemovingOrReplacingIt()
    {
        var checklist=new MaterialChecklist();var live=new LiveCollection<MaterialNeedLiveRow,MaterialNeed,string>(m=>m.Key,m=>new(m));
        var need=new MaterialNeed("nickel","Nickel",24,5);live.Apply(checklist.Update([need]));var row=live.Single();
        var notifications=new List<string>();row.PropertyChanged+=(_,e)=>notifications.Add(e.PropertyName!);
        var change=live.Apply(checklist.Update([need with{Owned=24}]),reorder:false);
        Check.That(ReferenceEquals(row,live.Single()));Check.Equal(0,change.Added+change.Removed+change.Moved);
        Check.Equal(0,row.Missing);Check.Equal("✓",row.MissingText);Check.That(notifications.Contains(nameof(MaterialNeedLiveRow.MissingText)));
    }
    [Test] public void CombinedDemandCanAdmitAMaterialThatCoveredTheEarlierJob()
    {
        var checklist=new MaterialChecklist();Check.Equal(0,checklist.Update([new("nickel","Nickel",5,8)]).Count);
        var rows=checklist.Update([new("nickel","Nickel",10,8)]);
        Check.Equal(1,rows.Count);Check.Equal(2,rows[0].Missing);Check.Equal("2",rows[0].MissingText);
        Check.Equal("✓",checklist.Update([new("nickel","Nickel",10,12)]).Single().MissingText);
    }
    [Test] public void RemovedRequirementsAreNotCarriedIntoANewCoveredJob()
    {
        var checklist=new MaterialChecklist();checklist.Update([new("nickel","Nickel",5,0)]);
        Check.Equal(0,checklist.Update([]).Count);Check.Equal(0,checklist.Keys.Count);
        Check.Equal(0,checklist.Update([new("nickel","Nickel",2,8)]).Count);
    }
    [Test] public void SavedTrackingRestoresCompletedRowsAndClearForgetsThem()
    {
        var first=new MaterialChecklist();first.Update([new("nickel","Nickel",5,0)]);
        var saved=JsonSerializer.Serialize(first.Keys);var restored=new MaterialChecklist();restored.Restore(JsonSerializer.Deserialize<string[]>(saved)!);
        Check.Equal("✓",restored.Update([new("nickel","Nickel",5,8)]).Single().MissingText);
        restored.Clear();Check.Equal(0,restored.Update([new("nickel","Nickel",5,8)]).Count);Check.Equal(0,restored.Keys.Count);
    }
    [Test] public void CompletedMaterialsMoveToTheBottomWithoutResettingTheList()
    {
        var checklist=new MaterialChecklist();var live=new LiveCollection<MaterialNeedLiveRow,MaterialNeed,string>(m=>m.Key,m=>new(m));
        var first=new MaterialNeed("nickel","Nickel",24,0);var second=new MaterialNeed("zinc","Zinc",8,0);
        live.Apply(checklist.Update([first,second]));var nickel=live[0];var resets=0;
        live.CollectionChanged+=(_,args)=>{if(args.Action==System.Collections.Specialized.NotifyCollectionChangedAction.Reset)resets++;};
        var delta=live.Apply(checklist.Update([first with{Owned=24},second]));
        Check.That(ReferenceEquals(nickel,live.Last()));Check.Equal("✓",live.Last().MissingText);
        Check.Equal("zinc",live.First().Key);Check.Equal(0,resets);Check.Equal(0,delta.Added+delta.Removed);Check.That(delta.Moved>0);
    }
}