public async Task Runs_OnFileCompleteAsync_When_A_Final_File_Is_Created(string methodToUse) { var store = CreateStoreForFinalFileConcatenation(); string oldCallbackFileId = null; ITusStore oldCallbackStore = null; string callbackFileId = null; ITusStore callbackStore = null; using (var server = TestServerFactory.Create(app => { app.UseTus(request => new DefaultTusConfiguration { Store = store, UrlPath = "/files", #pragma warning disable CS0618 // Type or member is obsolete OnUploadCompleteAsync = (fileId, tusStore, ct) => #pragma warning restore CS0618 // Type or member is obsolete { oldCallbackFileId = fileId; oldCallbackStore = tusStore; return(Task.FromResult(0)); }, Events = new Events { OnFileCompleteAsync = ctx => { callbackFileId = ctx.FileId; callbackStore = ctx.Store; return(Task.FromResult(0)); } } }); })) { var response = await server .CreateRequest("/files") .AddTusResumableHeader() .AddHeader("Upload-Concat", "final;/files/partial1 /files/partial2") .OverrideHttpMethodIfNeeded("POST", methodToUse) .SendAsync(methodToUse); response.StatusCode.ShouldBe(HttpStatusCode.Created); oldCallbackFileId.ShouldBe("finalId"); oldCallbackStore.ShouldBe(store); callbackFileId.ShouldBe("finalId"); callbackStore.ShouldBe(store); } }
public async Task Runs_OnDeleteCompleteAsync_After_Deleting_The_File(string methodToUse) { var fileId = Guid.NewGuid().ToString(); var store = Substitute.For <ITusStore, ITusTerminationStore>(); store.FileExistAsync(fileId, Arg.Any <CancellationToken>()).Returns(true); var onDeleteCompleteAsyncCalled = false; var deleteFileAsyncCalled = false; string callbackFileId = null; ITusStore callbackStore = null; var terminationStore = (ITusTerminationStore)store; terminationStore.DeleteFileAsync(null, CancellationToken.None) .ReturnsForAnyArgs(Task.FromResult(0)) .AndDoes(ci => { onDeleteCompleteAsyncCalled.ShouldBeFalse(); deleteFileAsyncCalled = true; }); var events = new Events { OnDeleteCompleteAsync = ctx => { deleteFileAsyncCalled.ShouldBe(true); onDeleteCompleteAsyncCalled = true; callbackFileId = ctx.FileId; callbackStore = ctx.Store; return(Task.FromResult(0)); } }; using (var server = TestServerFactory.Create(store, events)) { var response = await server .CreateRequest($"/files/{fileId}") .AddTusResumableHeader() .OverrideHttpMethodIfNeeded("DELETE", methodToUse) .SendAsync(methodToUse); response.StatusCode.ShouldBe(HttpStatusCode.NoContent); deleteFileAsyncCalled.ShouldBeTrue(); callbackFileId.ShouldBe(fileId); callbackStore.ShouldBe(store); } }
public async Task OnUploadCompleteAsync_Is_Called_When_A_Final_File_Is_Created(string methodToUse) { var store = Substitute.For <ITusStore, ITusCreationStore, ITusConcatenationStore>(); var concatStore = (ITusConcatenationStore)store; store.FileExistAsync("partial1", Arg.Any <CancellationToken>()).Returns(true); store.FileExistAsync("partial2", Arg.Any <CancellationToken>()).Returns(true); store.GetUploadLengthAsync("partial1", Arg.Any <CancellationToken>()).Returns(10); store.GetUploadLengthAsync("partial2", Arg.Any <CancellationToken>()).Returns(20); store.GetUploadOffsetAsync("partial1", Arg.Any <CancellationToken>()).Returns(10); store.GetUploadOffsetAsync("partial2", Arg.Any <CancellationToken>()).Returns(20); concatStore.GetUploadConcatAsync("partial1", Arg.Any <CancellationToken>()).Returns(new FileConcatPartial()); concatStore.GetUploadConcatAsync("partial2", Arg.Any <CancellationToken>()).Returns(new FileConcatPartial()); concatStore.CreateFinalFileAsync(null, null, Arg.Any <CancellationToken>()) .ReturnsForAnyArgs("finalId"); string callbackFileId = null; ITusStore callbackStore = null; using (var server = TestServerFactory.Create(app => { app.UseTus(request => new DefaultTusConfiguration { Store = store, UrlPath = "/files", OnUploadCompleteAsync = (fileId, tusStore, ct) => { callbackFileId = fileId; callbackStore = tusStore; return(Task.FromResult(0)); } }); })) { var response = await server .CreateRequest("/files") .AddTusResumableHeader() .AddHeader("Upload-Concat", "final;/files/partial1 /files/partial2") .OverrideHttpMethodIfNeeded("POST", methodToUse) .SendAsync(methodToUse); response.StatusCode.ShouldBe(HttpStatusCode.Created); callbackFileId.ShouldBe("finalId"); callbackStore.ShouldBe(store); } }