Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit a78e312

Browse files
Improving the tests
1 parent af297a8 commit a78e312

File tree

1 file changed

+70
-37
lines changed

1 file changed

+70
-37
lines changed

src/tests/UnitTests/UI/TreeBuilderTests.cs

Lines changed: 70 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,19 @@
55
using FluentAssertions;
66
using GitHub.Unity;
77
using NCrunch.Framework;
8+
using NSubstitute;
89
using NUnit.Framework;
910
using TestUtils;
11+
using UnityEngine;
1012

1113
namespace UnitTests.UI
1214
{
1315

1416
[TestFixture, Isolated]
1517
public class TreeBuilderTests
1618
{
19+
private ILogging logger = Logging.GetLogger<TreeBuilderTests>();
20+
1721
private IEnvironment environment;
1822
private GitObjectFactory gitObjectFactory;
1923

@@ -30,10 +34,10 @@ public void CanBuildTreeForSingleItem()
3034
var gitCommitTargets = new List<GitCommitTarget>();
3135
var foldedTreeEntries = new List<string>();
3236

33-
Action<FileTreeNode> stateChangeCallback = node => { };
37+
var stateChangeCallbackListener = NSubstitute.Substitute.For<IStateChangeCallbackListener>();
3438

3539
var treeRoot = TreeBuilder.BuildTreeRoot(newGitStatusEntries, gitStatusEntries, gitCommitTargets,
36-
foldedTreeEntries, stateChangeCallback);
40+
foldedTreeEntries, stateChangeCallbackListener.StateChangeCallback);
3741

3842
var children = treeRoot.Children.ToArray();
3943
children.Length.Should().Be(1);
@@ -45,7 +49,6 @@ public void CanBuildTreeForSingleItem()
4549
children[0].Path.Should().Be("file1.txt");
4650
children[0].RepositoryPath.Should().Be("file1.txt");
4751
children[0].State.Should().Be(CommitState.None);
48-
children[0].State.Should().Be(CommitState.None);
4952
children[0].Target.Should().Be(gitCommitTargets[0]);
5053

5154
children[0].Children.Should().BeEmpty();
@@ -64,10 +67,10 @@ public void CanBuildTreeForSingleItemWhenProjectNestedInRepo()
6467
var gitCommitTargets = new List<GitCommitTarget>();
6568
var foldedTreeEntries = new List<string>();
6669

67-
Action<FileTreeNode> stateChangeCallback = node => { };
70+
var stateChangeCallbackListener = NSubstitute.Substitute.For<IStateChangeCallbackListener>();
6871

6972
var treeRoot = TreeBuilder.BuildTreeRoot(newGitStatusEntries, gitStatusEntries, gitCommitTargets,
70-
foldedTreeEntries, stateChangeCallback);
73+
foldedTreeEntries, stateChangeCallbackListener.StateChangeCallback);
7174

7275
var children = treeRoot.Children.ToArray();
7376
children.Length.Should().Be(1);
@@ -79,7 +82,6 @@ public void CanBuildTreeForSingleItemWhenProjectNestedInRepo()
7982
children[0].Path.Should().Be("file1.txt");
8083
children[0].RepositoryPath.Should().Be(@"Project\file1.txt");
8184
children[0].State.Should().Be(CommitState.None);
82-
children[0].State.Should().Be(CommitState.None);
8385
children[0].Target.Should().Be(gitCommitTargets[0]);
8486

8587
children[0].Children.Should().BeEmpty();
@@ -98,10 +100,10 @@ public void CanBuildTreeForSingleItemInFolder()
98100
var gitCommitTargets = new List<GitCommitTarget>();
99101
var foldedTreeEntries = new List<string>();
100102

101-
Action<FileTreeNode> stateChangeCallback = node => { };
103+
var stateChangeCallbackListener = NSubstitute.Substitute.For<IStateChangeCallbackListener>();
102104

103105
var treeRoot = TreeBuilder.BuildTreeRoot(newGitStatusEntries, gitStatusEntries, gitCommitTargets,
104-
foldedTreeEntries, stateChangeCallback);
106+
foldedTreeEntries, stateChangeCallbackListener.StateChangeCallback);
105107

106108
var children = treeRoot.Children.ToArray();
107109
children.Length.Should().Be(1);
@@ -113,7 +115,6 @@ public void CanBuildTreeForSingleItemInFolder()
113115
children[0].Path.Should().Be("file1.txt");
114116
children[0].RepositoryPath.Should().Be(@"folder\file1.txt");
115117
children[0].State.Should().Be(CommitState.None);
116-
children[0].State.Should().Be(CommitState.None);
117118
children[0].Target.Should().Be(gitCommitTargets[0]);
118119

119120
children[0].Children.Should().BeEmpty();
@@ -132,10 +133,10 @@ public void CanBuildTreeForSingleItemInFolderWhenProjectNestedInRepo()
132133
var gitCommitTargets = new List<GitCommitTarget>();
133134
var foldedTreeEntries = new List<string>();
134135

135-
Action<FileTreeNode> stateChangeCallback = node => { };
136+
var stateChangeCallbackListener = NSubstitute.Substitute.For<IStateChangeCallbackListener>();
136137

137138
var treeRoot = TreeBuilder.BuildTreeRoot(newGitStatusEntries, gitStatusEntries, gitCommitTargets,
138-
foldedTreeEntries, stateChangeCallback);
139+
foldedTreeEntries, stateChangeCallbackListener.StateChangeCallback);
139140

140141
var children = treeRoot.Children.ToArray();
141142
children.Length.Should().Be(1);
@@ -147,7 +148,6 @@ public void CanBuildTreeForSingleItemInFolderWhenProjectNestedInRepo()
147148
children[0].Path.Should().Be("file1.txt");
148149
children[0].RepositoryPath.Should().Be(@"Project\folder\file1.txt");
149150
children[0].State.Should().Be(CommitState.None);
150-
children[0].State.Should().Be(CommitState.None);
151151
children[0].Target.Should().Be(gitCommitTargets[0]);
152152

153153
children[0].Children.Should().BeEmpty();
@@ -167,10 +167,10 @@ public void CanBuildTreeForMultipleSiblings()
167167
var gitCommitTargets = new List<GitCommitTarget>();
168168
var foldedTreeEntries = new List<string>();
169169

170-
Action<FileTreeNode> stateChangeCallback = node => { };
170+
var stateChangeCallbackListener = NSubstitute.Substitute.For<IStateChangeCallbackListener>();
171171

172172
var treeRoot = TreeBuilder.BuildTreeRoot(newGitStatusEntries, gitStatusEntries, gitCommitTargets,
173-
foldedTreeEntries, stateChangeCallback);
173+
foldedTreeEntries, stateChangeCallbackListener.StateChangeCallback);
174174

175175
var children = treeRoot.Children.ToArray();
176176
children.Length.Should().Be(2);
@@ -182,7 +182,6 @@ public void CanBuildTreeForMultipleSiblings()
182182
children[0].Path.Should().Be("file1.txt");
183183
children[0].RepositoryPath.Should().Be("file1.txt");
184184
children[0].State.Should().Be(CommitState.None);
185-
children[0].State.Should().Be(CommitState.None);
186185
children[0].Target.Should().Be(gitCommitTargets[0]);
187186

188187
children[0].Children.Should().BeEmpty();
@@ -192,7 +191,6 @@ public void CanBuildTreeForMultipleSiblings()
192191
children[1].Path.Should().Be("file2.txt");
193192
children[1].RepositoryPath.Should().Be("file2.txt");
194193
children[1].State.Should().Be(CommitState.None);
195-
children[1].State.Should().Be(CommitState.None);
196194
children[1].Target.Should().Be(gitCommitTargets[1]);
197195

198196
children[1].Children.Should().BeEmpty();
@@ -212,10 +210,10 @@ public void CanBuildTreeForMultipleSiblingsWhenProjectNestedInRepo()
212210
var gitCommitTargets = new List<GitCommitTarget>();
213211
var foldedTreeEntries = new List<string>();
214212

215-
Action<FileTreeNode> stateChangeCallback = node => { };
213+
var stateChangeCallbackListener = NSubstitute.Substitute.For<IStateChangeCallbackListener>();
216214

217215
var treeRoot = TreeBuilder.BuildTreeRoot(newGitStatusEntries, gitStatusEntries, gitCommitTargets,
218-
foldedTreeEntries, stateChangeCallback);
216+
foldedTreeEntries, stateChangeCallbackListener.StateChangeCallback);
219217

220218
var children = treeRoot.Children.ToArray();
221219
children.Length.Should().Be(2);
@@ -227,7 +225,6 @@ public void CanBuildTreeForMultipleSiblingsWhenProjectNestedInRepo()
227225
children[0].Path.Should().Be("file1.txt");
228226
children[0].RepositoryPath.Should().Be(@"Project\file1.txt");
229227
children[0].State.Should().Be(CommitState.None);
230-
children[0].State.Should().Be(CommitState.None);
231228
children[0].Target.Should().Be(gitCommitTargets[0]);
232229

233230
children[0].Children.Should().BeEmpty();
@@ -237,7 +234,6 @@ public void CanBuildTreeForMultipleSiblingsWhenProjectNestedInRepo()
237234
children[1].Path.Should().Be("file2.txt");
238235
children[1].RepositoryPath.Should().Be(@"Project\file2.txt");
239236
children[1].State.Should().Be(CommitState.None);
240-
children[1].State.Should().Be(CommitState.None);
241237
children[1].Target.Should().Be(gitCommitTargets[1]);
242238

243239
children[1].Children.Should().BeEmpty();
@@ -260,10 +256,10 @@ public void CanBuildTreeForHierarchy()
260256
var gitCommitTargets = new List<GitCommitTarget>();
261257
var foldedTreeEntries = new List<string>();
262258

263-
Action<FileTreeNode> stateChangeCallback = node => { };
259+
var stateChangeCallbackListener = NSubstitute.Substitute.For<IStateChangeCallbackListener>();
264260

265261
var treeRoot = TreeBuilder.BuildTreeRoot(newGitStatusEntries, gitStatusEntries, gitCommitTargets,
266-
foldedTreeEntries, stateChangeCallback);
262+
foldedTreeEntries, stateChangeCallbackListener.StateChangeCallback);
267263

268264
var children = treeRoot.Children.ToArray();
269265
children.Length.Should().Be(3);
@@ -275,7 +271,6 @@ public void CanBuildTreeForHierarchy()
275271
children[0].Path.Should().Be("file1.txt");
276272
children[0].RepositoryPath.Should().Be("file1.txt");
277273
children[0].State.Should().Be(CommitState.None);
278-
children[0].State.Should().Be(CommitState.None);
279274
children[0].Target.Should().Be(gitCommitTargets[0]);
280275

281276
children[0].Children.Should().BeEmpty();
@@ -285,15 +280,13 @@ public void CanBuildTreeForHierarchy()
285280
children[1].Path.Should().Be("folder1");
286281
children[1].RepositoryPath.Should().Be("folder1");
287282
children[1].State.Should().Be(CommitState.None);
288-
children[1].State.Should().Be(CommitState.None);
289283
children[1].Target.Should().BeNull();
290284

291285
children[2].Label.Should().Be("folder2");
292286
children[2].Open.Should().BeTrue();
293287
children[2].Path.Should().Be("folder2");
294288
children[2].RepositoryPath.Should().Be("folder2");
295289
children[2].State.Should().Be(CommitState.None);
296-
children[2].State.Should().Be(CommitState.None);
297290
children[2].Target.Should().BeNull();
298291

299292
var folder1Children = children[1].Children.ToArray();
@@ -304,7 +297,6 @@ public void CanBuildTreeForHierarchy()
304297
folder1Children[0].Path.Should().Be(@"folder1\file2.txt");
305298
folder1Children[0].RepositoryPath.Should().Be(@"folder1\file2.txt");
306299
folder1Children[0].State.Should().Be(CommitState.None);
307-
folder1Children[0].State.Should().Be(CommitState.None);
308300
folder1Children[0].Target.Should().Be(gitCommitTargets[1]);
309301

310302
folder1Children[0].Children.Should().BeEmpty();
@@ -314,7 +306,6 @@ public void CanBuildTreeForHierarchy()
314306
folder1Children[1].Path.Should().Be(@"folder1\file3.txt");
315307
folder1Children[1].RepositoryPath.Should().Be(@"folder1\file3.txt");
316308
folder1Children[1].State.Should().Be(CommitState.None);
317-
folder1Children[1].State.Should().Be(CommitState.None);
318309
folder1Children[1].Target.Should().Be(gitCommitTargets[2]);
319310

320311
folder1Children[1].Children.Should().BeEmpty();
@@ -327,7 +318,6 @@ public void CanBuildTreeForHierarchy()
327318
folder2Children[0].Path.Should().Be(@"folder2\file4.txt");
328319
folder2Children[0].RepositoryPath.Should().Be(@"folder2\file4.txt");
329320
folder2Children[0].State.Should().Be(CommitState.None);
330-
folder2Children[0].State.Should().Be(CommitState.None);
331321
folder2Children[0].Target.Should().Be(gitCommitTargets[3]);
332322

333323
folder2Children[0].Children.Should().BeEmpty();
@@ -337,7 +327,6 @@ public void CanBuildTreeForHierarchy()
337327
folder2Children[1].Path.Should().Be(@"folder2\file5.txt");
338328
folder2Children[1].RepositoryPath.Should().Be(@"folder2\file5.txt");
339329
folder2Children[1].State.Should().Be(CommitState.None);
340-
folder2Children[1].State.Should().Be(CommitState.None);
341330
folder2Children[1].Target.Should().Be(gitCommitTargets[4]);
342331

343332
folder2Children[1].Children.Should().BeEmpty();
@@ -357,10 +346,10 @@ public void CanBuildTreeForHierarchyWhenProjectNestedInRepo()
357346
var gitCommitTargets = new List<GitCommitTarget>();
358347
var foldedTreeEntries = new List<string>();
359348

360-
Action<FileTreeNode> stateChangeCallback = node => { };
349+
var stateChangeCallbackListener = NSubstitute.Substitute.For<IStateChangeCallbackListener>();
361350

362351
var treeRoot = TreeBuilder.BuildTreeRoot(newGitStatusEntries, gitStatusEntries, gitCommitTargets,
363-
foldedTreeEntries, stateChangeCallback);
352+
foldedTreeEntries, stateChangeCallbackListener.StateChangeCallback);
364353

365354
var children = treeRoot.Children.ToArray();
366355
children.Length.Should().Be(2);
@@ -372,7 +361,6 @@ public void CanBuildTreeForHierarchyWhenProjectNestedInRepo()
372361
children[0].RepositoryPath.Should().Be(@"Project\file1.txt");
373362
children[0].Open.Should().BeTrue();
374363
children[0].State.Should().Be(CommitState.None);
375-
children[0].State.Should().Be(CommitState.None);
376364
children[0].Target.Should().Be(gitCommitTargets[0]);
377365

378366
children[0].Children.Should().BeEmpty();
@@ -382,7 +370,6 @@ public void CanBuildTreeForHierarchyWhenProjectNestedInRepo()
382370
children[1].RepositoryPath.Should().Be(@"Project\folder");
383371
children[1].Open.Should().BeTrue();
384372
children[1].State.Should().Be(CommitState.None);
385-
children[1].State.Should().Be(CommitState.None);
386373
children[1].Target.Should().BeNull();
387374

388375
var folderChildren = children[1].Children.ToArray();
@@ -393,7 +380,6 @@ public void CanBuildTreeForHierarchyWhenProjectNestedInRepo()
393380
folderChildren[0].Path.Should().Be(@"folder\file2.txt");
394381
folderChildren[0].RepositoryPath.Should().Be(@"Project\folder\file2.txt");
395382
folderChildren[0].State.Should().Be(CommitState.None);
396-
folderChildren[0].State.Should().Be(CommitState.None);
397383
folderChildren[0].Target.Should().Be(gitCommitTargets[1]);
398384

399385
folderChildren[0].Children.Should().BeEmpty();
@@ -413,10 +399,10 @@ public void CanBuildTreeForItemAndMetafile()
413399
var gitCommitTargets = new List<GitCommitTarget>();
414400
var foldedTreeEntries = new List<string>();
415401

416-
Action<FileTreeNode> stateChangeCallback = node => { };
402+
var stateChangeCallbackListener = NSubstitute.Substitute.For<IStateChangeCallbackListener>();
417403

418404
var treeRoot = TreeBuilder.BuildTreeRoot(newGitStatusEntries, gitStatusEntries, gitCommitTargets,
419-
foldedTreeEntries, stateChangeCallback);
405+
foldedTreeEntries, stateChangeCallbackListener.StateChangeCallback);
420406

421407
var children = treeRoot.Children.ToArray();
422408
children.Length.Should().Be(1);
@@ -428,7 +414,6 @@ public void CanBuildTreeForItemAndMetafile()
428414
children[0].Path.Should().Be("file1.txt");
429415
children[0].RepositoryPath.Should().Be("file1.txt");
430416
children[0].State.Should().Be(CommitState.None);
431-
children[0].State.Should().Be(CommitState.None);
432417
children[0].Target.Should().Be(gitCommitTargets[0]);
433418

434419
var fileChildren = children[0].Children.ToArray();
@@ -448,6 +433,49 @@ public void CanBuildTreeForItemAndMetafile()
448433
fileChildren[0].Children.Should().BeEmpty();
449434
}
450435

436+
[Test]
437+
public void CanUpdateTreeForSingleItem()
438+
{
439+
InitializeEnvironment(@"c:\Project", @"c:\Project");
440+
441+
var gitStatusEntriesGen0 = new List<GitStatusEntry>();
442+
443+
var gitStatusEntriesGen1 = new List<GitStatusEntry>() {
444+
gitObjectFactory.CreateGitStatusEntry("file1.txt", GitFileStatus.Modified)
445+
};
446+
447+
var gitCommitTargets = new List<GitCommitTarget>();
448+
var foldedTreeEntries = new List<string>();
449+
450+
var stateChangeCallbackListener = NSubstitute.Substitute.For<IStateChangeCallbackListener>();
451+
452+
var treeRootGen1 = TreeBuilder.BuildTreeRoot(gitStatusEntriesGen1, gitStatusEntriesGen0, gitCommitTargets,
453+
foldedTreeEntries, stateChangeCallbackListener.StateChangeCallback);
454+
455+
var fileTreeNodesGen1 = treeRootGen1.Children.ToArray();
456+
457+
fileTreeNodesGen1[0].Label.Should().Be("file1.txt");
458+
fileTreeNodesGen1[0].Open.Should().BeTrue();
459+
fileTreeNodesGen1[0].Path.Should().Be("file1.txt");
460+
fileTreeNodesGen1[0].RepositoryPath.Should().Be("file1.txt");
461+
fileTreeNodesGen1[0].State.Should().Be(CommitState.None);
462+
fileTreeNodesGen1[0].Target.Should().Be(gitCommitTargets[0]);
463+
fileTreeNodesGen1[0].Children.Should().BeEmpty();
464+
465+
fileTreeNodesGen1[0].State = CommitState.All;
466+
467+
stateChangeCallbackListener.ReceivedWithAnyArgs(1).StateChangeCallback(Arg.Any<FileTreeNode>());
468+
stateChangeCallbackListener.ClearReceivedCalls();
469+
470+
var gitStatusEntriesGen2 = new List<GitStatusEntry>() {
471+
gitObjectFactory.CreateGitStatusEntry("file1.txt", GitFileStatus.Modified),
472+
gitObjectFactory.CreateGitStatusEntry("file2.txt", GitFileStatus.Modified)
473+
};
474+
475+
var treeRootGen2 = TreeBuilder.BuildTreeRoot(gitStatusEntriesGen2, gitStatusEntriesGen1, gitCommitTargets,
476+
foldedTreeEntries, stateChangeCallbackListener.StateChangeCallback);
477+
}
478+
451479
private void InitializeEnvironment(string repositoryPath, string projectPath)
452480
{
453481
var substituteFactory = new SubstituteFactory();
@@ -466,4 +494,9 @@ private void InitializeEnvironment(string repositoryPath, string projectPath)
466494
gitObjectFactory = new GitObjectFactory(environment);
467495
}
468496
}
497+
498+
interface IStateChangeCallbackListener
499+
{
500+
void StateChangeCallback(FileTreeNode fileTreeNode);
501+
}
469502
}

0 commit comments

Comments
 (0)