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

Commit 6f91f16

Browse files
Making RepositoryManagerTests more stable by attaching a listener before the RepositoryManager is initialized
1 parent 37c3706 commit 6f91f16

File tree

2 files changed

+84
-41
lines changed

2 files changed

+84
-41
lines changed

src/tests/IntegrationTests/BaseGitEnvironmentTest.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Linq;
23
using System.Threading;
34
using GitHub.Unity;
@@ -9,7 +10,7 @@ namespace IntegrationTests
910
class BaseGitEnvironmentTest : BaseGitRepoTest
1011
{
1112
protected async Task<IEnvironment> Initialize(NPath repoPath, NPath environmentPath = null,
12-
bool enableEnvironmentTrace = false, bool initializeRepository = true)
13+
bool enableEnvironmentTrace = false, bool initializeRepository = true, Action<RepositoryManager> onRepositoryManagerCreated = null)
1314
{
1415
TaskManager = new TaskManager();
1516
SyncContext = new ThreadSynchronizationContext(TaskManager.Token);
@@ -31,7 +32,10 @@ protected async Task<IEnvironment> Initialize(NPath repoPath, NPath environmentP
3132

3233
GitClient = new GitClient(Environment, ProcessManager, TaskManager);
3334

34-
RepositoryManager = GitHub.Unity.RepositoryManager.CreateInstance(Platform, TaskManager, GitClient, repoPath);
35+
var repositoryManager = GitHub.Unity.RepositoryManager.CreateInstance(Platform, TaskManager, GitClient, repoPath);
36+
onRepositoryManagerCreated?.Invoke(repositoryManager);
37+
38+
RepositoryManager = repositoryManager;
3539
RepositoryManager.Initialize();
3640

3741
if (initializeRepository)

src/tests/IntegrationTests/Events/RepositoryManagerTests.cs

Lines changed: 78 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -23,32 +23,35 @@ public override void OnSetup()
2323
}
2424

2525
[Test]
26-
public async Task ShouldDoNothingOnInitialize()
26+
public async Task ShouldPerformBasicInitialize()
2727
{
28-
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false);
29-
3028
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
31-
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
3229

33-
RepositoryManager.WaitForEvents();
34-
repositoryManagerEvents.WaitForNotBusy();
30+
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false,
31+
onRepositoryManagerCreated: manager => {
32+
repositoryManagerListener.AttachListener(manager, repositoryManagerEvents);
33+
});
3534

3635
repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool);
37-
repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote);
36+
repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote);
3837
repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus);
3938
repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks);
4039
repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs);
41-
repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary);
42-
repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary);
40+
repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary);
41+
repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary);
4342
}
4443

4544
[Test]
4645
public async Task ShouldDetectFileChanges()
4746
{
48-
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false);
49-
5047
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
51-
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
48+
49+
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false,
50+
onRepositoryManagerCreated: manager => {
51+
repositoryManagerListener.AttachListener(manager, repositoryManagerEvents);
52+
});
53+
54+
repositoryManagerListener.ClearReceivedCalls();
5255

5356
var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt");
5457
foobarTxt.WriteAllText("foobar");
@@ -72,10 +75,14 @@ public async Task ShouldDetectFileChanges()
7275
[Test]
7376
public async Task ShouldAddAndCommitFiles()
7477
{
75-
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false);
76-
7778
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
78-
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
79+
80+
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false,
81+
onRepositoryManagerCreated: manager => {
82+
repositoryManagerListener.AttachListener(manager, repositoryManagerEvents);
83+
});
84+
85+
repositoryManagerListener.ClearReceivedCalls();
7986

8087
var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt");
8188
foobarTxt.WriteAllText("foobar");
@@ -125,10 +132,14 @@ await RepositoryManager
125132
[Test]
126133
public async Task ShouldAddAndCommitAllFiles()
127134
{
128-
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false);
129-
130135
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
131-
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
136+
137+
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false,
138+
onRepositoryManagerCreated: manager => {
139+
repositoryManagerListener.AttachListener(manager, repositoryManagerEvents);
140+
});
141+
142+
repositoryManagerListener.ClearReceivedCalls();
132143

133144
var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt");
134145
foobarTxt.WriteAllText("foobar");
@@ -177,10 +188,14 @@ await RepositoryManager
177188
[Test]
178189
public async Task ShouldDetectBranchChange()
179190
{
180-
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false);
181-
182191
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
183-
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
192+
193+
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false,
194+
onRepositoryManagerCreated: manager => {
195+
repositoryManagerListener.AttachListener(manager, repositoryManagerEvents);
196+
});
197+
198+
repositoryManagerListener.ClearReceivedCalls();
184199

185200
await RepositoryManager.SwitchBranch("feature/document").StartAsAsync();
186201
await TaskManager.Wait();
@@ -202,10 +217,14 @@ public async Task ShouldDetectBranchChange()
202217
[Test]
203218
public async Task ShouldDetectBranchDelete()
204219
{
205-
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false);
206-
207220
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
208-
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
221+
222+
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false,
223+
onRepositoryManagerCreated: manager => {
224+
repositoryManagerListener.AttachListener(manager, repositoryManagerEvents);
225+
});
226+
227+
repositoryManagerListener.ClearReceivedCalls();
209228

210229
await RepositoryManager.DeleteBranch("feature/document", true).StartAsAsync();
211230
await TaskManager.Wait();
@@ -229,10 +248,14 @@ public async Task ShouldDetectBranchDelete()
229248
[Test]
230249
public async Task ShouldDetectBranchCreate()
231250
{
232-
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false);
233-
234251
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
235-
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
252+
253+
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false,
254+
onRepositoryManagerCreated: manager => {
255+
repositoryManagerListener.AttachListener(manager, repositoryManagerEvents);
256+
});
257+
258+
repositoryManagerListener.ClearReceivedCalls();
236259

237260
var createdBranch1 = "feature/document2";
238261
await RepositoryManager.CreateBranch(createdBranch1, "feature/document").StartAsAsync();
@@ -274,10 +297,14 @@ public async Task ShouldDetectBranchCreate()
274297
[Test]
275298
public async Task ShouldDetectChangesToRemotes()
276299
{
277-
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false);
278-
279300
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
280-
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
301+
302+
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false,
303+
onRepositoryManagerCreated: manager => {
304+
repositoryManagerListener.AttachListener(manager, repositoryManagerEvents);
305+
});
306+
307+
repositoryManagerListener.ClearReceivedCalls();
281308

282309
await RepositoryManager.RemoteRemove("origin").StartAsAsync();
283310
await TaskManager.Wait();
@@ -322,10 +349,14 @@ public async Task ShouldDetectChangesToRemotes()
322349
[Test]
323350
public async Task ShouldDetectChangesToRemotesWhenSwitchingBranches()
324351
{
325-
await Initialize(TestRepoMasterTwoRemotes, initializeRepository: false);
326-
327352
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
328-
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
353+
354+
await Initialize(TestRepoMasterTwoRemotes, initializeRepository: false,
355+
onRepositoryManagerCreated: manager => {
356+
repositoryManagerListener.AttachListener(manager, repositoryManagerEvents);
357+
});
358+
359+
repositoryManagerListener.ClearReceivedCalls();
329360

330361
await RepositoryManager.CreateBranch("branch2", "another/master")
331362
.StartAsAsync();
@@ -370,10 +401,14 @@ await RepositoryManager.SwitchBranch("branch2")
370401
[Test]
371402
public async Task ShouldDetectGitPull()
372403
{
373-
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false);
374-
375404
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
376-
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
405+
406+
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false,
407+
onRepositoryManagerCreated: manager => {
408+
repositoryManagerListener.AttachListener(manager, repositoryManagerEvents);
409+
});
410+
411+
repositoryManagerListener.ClearReceivedCalls();
377412

378413
await RepositoryManager.Pull("origin", "master").StartAsAsync();
379414
await TaskManager.Wait();
@@ -395,10 +430,14 @@ public async Task ShouldDetectGitPull()
395430
[Test]
396431
public async Task ShouldDetectGitFetch()
397432
{
398-
await Initialize(TestRepoMasterCleanUnsynchronized, initializeRepository: false);
399-
400433
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
401-
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
434+
435+
await Initialize(TestRepoMasterCleanUnsynchronized, initializeRepository: false,
436+
onRepositoryManagerCreated: manager => {
437+
repositoryManagerListener.AttachListener(manager, repositoryManagerEvents);
438+
});
439+
440+
repositoryManagerListener.ClearReceivedCalls();
402441

403442
await RepositoryManager.Fetch("origin").StartAsAsync();
404443
await TaskManager.Wait();

0 commit comments

Comments
 (0)