Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
            }
        }