Skip to content

Commit d559846

Browse files
committed
test: add tests
1 parent c4d4b65 commit d559846

File tree

2 files changed

+89
-2
lines changed

2 files changed

+89
-2
lines changed

src/ByteSync.Client/ViewModels/TrustedNetworks/AddTrustedClientViewModel.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Reactive.Linq;
55
using System.Reactive.Subjects;
66
using Avalonia.Controls;
7+
using Avalonia.Input.Platform;
78
using ByteSync.Business;
89
using ByteSync.Business.Communications;
910
using ByteSync.Common.Business.EndPoints;
@@ -186,7 +187,7 @@ private async Task CopyToClipboard()
186187

187188
try
188189
{
189-
var clipboard = TopLevel.GetTopLevel(_mainWindow)?.Clipboard;
190+
var clipboard = GetClipboard();
190191

191192
if (clipboard != null)
192193
{
@@ -219,7 +220,7 @@ private async Task CheckClipboard()
219220

220221
try
221222
{
222-
var clipboard = TopLevel.GetTopLevel(_mainWindow)?.Clipboard;
223+
var clipboard = GetClipboard();
223224

224225
if (clipboard != null)
225226
{
@@ -247,6 +248,11 @@ private async Task CheckClipboard()
247248
}
248249
}
249250

251+
protected virtual IClipboard? GetClipboard()
252+
{
253+
return TopLevel.GetTopLevel(_mainWindow)?.Clipboard;
254+
}
255+
250256

251257
private async Task ValidateClient()
252258
{

tests/ByteSync.Client.IntegrationTests/ViewModels/TrustedNetworks/AddTrustedClientViewModel_HeadlessTests.cs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,87 @@ await ExecuteOnUiThread(() =>
347347
closed.Should().BeFalse();
348348
vm.Container.CanCloseCurrentFlyout.Should().BeFalse();
349349
}
350+
351+
[Test]
352+
public async Task CopyToClipboard_Exception_Should_Set_ErrorFlags()
353+
{
354+
var check = CreateCheckData();
355+
var trustParams = CreateTrustParams(false, true);
356+
357+
var vm = new ThrowingClipboardViewModel(check, trustParams, _publicKeysManager.Object, _appSettings.Object,
358+
_truster.Object, _logger.Object)
359+
{
360+
Container = new FlyoutContainerViewModel { CanCloseCurrentFlyout = false },
361+
SafetyKeyParts = null!
362+
};
363+
364+
await ExecuteOnUiThread(async () =>
365+
{
366+
vm.CopyToClipboardCommand.Execute().Subscribe();
367+
await Task.CompletedTask;
368+
});
369+
370+
PumpUntil(() => vm.IsCopyToClipboardOK || vm.IsClipboardCheckError);
371+
372+
vm.IsCopyToClipboardOK.Should().BeFalse();
373+
vm.IsClipboardCheckError.Should().BeTrue();
374+
375+
_logger.Verify(x => x.Log(
376+
LogLevel.Error,
377+
It.IsAny<EventId>(),
378+
It.Is<It.IsAnyType>((v, t) => v.ToString()!.Contains("CopyToClipboard error")),
379+
It.IsAny<Exception>(),
380+
It.IsAny<Func<It.IsAnyType, Exception, string>>()
381+
), Times.AtLeastOnce);
382+
}
383+
384+
[Test]
385+
public async Task CheckClipboard_Exception_Should_Set_ErrorFlags()
386+
{
387+
var check = CreateCheckData();
388+
var trustParams = CreateTrustParams(false, true);
389+
390+
var vm = new ThrowingClipboardViewModel(check, trustParams, _publicKeysManager.Object, _appSettings.Object,
391+
_truster.Object, _logger.Object)
392+
{
393+
Container = new FlyoutContainerViewModel { CanCloseCurrentFlyout = false },
394+
SafetyKeyParts = null!
395+
};
396+
397+
await ExecuteOnUiThread(async () =>
398+
{
399+
vm.CheckClipboardCommand.Execute().Subscribe();
400+
await Task.CompletedTask;
401+
});
402+
403+
PumpUntil(() => vm.IsClipboardCheckOK || vm.IsClipboardCheckError);
404+
405+
vm.IsClipboardCheckOK.Should().BeFalse();
406+
vm.IsClipboardCheckError.Should().BeTrue();
407+
408+
_logger.Verify(x => x.Log(
409+
LogLevel.Error,
410+
It.IsAny<EventId>(),
411+
It.Is<It.IsAnyType>((v, t) => v.ToString()!.Contains("CheckClipboard error")),
412+
It.IsAny<Exception>(),
413+
It.IsAny<Func<It.IsAnyType, Exception, string>>()
414+
), Times.AtLeastOnce);
415+
}
416+
417+
private sealed class ThrowingClipboardViewModel : AddTrustedClientViewModel
418+
{
419+
public ThrowingClipboardViewModel(PublicKeyCheckData publicKeyCheckData, TrustDataParameters trustDataParameters,
420+
IPublicKeysManager publicKeysManager, IApplicationSettingsRepository applicationSettingsManager,
421+
IPublicKeysTruster publicKeysTruster, ILogger<AddTrustedClientViewModel> logger)
422+
: base(publicKeyCheckData, trustDataParameters, publicKeysManager, applicationSettingsManager, publicKeysTruster, logger, null!)
423+
{
424+
}
425+
426+
protected override Avalonia.Input.Platform.IClipboard? GetClipboard()
427+
{
428+
throw new InvalidOperationException("clipboard-throw");
429+
}
430+
}
350431
}
351432

352433

0 commit comments

Comments
 (0)