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