@@ -20,36 +20,18 @@ namespace Hosts.Tests
20
20
[ TestClass ]
21
21
public class HostsServiceTest
22
22
{
23
+ private const string BackupPath = @"C:\Backup\hosts" ;
23
24
private static Mock < IUserSettings > _userSettings ;
24
25
private static Mock < IElevationHelper > _elevationHelper ;
26
+ private static Mock < IBackupManager > _backupManager ;
25
27
26
28
[ ClassInitialize ]
27
29
public static void ClassInitialize ( TestContext context )
28
30
{
29
31
_userSettings = new Mock < IUserSettings > ( ) ;
30
32
_elevationHelper = new Mock < IElevationHelper > ( ) ;
31
33
_elevationHelper . Setup ( m => m . IsElevated ) . Returns ( true ) ;
32
- }
33
-
34
- [ TestMethod ]
35
- public void Hosts_Exists ( )
36
- {
37
- var fileSystem = new CustomMockFileSystem ( ) ;
38
- var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object ) ;
39
- fileSystem . AddFile ( service . HostsFilePath , new MockFileData ( string . Empty ) ) ;
40
- var result = service . Exists ( ) ;
41
-
42
- Assert . IsTrue ( result ) ;
43
- }
44
-
45
- [ TestMethod ]
46
- public void Hosts_Not_Exists ( )
47
- {
48
- var fileSystem = new CustomMockFileSystem ( ) ;
49
- var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object ) ;
50
- var result = service . Exists ( ) ;
51
-
52
- Assert . IsFalse ( result ) ;
34
+ _backupManager = new Mock < IBackupManager > ( ) ;
53
35
}
54
36
55
37
[ TestMethod ]
@@ -67,7 +49,7 @@ 10.1.1.2 host2 host2.local # another comment
67
49
" ;
68
50
69
51
var fileSystem = new CustomMockFileSystem ( ) ;
70
- var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object ) ;
52
+ var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object , _backupManager . Object ) ;
71
53
fileSystem . AddFile ( service . HostsFilePath , new MockFileData ( content ) ) ;
72
54
73
55
var data = await service . ReadAsync ( ) ;
@@ -92,7 +74,7 @@ 10.1.1.2 host2 host2.local # another comment
92
74
" ;
93
75
94
76
var fileSystem = new CustomMockFileSystem ( ) ;
95
- var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object ) ;
77
+ var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object , _backupManager . Object ) ;
96
78
fileSystem . AddFile ( service . HostsFilePath , new MockFileData ( content ) ) ;
97
79
98
80
var data = await service . ReadAsync ( ) ;
@@ -118,7 +100,7 @@ 10.1.1.2 host2 host2.local # another comment
118
100
" ;
119
101
120
102
var fileSystem = new CustomMockFileSystem ( ) ;
121
- var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object ) ;
103
+ var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object , _backupManager . Object ) ;
122
104
fileSystem . AddFile ( service . HostsFilePath , new MockFileData ( content ) ) ;
123
105
124
106
var data = await service . ReadAsync ( ) ;
@@ -137,7 +119,7 @@ 10.1.1.2 host2 host2.local # another comment
137
119
public async Task Empty_Hosts ( )
138
120
{
139
121
var fileSystem = new CustomMockFileSystem ( ) ;
140
- var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object ) ;
122
+ var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object , _backupManager . Object ) ;
141
123
fileSystem . AddFile ( service . HostsFilePath , new MockFileData ( string . Empty ) ) ;
142
124
143
125
await service . WriteAsync ( string . Empty , Enumerable . Empty < Entry > ( ) ) ;
@@ -168,7 +150,7 @@ 10.1.1.2 host2 host2.local # another comment
168
150
var fileSystem = new CustomMockFileSystem ( ) ;
169
151
var userSettings = new Mock < IUserSettings > ( ) ;
170
152
userSettings . Setup ( m => m . AdditionalLinesPosition ) . Returns ( HostsAdditionalLinesPosition . Top ) ;
171
- var service = new HostsService ( fileSystem , userSettings . Object , _elevationHelper . Object ) ;
153
+ var service = new HostsService ( fileSystem , userSettings . Object , _elevationHelper . Object , _backupManager . Object ) ;
172
154
fileSystem . AddFile ( service . HostsFilePath , new MockFileData ( content ) ) ;
173
155
174
156
var data = await service . ReadAsync ( ) ;
@@ -200,7 +182,7 @@ 10.1.1.2 host2 host2.local # another comment
200
182
var fileSystem = new CustomMockFileSystem ( ) ;
201
183
var userSettings = new Mock < IUserSettings > ( ) ;
202
184
userSettings . Setup ( m => m . AdditionalLinesPosition ) . Returns ( HostsAdditionalLinesPosition . Bottom ) ;
203
- var service = new HostsService ( fileSystem , userSettings . Object , _elevationHelper . Object ) ;
185
+ var service = new HostsService ( fileSystem , userSettings . Object , _elevationHelper . Object , _backupManager . Object ) ;
204
186
fileSystem . AddFile ( service . HostsFilePath , new MockFileData ( content ) ) ;
205
187
206
188
var data = await service . ReadAsync ( ) ;
@@ -224,7 +206,7 @@ 10.1.1.1 host19 # commen
224
206
" ;
225
207
226
208
var fileSystem = new CustomMockFileSystem ( ) ;
227
- var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object ) ;
209
+ var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object , _backupManager . Object ) ;
228
210
fileSystem . AddFile ( service . HostsFilePath , new MockFileData ( content ) ) ;
229
211
230
212
var data = await service . ReadAsync ( ) ;
@@ -241,15 +223,15 @@ public async Task Save_NotRunningElevatedException()
241
223
var elevationHelper = new Mock < IElevationHelper > ( ) ;
242
224
elevationHelper . Setup ( m => m . IsElevated ) . Returns ( false ) ;
243
225
244
- var service = new HostsService ( fileSystem , _userSettings . Object , elevationHelper . Object ) ;
226
+ var service = new HostsService ( fileSystem , _userSettings . Object , elevationHelper . Object , _backupManager . Object ) ;
245
227
await Assert . ThrowsExceptionAsync < NotRunningElevatedException > ( async ( ) => await service . WriteAsync ( "# Empty hosts file" , Enumerable . Empty < Entry > ( ) ) ) ;
246
228
}
247
229
248
230
[ TestMethod ]
249
231
public async Task Save_ReadOnlyHostsException ( )
250
232
{
251
233
var fileSystem = new CustomMockFileSystem ( ) ;
252
- var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object ) ;
234
+ var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object , _backupManager . Object ) ;
253
235
254
236
var hostsFile = new MockFileData ( string . Empty )
255
237
{
@@ -265,7 +247,7 @@ public async Task Save_ReadOnlyHostsException()
265
247
public void Remove_ReadOnly_Attribute ( )
266
248
{
267
249
var fileSystem = new CustomMockFileSystem ( ) ;
268
- var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object ) ;
250
+ var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object , _backupManager . Object ) ;
269
251
270
252
var hostsFile = new MockFileData ( string . Empty )
271
253
{
@@ -284,7 +266,7 @@ public void Remove_ReadOnly_Attribute()
284
266
public async Task Save_Hidden_Hosts ( )
285
267
{
286
268
var fileSystem = new CustomMockFileSystem ( ) ;
287
- var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object ) ;
269
+ var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object , _backupManager . Object ) ;
288
270
289
271
var hostsFile = new MockFileData ( string . Empty )
290
272
{
@@ -298,5 +280,56 @@ public async Task Save_Hidden_Hosts()
298
280
var hidden = fileSystem . FileInfo . New ( service . HostsFilePath ) . Attributes . HasFlag ( FileAttributes . Hidden ) ;
299
281
Assert . IsTrue ( hidden ) ;
300
282
}
283
+
284
+ [ TestMethod ]
285
+ public async Task Hosts_Backup_Not_Done ( )
286
+ {
287
+ var content =
288
+ @"10.1.1.1 host host.local # comment
289
+ 10.1.1.2 host2 host2.local # another comment
290
+ " ;
291
+
292
+ var fileSystem = new CustomMockFileSystem ( ) ;
293
+ fileSystem . AddDirectory ( BackupPath ) ;
294
+ _userSettings . Setup ( m => m . BackupHosts ) . Returns ( false ) ;
295
+ _userSettings . Setup ( m => m . BackupPath ) . Returns ( BackupPath ) ;
296
+ var backupManager = new BackupManager ( fileSystem , _userSettings . Object ) ;
297
+ var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object , backupManager ) ;
298
+
299
+ fileSystem . AddFile ( service . HostsFilePath , new MockFileData ( content ) ) ;
300
+
301
+ var data = await service . ReadAsync ( ) ;
302
+ var entries = data . Entries . ToList ( ) ;
303
+ entries . Add ( new Entry ( 0 , "10.1.1.30" , "host30 host30.local" , "new entry" , false ) ) ;
304
+ await service . WriteAsync ( data . AdditionalLines , data . Entries ) ;
305
+
306
+ Assert . AreEqual ( 0 , fileSystem . Directory . GetFiles ( BackupPath ) . Length ) ;
307
+ }
308
+
309
+ [ TestMethod ]
310
+ public async Task Hosts_Backup_Done ( )
311
+ {
312
+ var content =
313
+ @"10.1.1.1 host host.local # comment
314
+ 10.1.1.2 host2 host2.local # another comment
315
+ " ;
316
+
317
+ var fileSystem = new CustomMockFileSystem ( ) ;
318
+ _userSettings . Setup ( m => m . BackupHosts ) . Returns ( true ) ;
319
+ _userSettings . Setup ( m => m . BackupPath ) . Returns ( BackupPath ) ;
320
+ var backupManager = new BackupManager ( fileSystem , _userSettings . Object ) ;
321
+ var service = new HostsService ( fileSystem , _userSettings . Object , _elevationHelper . Object , backupManager ) ;
322
+
323
+ fileSystem . AddFile ( service . HostsFilePath , new MockFileData ( content ) ) ;
324
+
325
+ var data = await service . ReadAsync ( ) ;
326
+ var entries = data . Entries . ToList ( ) ;
327
+ entries . Add ( new Entry ( 0 , "10.1.1.30" , "host30 host30.local" , "new entry" , false ) ) ;
328
+ await service . WriteAsync ( data . AdditionalLines , data . Entries ) ;
329
+
330
+ Assert . AreEqual ( 1 , fileSystem . Directory . GetFiles ( BackupPath ) . Length ) ;
331
+ var backupContent = fileSystem . File . ReadAllText ( fileSystem . Directory . GetFiles ( BackupPath ) [ 0 ] ) ;
332
+ Assert . AreEqual ( content , backupContent ) ;
333
+ }
301
334
}
302
335
}
0 commit comments