/
docNemo
/
clothes-graph
Обзор
Документация
Войти
/
docNemo
/
clothes-graph
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
tests/ClothesGraph.App.Tests/DraftViewModelTests.cs
86 строк
3 KB
docNemo
Запрос на слияние 'interface-to-spec' (
#1
) из interface-to-spec в main
09 авг 2026, 20:28
Верифицирован
09 авг 2026, 20:28
1bbc436
Код
Авторство
О чём код?
using ClothesGraph.App.ViewModels; using ClothesGraph.Model; using ClothesGraph.Model.Drafting; using Xunit; namespace ClothesGraph.App.Tests; /// <summary> /// Проверка чертёжной вкладки. /// </summary> /// <remarks> /// Слой представления проверяется отдельно от модели намеренно: способность /// может быть полностью готова в модели и при этом недостижима для человека, /// а разница видна только здесь. /// </remarks> public class DraftViewModelTests { /// <summary>Документ из двух точек, где вторая зависит от первой.</summary> private static (PatternDocument Document, NodeId Origin, NodeId Dependent) Chain() { var document = new PatternDocument("46"); var origin = document.Draft.Add(new FreePoint(NodeId.New(), "A", document.ParseFormula("0"), document.ParseFormula("0"))).Id; var dependent = document.Draft.Add(new OffsetPoint(NodeId.New(), "Б", origin, document.ParseFormula("10"), document.ParseFormula("0"))).Id; return (document, origin, dependent); } [Fact] public void Удаление_построения_с_зависимыми_требует_подтверждения() { var (document, origin, _) = Chain(); var model = new DraftViewModel(document) { SelectedNode = origin }; model.DeleteSelectedCommand.Execute(null); Assert.True(document.Draft.Contains(origin)); Assert.Contains("Б", model.EditorError); model.DeleteSelectedCommand.Execute(null); Assert.False(document.Draft.Contains(origin)); } /// <summary> /// Отложенное подтверждение не переживает уход к другому построению. /// </summary> /// <remarks> /// Признак ожидаемого подтверждения раньше не сбрасывался при смене /// выбора. Пользователь запрашивал удаление, отказывался, занимался другим /// построением, возвращался к прежнему — и оно удалялось вместе с /// зависимыми сразу, причём предупреждение к тому времени уже пропадало /// с экрана. /// </remarks> [Fact] public void Возврат_к_отложенному_удалению_требует_подтверждения_заново() { var (document, origin, dependent) = Chain(); var model = new DraftViewModel(document) { SelectedNode = origin }; model.DeleteSelectedCommand.Execute(null); Assert.True(document.Draft.Contains(origin)); model.SelectedNode = dependent; model.SelectedNode = origin; model.DeleteSelectedCommand.Execute(null); Assert.True(document.Draft.Contains(origin)); Assert.Contains("Б", model.EditorError); } [Fact] public void Удаление_построения_без_зависимых_идёт_без_подтверждения() { var (document, _, dependent) = Chain(); var model = new DraftViewModel(document) { SelectedNode = dependent }; model.DeleteSelectedCommand.Execute(null); Assert.False(document.Draft.Contains(dependent)); } }