|
11 | 11 | using FluentAssertions; |
12 | 12 | using Microsoft.Extensions.Logging; |
13 | 13 | using Moq; |
| 14 | +using Avalonia.Input.Platform; |
14 | 15 |
|
15 | 16 | namespace ByteSync.Client.IntegrationTests.ViewModels.TrustedNetworks; |
16 | 17 |
|
@@ -428,6 +429,77 @@ public ThrowingClipboardViewModel(PublicKeyCheckData publicKeyCheckData, TrustDa |
428 | 429 | throw new InvalidOperationException("clipboard-throw"); |
429 | 430 | } |
430 | 431 | } |
| 432 | + |
| 433 | + private sealed class MockClipboardViewModel : AddTrustedClientViewModel |
| 434 | + { |
| 435 | + private readonly IClipboard _clipboard; |
| 436 | + |
| 437 | + public MockClipboardViewModel(PublicKeyCheckData publicKeyCheckData, TrustDataParameters trustDataParameters, |
| 438 | + IPublicKeysManager publicKeysManager, IApplicationSettingsRepository applicationSettingsManager, |
| 439 | + IPublicKeysTruster publicKeysTruster, ILogger<AddTrustedClientViewModel> logger, IClipboard clipboard) |
| 440 | + : base(publicKeyCheckData, trustDataParameters, publicKeysManager, applicationSettingsManager, publicKeysTruster, logger, null!) |
| 441 | + { |
| 442 | + _clipboard = clipboard; |
| 443 | + } |
| 444 | + |
| 445 | + protected override IClipboard? GetClipboard() => _clipboard; |
| 446 | + } |
| 447 | + |
| 448 | + [Test] |
| 449 | + public async Task CopyToClipboard_WhenClipboardAvailable_Should_Set_OKFlags() |
| 450 | + { |
| 451 | + var check = CreateCheckData(); |
| 452 | + var trustParams = CreateTrustParams(false, true); |
| 453 | + |
| 454 | + var clipboard = new Mock<IClipboard>(); |
| 455 | + clipboard.Setup(c => c.SetTextAsync(It.IsAny<string>())).Returns(Task.CompletedTask); |
| 456 | + |
| 457 | + var vm = new MockClipboardViewModel(check, trustParams, _publicKeysManager.Object, _appSettings.Object, |
| 458 | + _truster.Object, _logger.Object, clipboard.Object) |
| 459 | + { |
| 460 | + Container = new FlyoutContainerViewModel { CanCloseCurrentFlyout = false }, |
| 461 | + SafetyKeyParts = new[] { "alpha", "beta" } |
| 462 | + }; |
| 463 | + |
| 464 | + await ExecuteOnUiThread(async () => |
| 465 | + { |
| 466 | + vm.CopyToClipboardCommand.Execute().Subscribe(); |
| 467 | + await Task.CompletedTask; |
| 468 | + }); |
| 469 | + PumpUntil(() => vm.IsCopyToClipboardOK || vm.IsClipboardCheckError); |
| 470 | + |
| 471 | + vm.IsCopyToClipboardOK.Should().BeTrue(); |
| 472 | + vm.IsClipboardCheckError.Should().BeFalse(); |
| 473 | + clipboard.Verify(c => c.SetTextAsync("alpha beta"), Times.Once); |
| 474 | + } |
| 475 | + |
| 476 | + [Test] |
| 477 | + public async Task CheckClipboard_WhenClipboardAvailable_Matching_Should_Set_OK() |
| 478 | + { |
| 479 | + var check = CreateCheckData(); |
| 480 | + var trustParams = CreateTrustParams(false, true); |
| 481 | + |
| 482 | + var clipboard = new Mock<IClipboard>(); |
| 483 | + clipboard.Setup(c => c.GetTextAsync()).Returns(Task.FromResult("alpha beta")); |
| 484 | + |
| 485 | + var vm = new MockClipboardViewModel(check, trustParams, _publicKeysManager.Object, _appSettings.Object, |
| 486 | + _truster.Object, _logger.Object, clipboard.Object) |
| 487 | + { |
| 488 | + Container = new FlyoutContainerViewModel { CanCloseCurrentFlyout = false }, |
| 489 | + SafetyKeyParts = new[] { "alpha", "beta" } |
| 490 | + }; |
| 491 | + |
| 492 | + await ExecuteOnUiThread(async () => |
| 493 | + { |
| 494 | + vm.CheckClipboardCommand.Execute().Subscribe(); |
| 495 | + await Task.CompletedTask; |
| 496 | + }); |
| 497 | + PumpUntil(() => vm.IsClipboardCheckOK || vm.IsClipboardCheckError); |
| 498 | + |
| 499 | + vm.IsClipboardCheckOK.Should().BeTrue(); |
| 500 | + vm.IsClipboardCheckError.Should().BeFalse(); |
| 501 | + clipboard.Verify(c => c.GetTextAsync(), Times.Once); |
| 502 | + } |
431 | 503 | } |
432 | 504 |
|
433 | 505 |
|
0 commit comments