Skip to content

Commit 21374a6

Browse files
committed
Unsynced commits VM tests
1 parent 98f7835 commit 21374a6

File tree

2 files changed

+259
-0
lines changed

2 files changed

+259
-0
lines changed

RubberduckTests/RubberduckTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@
138138
<Compile Include="SourceControl\BranchesViewModelTests.cs" />
139139
<Compile Include="SourceControl\ChangesViewModelTests.cs" />
140140
<Compile Include="SourceControl\SourceControlTests.cs" />
141+
<Compile Include="SourceControl\UnsyncedCommitsViewModelTests.cs" />
141142
<Compile Include="StringExtensionsTests.cs" />
142143
<Compile Include="TodoControllerTests.cs" />
143144
<Compile Include="Properties\AssemblyInfo.cs" />
Lines changed: 258 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,258 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using Microsoft.VisualStudio.TestTools.UnitTesting;
4+
using Moq;
5+
using Rubberduck.SourceControl;
6+
using Rubberduck.UI.SourceControl;
7+
8+
namespace RubberduckTests.SourceControl
9+
{
10+
[TestClass]
11+
public class UnsyncedCommitsViewModelTests
12+
{
13+
private Mock<ISourceControlProvider> _provider;
14+
15+
private IBranch _initialBranch;
16+
17+
[TestInitialize]
18+
public void Intialize()
19+
{
20+
var masterRemote = new Mock<LibGit2Sharp.Branch>();
21+
masterRemote.SetupGet(git => git.Tip).Returns(new Mock<LibGit2Sharp.Commit>().Object);
22+
masterRemote.SetupGet(git => git.FriendlyName).Returns("master");
23+
24+
_initialBranch = new Branch("master", "refs/Heads/master", false, true, masterRemote.Object);
25+
26+
var incoming = new List<ICommit> { new Commit("b9001d22", "Christopher J. McClellan", "Fixed the bazzle.") };
27+
var outgoing = new List<ICommit> { new Commit("6129ebf7", "Mathieu Guindon", "Grammar fix.") };
28+
29+
_provider = new Mock<ISourceControlProvider>();
30+
_provider.SetupGet(git => git.CurrentBranch).Returns(_initialBranch);
31+
_provider.SetupGet(git => git.UnsyncedRemoteCommits).Returns(incoming);
32+
_provider.SetupGet(git => git.UnsyncedLocalCommits).Returns(outgoing);
33+
}
34+
35+
[TestMethod]
36+
public void UnsyncedPresenter_AfterRefresh_ViewBranchIsCurrentBranch()
37+
{
38+
//Arrange
39+
var vm = new UnsyncedCommitsViewViewModel
40+
{
41+
Provider = _provider.Object
42+
};
43+
44+
//Assert
45+
Assert.AreEqual(_initialBranch.Name, vm.CurrentBranch);
46+
}
47+
48+
[TestMethod]
49+
public void UnsyncedPresenter_AfterRefresh_IncomingCommitsAreDisplayed()
50+
{
51+
//Arrange
52+
var vm = new UnsyncedCommitsViewViewModel
53+
{
54+
Provider = _provider.Object
55+
};
56+
57+
//Assert
58+
CollectionAssert.AreEquivalent(_provider.Object.UnsyncedRemoteCommits.ToList(), vm.IncomingCommits.ToList());
59+
}
60+
61+
[TestMethod]
62+
public void UnsyncedPresenter_AfterRefresh_OutgoingCommitsAreDisplayed()
63+
{
64+
//Arrange
65+
var vm = new UnsyncedCommitsViewViewModel
66+
{
67+
Provider = _provider.Object
68+
};
69+
70+
//Assert
71+
CollectionAssert.AreEquivalent(_provider.Object.UnsyncedLocalCommits.ToList(), vm.OutgoingCommits.ToList());
72+
}
73+
74+
[TestMethod]
75+
public void UnsyncedPresenter_OnFetch_ProviderFetches()
76+
{
77+
//Arrange
78+
var vm = new UnsyncedCommitsViewViewModel
79+
{
80+
Provider = _provider.Object
81+
};
82+
83+
//Act - Simulate Fetch click
84+
vm.FetchCommitsCommand.Execute(null);
85+
86+
//Assert
87+
_provider.Verify(git => git.Fetch(It.IsAny<string>()));
88+
}
89+
90+
[TestMethod]
91+
public void UnsyncedPresenter_AfterFetch_IncomingCommitsRefreshes()
92+
{
93+
//Arrange
94+
var vm = new UnsyncedCommitsViewViewModel
95+
{
96+
Provider = _provider.Object
97+
};
98+
99+
_provider.SetupGet(git => git.UnsyncedRemoteCommits)
100+
.Returns(new List<ICommit> { new Commit("1111111", "Hosch250", "Fixed the foobarred bazzer.") });
101+
102+
//Act - Simulate Fetch click
103+
vm.FetchCommitsCommand.Execute(null);
104+
105+
//Assert
106+
CollectionAssert.AreEquivalent(_provider.Object.UnsyncedRemoteCommits.ToList(), vm.IncomingCommits.ToList());
107+
}
108+
109+
[TestMethod]
110+
public void UnsyncedPresenter_OnPull_ProviderPulls()
111+
{
112+
//Arrange
113+
var vm = new UnsyncedCommitsViewViewModel
114+
{
115+
Provider = _provider.Object
116+
};
117+
118+
//Act
119+
vm.PullCommitsCommand.Execute(null);
120+
121+
//Assert
122+
_provider.Verify(git => git.Pull());
123+
}
124+
125+
[TestMethod]
126+
public void UnsyncedPresenter_OnPush_ProviderPushes()
127+
{
128+
//Arrange
129+
var vm = new UnsyncedCommitsViewViewModel
130+
{
131+
Provider = _provider.Object
132+
};
133+
134+
//Act
135+
vm.PushCommitsCommand.Execute(null);
136+
137+
//Assert
138+
_provider.Verify(git => git.Push());
139+
}
140+
141+
[TestMethod]
142+
public void UnsyncedPresenter_OnSync_ProviderPullsThenPushes()
143+
{
144+
//Arrange
145+
var vm = new UnsyncedCommitsViewViewModel
146+
{
147+
Provider = _provider.Object
148+
};
149+
150+
//Act
151+
vm.SyncCommitsCommand.Execute(null);
152+
153+
//Assert
154+
_provider.Verify(git => git.Pull());
155+
_provider.Verify(git => git.Push());
156+
}
157+
158+
[TestMethod]
159+
public void UnsyncedPresenter_WhenFetchFails_ActionFailedEventIsRaised()
160+
{
161+
//arrange
162+
var wasRaised = false;
163+
var vm = new UnsyncedCommitsViewViewModel
164+
{
165+
Provider = _provider.Object
166+
};
167+
168+
_provider.Setup(p => p.Fetch(It.IsAny<string>()))
169+
.Throws(
170+
new SourceControlException("A source control exception was thrown.",
171+
new LibGit2Sharp.LibGit2SharpException("With an inner libgit2sharp exception"))
172+
);
173+
174+
vm.ErrorThrown += (sender, error) => wasRaised = true;
175+
176+
//act
177+
vm.FetchCommitsCommand.Execute(null);
178+
179+
//assert
180+
Assert.IsTrue(wasRaised, "ActionFailedEvent was not raised.");
181+
}
182+
183+
[TestMethod]
184+
public void UnsyncedPresenter_WhenPushFails_ActionFailedEventIsRaised()
185+
{
186+
//arrange
187+
var wasRaised = false;
188+
var vm = new UnsyncedCommitsViewViewModel
189+
{
190+
Provider = _provider.Object
191+
};
192+
193+
_provider.Setup(p => p.Push())
194+
.Throws(
195+
new SourceControlException("A source control exception was thrown.",
196+
new LibGit2Sharp.LibGit2SharpException("With an inner libgit2sharp exception"))
197+
);
198+
199+
vm.ErrorThrown += (sender, error) => wasRaised = true;
200+
201+
//act
202+
vm.PushCommitsCommand.Execute(null);
203+
204+
//assert
205+
Assert.IsTrue(wasRaised, "ActionFailedEvent was not raised.");
206+
}
207+
208+
[TestMethod]
209+
public void UnsyncedPresenter_WhenPullFails_ActionFailedEventIsRaised()
210+
{
211+
//arrange
212+
var wasRaised = false;
213+
var vm = new UnsyncedCommitsViewViewModel
214+
{
215+
Provider = _provider.Object
216+
};
217+
218+
_provider.Setup(p => p.Pull())
219+
.Throws(
220+
new SourceControlException("A source control exception was thrown.",
221+
new LibGit2Sharp.LibGit2SharpException("With an inner libgit2sharp exception"))
222+
);
223+
224+
vm.ErrorThrown += (sender, error) => wasRaised = true;
225+
226+
//act
227+
vm.PullCommitsCommand.Execute(null);
228+
229+
//assert
230+
Assert.IsTrue(wasRaised, "ActionFailedEvent was not raised.");
231+
}
232+
233+
[TestMethod]
234+
public void UnsyncedPresenter_WhenSyncFails_ActionFailedEventIsRaised()
235+
{
236+
//arrange
237+
var wasRaised = false;
238+
var vm = new UnsyncedCommitsViewViewModel
239+
{
240+
Provider = _provider.Object
241+
};
242+
243+
_provider.Setup(p => p.Pull())
244+
.Throws(
245+
new SourceControlException("A source control exception was thrown.",
246+
new LibGit2Sharp.LibGit2SharpException("With an inner libgit2sharp exception"))
247+
);
248+
249+
vm.ErrorThrown += (sender, error) => wasRaised = true;
250+
251+
//act
252+
vm.SyncCommitsCommand.Execute(null);
253+
254+
//assert
255+
Assert.IsTrue(wasRaised, "ActionFailedEvent was not raised.");
256+
}
257+
}
258+
}

0 commit comments

Comments
 (0)