@@ -125,6 +125,43 @@ public void CanResolveRefsByName()
125
125
}
126
126
}
127
127
128
+ [ Test ]
129
+ public void CanUpdateTargetOnReference ( )
130
+ {
131
+ const string masterRef = "refs/heads/master" ;
132
+ using ( var path = new TemporaryCloneOfTestRepo ( ) )
133
+ using ( var repo = new Repository ( path . RepositoryPath ) )
134
+ {
135
+ var sha = repo . Refs [ "refs/heads/test" ] . ResolveToDirectReference ( ) . Target . Sha ;
136
+ var master = repo . Refs [ masterRef ] ;
137
+ master . ResolveToDirectReference ( ) . Target . Sha . ShouldNotEqual ( sha ) ;
138
+
139
+ repo . Refs . UpdateTarget ( masterRef , sha ) ;
140
+
141
+ master = repo . Refs [ masterRef ] ;
142
+ master . ResolveToDirectReference ( ) . Target . Sha . ShouldEqual ( sha ) ;
143
+ }
144
+ }
145
+
146
+ [ Test ]
147
+ public void CanUpdateTargetOnSymolicReference ( )
148
+ {
149
+ const string name = "refs/heads/unit_test" ;
150
+ using ( var path = new TemporaryCloneOfTestRepo ( ) )
151
+ using ( var repo = new Repository ( path . RepositoryPath ) )
152
+ {
153
+ var newRef = ( SymbolicReference ) repo . Refs . Create ( name , "refs/heads/master" ) ;
154
+ newRef . ShouldNotBeNull ( ) ;
155
+
156
+ repo . Refs . UpdateTarget ( newRef . CanonicalName , "refs/heads/test" ) ;
157
+
158
+ newRef = ( SymbolicReference ) repo . Refs [ newRef . CanonicalName ] ;
159
+ newRef . ResolveToDirectReference ( ) . Target . ShouldEqual ( repo . Refs [ "refs/heads/test" ] . ResolveToDirectReference ( ) . Target ) ;
160
+
161
+ repo . Refs . Delete ( newRef . CanonicalName ) ;
162
+ }
163
+ }
164
+
128
165
[ Test ]
129
166
public void CreateWithEmptyStringForTargetThrows ( )
130
167
{
@@ -200,5 +237,46 @@ public void ResolvingWithNullThrows()
200
237
Assert . Throws < ArgumentNullException > ( ( ) => { var head = repo . Refs [ null ] ; } ) ;
201
238
}
202
239
}
240
+
241
+ [ Test ]
242
+ public void TryingToUpdateADirectRefWithSymbolFails ( )
243
+ {
244
+ const string name = "refs/heads/unit_test" ;
245
+ using ( var path = new TemporaryCloneOfTestRepo ( ) )
246
+ using ( var repo = new Repository ( path . RepositoryPath ) )
247
+ {
248
+ var newRef = ( SymbolicReference ) repo . Refs . Create ( name , "refs/heads/master" ) ;
249
+ newRef . ShouldNotBeNull ( ) ;
250
+
251
+ Assert . Throws < ArgumentException > (
252
+ ( ) => repo . Refs . UpdateTarget ( newRef . CanonicalName , repo . Refs [ "refs/heads/test" ] . ResolveToDirectReference ( ) . Target . Sha ) ) ;
253
+
254
+ repo . Refs . Delete ( newRef . CanonicalName ) ;
255
+ }
256
+ }
257
+
258
+ [ Test ]
259
+ public void TryingToUpdateASymbolicRefWithOidFails ( )
260
+ {
261
+ const string masterRef = "refs/heads/master" ;
262
+ using ( var path = new TemporaryCloneOfTestRepo ( ) )
263
+ using ( var repo = new Repository ( path . RepositoryPath ) )
264
+ {
265
+ Assert . Throws < ArgumentException > ( ( ) => repo . Refs . UpdateTarget ( masterRef , "refs/heads/test" ) ) ;
266
+ }
267
+ }
268
+
269
+ [ Test ]
270
+ public void UpdateReferenceTargetWithBadParametersFails ( )
271
+ {
272
+ using ( var path = new TemporaryCloneOfTestRepo ( ) )
273
+ using ( var repo = new Repository ( path . RepositoryPath ) )
274
+ {
275
+ Assert . Throws < ArgumentException > ( ( ) => repo . Refs . UpdateTarget ( string . Empty , "refs/heads/packed" ) ) ;
276
+ Assert . Throws < ArgumentException > ( ( ) => repo . Refs . UpdateTarget ( "master" , string . Empty ) ) ;
277
+ Assert . Throws < ArgumentNullException > ( ( ) => repo . Refs . UpdateTarget ( null , "refs/heads/packed" ) ) ;
278
+ Assert . Throws < ArgumentNullException > ( ( ) => repo . Refs . UpdateTarget ( "master" , null ) ) ;
279
+ }
280
+ }
203
281
}
204
282
}
0 commit comments