forked from Blazor-Diagrams/Blazor.Diagrams
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDiagramOrderingTests.cs
197 lines (159 loc) · 5.29 KB
/
DiagramOrderingTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
using Blazor.Diagrams.Core.Models;
using FluentAssertions;
using System;
using Xunit;
namespace Blazor.Diagrams.Core.Tests;
public class DiagramOrderingTests
{
[Fact]
public void GetMinOrder_ShouldReturnZeroWhenNoModelsHaveBeenAdded()
{
// Arrange
var diagram = new TestDiagram();
// Act
var minOrder = diagram.GetMinOrder();
// Assert
minOrder.Should().Be(0);
}
[Fact]
public void GetMinOrder_ShouldReturnCorrectValue()
{
// Arrange
var diagram = new TestDiagram();
diagram.Nodes.Add(new NodeModel());
diagram.Groups.Add(new GroupModel(Array.Empty<NodeModel>()));
diagram.Links.Add(new LinkModel(diagram.Nodes[0], diagram.Groups[0]));
// Act
var minOrder = diagram.GetMinOrder();
// Assert
minOrder.Should().Be(1);
}
[Fact]
public void GetMaxOrder_ShouldReturnZeroWhenNoModelsHaveBeenAdded()
{
// Arrange
var diagram = new TestDiagram();
// Act
var maxOrder = diagram.GetMaxOrder();
// Assert
maxOrder.Should().Be(0);
}
[Fact]
public void GetMaxOrder_ShouldReturnCorrectValue()
{
// Arrange
var diagram = new TestDiagram();
diagram.Nodes.Add(new NodeModel());
diagram.Groups.Add(new GroupModel(Array.Empty<NodeModel>()));
diagram.Links.Add(new LinkModel(diagram.Nodes[0], diagram.Groups[0]));
// Act
var maxOrder = diagram.GetMaxOrder();
// Assert
maxOrder.Should().Be(3);
}
[Fact]
public void Diagram_ShouldReSortWhenModelOrderChanges()
{
// Arrange
var diagram = new TestDiagram();
var node1 = diagram.Nodes.Add(new NodeModel()); // 1
var node2 = diagram.Nodes.Add(new NodeModel()); // 2
// Act
node1.Order = 10;
// Assert
diagram.OrderedSelectables[0].Should().Be(node2);
diagram.OrderedSelectables[1].Should().Be(node1);
}
[Fact]
public void Diagram_ShouldRefreshOnceWhenModelOrderChanges()
{
// Arrange
var diagram = new TestDiagram();
var node1 = diagram.Nodes.Add(new NodeModel()); // 1
var node2 = diagram.Nodes.Add(new NodeModel()); // 2
var refreshes = 0;
diagram.Changed += () => refreshes++;
// Act
node1.Order = 10;
// Assert
refreshes.Should().Be(1);
}
[Fact]
public void SendToBack_ShouldInsertAtZeroAndFixOrders()
{
// Arrange
var diagram = new TestDiagram();
var node1 = diagram.Nodes.Add(new NodeModel());
var node2 = diagram.Nodes.Add(new NodeModel());
var node3 = diagram.Nodes.Add(new NodeModel());
// Act
diagram.SendToBack(node3);
// Assert
diagram.OrderedSelectables[0].Should().Be(node3);
diagram.OrderedSelectables[0].Order.Should().Be(1);
diagram.OrderedSelectables[1].Should().Be(node1);
diagram.OrderedSelectables[1].Order.Should().Be(2);
diagram.OrderedSelectables[2].Should().Be(node2);
diagram.OrderedSelectables[2].Order.Should().Be(3);
}
[Fact]
public void SendToFront_ShouldAddAndFixOrder()
{
// Arrange
var diagram = new TestDiagram();
var node1 = diagram.Nodes.Add(new NodeModel());
var node2 = diagram.Nodes.Add(new NodeModel());
var node3 = diagram.Nodes.Add(new NodeModel());
// Act
diagram.SendToFront(node1);
// Assert
diagram.OrderedSelectables[0].Should().Be(node2);
diagram.OrderedSelectables[0].Order.Should().Be(2);
diagram.OrderedSelectables[1].Should().Be(node3);
diagram.OrderedSelectables[1].Order.Should().Be(3);
diagram.OrderedSelectables[2].Should().Be(node1);
diagram.OrderedSelectables[2].Order.Should().Be(4);
}
[Fact]
public void Diagram_ShouldRefreshOnceWhenMultipleModelsWereRemoved()
{
// Arrange
var diagram = new TestDiagram();
var node1 = diagram.Nodes.Add(new NodeModel());
var node2 = diagram.Nodes.Add(new NodeModel());
var link = diagram.Links.Add(new LinkModel(node1, node2));
var refreshes = 0;
diagram.Changed += () => refreshes++;
// Act
diagram.Nodes.Remove(node1);
// Assert
refreshes.Should().Be(1);
}
[Fact]
public void Diagram_ShouldNotUpdateOrders_WhenSuspendSortingIsTrue()
{
// Arrange
var diagram = new TestDiagram();
diagram.SuspendSorting = true;
var node1 = diagram.Nodes.Add(new NodeModel()); // 1
var node2 = diagram.Nodes.Add(new NodeModel()); // 2
// Act
node1.Order = 10;
// Assert
diagram.OrderedSelectables[0].Should().Be(node1);
diagram.OrderedSelectables[1].Should().Be(node2);
}
[Fact]
public void RefreshOrders_ShouldSortModels()
{
// Arrange
var diagram = new TestDiagram();
var node1 = diagram.Nodes.Add(new NodeModel() { Order = 10 });
var node2 = diagram.Nodes.Add(new NodeModel() { Order = 5 });
// Act
diagram.RefreshOrders();
// Assert
diagram.OrderedSelectables[0].Should().Be(node2);
diagram.OrderedSelectables[1].Should().Be(node1);
}
}