-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathAssertFilePartIsDownloadedCommandHandlerTests.cs
More file actions
113 lines (96 loc) · 4.85 KB
/
AssertFilePartIsDownloadedCommandHandlerTests.cs
File metadata and controls
113 lines (96 loc) · 4.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using ByteSync.Common.Business.SharedFiles;
using ByteSync.ServerCommon.Business.Auth;
using ByteSync.ServerCommon.Business.Sessions;
using ByteSync.ServerCommon.Commands.FileTransfers;
using ByteSync.ServerCommon.Interfaces.Repositories;
using ByteSync.ServerCommon.Interfaces.Services;
using FakeItEasy;
using FluentAssertions;
using Microsoft.Extensions.Logging;
namespace ByteSync.ServerCommon.Tests.Commands.FileTransfers;
[TestFixture]
public class AssertFilePartIsDownloadedCommandHandlerTests
{
private ICloudSessionsRepository _mockCloudSessionsRepository;
private ISharedFilesService _mockSharedFilesService;
private ILogger<AssertFilePartIsDownloadedCommandHandler> _mockLogger;
private AssertFilePartIsDownloadedCommandHandler _assertFilePartIsDownloadedCommandHandler;
private ITransferLocationService _mockTransferLocationService;
[SetUp]
public void Setup()
{
_mockCloudSessionsRepository = A.Fake<ICloudSessionsRepository>();
_mockSharedFilesService = A.Fake<ISharedFilesService>();
_mockLogger = A.Fake<ILogger<AssertFilePartIsDownloadedCommandHandler>>();
_mockTransferLocationService = A.Fake<ITransferLocationService>();
_assertFilePartIsDownloadedCommandHandler = new AssertFilePartIsDownloadedCommandHandler(
_mockCloudSessionsRepository,
_mockSharedFilesService,
_mockTransferLocationService, _mockLogger);
}
[Test]
[TestCase(StorageProvider.AzureBlobStorage)]
[TestCase(StorageProvider.CloudflareR2)]
public async Task Handle_ValidRequest_AssertsFilePartIsDownloaded(StorageProvider storageProvider)
{
// Arrange
var sessionId = "session1";
var client = new Client { ClientInstanceId = "client1" };
var sharedFileDefinition = new SharedFileDefinition { Id = "file1" };
var partNumber = 1;
var transferParameters = new TransferParameters
{
SessionId = sessionId,
SharedFileDefinition = sharedFileDefinition,
PartNumber = partNumber,
StorageProvider = storageProvider
};
var request = new AssertFilePartIsDownloadedRequest(sessionId, client, transferParameters);
// Mock the session repository to return a valid session member
var mockSessionMember = new SessionMemberData { ClientInstanceId = client.ClientInstanceId };
A.CallTo(() => _mockCloudSessionsRepository.GetSessionMember(sessionId, client)).Returns(mockSessionMember);
// Mock the transfer location service to return true for IsSharedFileDefinitionAllowed
A.CallTo(() => _mockTransferLocationService.IsSharedFileDefinitionAllowed(mockSessionMember, sharedFileDefinition))
.Returns(true);
// Mock the shared files service
A.CallTo(() => _mockSharedFilesService.AssertFilePartIsDownloaded(client, transferParameters))
.Returns(Task.CompletedTask);
// Act
await _assertFilePartIsDownloadedCommandHandler.Handle(request, CancellationToken.None);
// Assert
A.CallTo(() => _mockCloudSessionsRepository.GetSessionMember(sessionId, client))
.MustHaveHappenedOnceExactly();
A.CallTo(() => _mockTransferLocationService.IsSharedFileDefinitionAllowed(mockSessionMember, sharedFileDefinition))
.MustHaveHappenedOnceExactly();
A.CallTo(() => _mockSharedFilesService.AssertFilePartIsDownloaded(client, transferParameters))
.MustHaveHappenedOnceExactly();
}
[Test]
[TestCase(StorageProvider.AzureBlobStorage)]
[TestCase(StorageProvider.CloudflareR2)]
public async Task Handle_WhenServiceThrowsException_PropagatesException(StorageProvider storageProvider)
{
// Arrange
var sessionId = "session1";
var client = new Client { ClientInstanceId = "client1" };
var sharedFileDefinition = new SharedFileDefinition { Id = "file1" };
var partNumber = 1;
var expectedException = new InvalidOperationException("Test exception");
var transferParameters = new TransferParameters
{
SessionId = sessionId,
SharedFileDefinition = sharedFileDefinition,
PartNumber = partNumber,
StorageProvider = storageProvider
};
var request = new AssertFilePartIsDownloadedRequest(sessionId, client, transferParameters);
// Mock the session repository to throw an exception
A.CallTo(() => _mockCloudSessionsRepository.GetSessionMember(sessionId, client))
.Throws(expectedException);
// Act & Assert
var exception = await FluentActions.Awaiting(() =>
_assertFilePartIsDownloadedCommandHandler.Handle(request, CancellationToken.None))
.Should().ThrowAsync<InvalidOperationException>();
exception.Which.Should().Be(expectedException);
}
}