예제 #1
0
        public async Task UploadFile_Request_CorrectUri()
        {
            // Arrange
            var handlerMock     = new Mock <HttpMessageHandler>(MockBehavior.Strict).SetupHttpResponse(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var httpClient      = SetUpHttpClient(handlerMock.Object);
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileMock        = new Mock <IFileInfo>().SetupValidFile();

            // Act
            await webPortalClient.UploadFile(new UploadItem(fileMock.Object));

            // Assert
            var expectedUriWithoutQuery = "https://siasky.net/skynet/skyfile";

            handlerMock
            .Protected()
            .Verify(
                "SendAsync",
                Times.Exactly(1),
                ItExpr.Is <HttpRequestMessage>(req =>
                                               req.Method == HttpMethod.Post &&
                                               req.RequestUri.GetLeftPart(UriPartial.Path) == expectedUriWithoutQuery
                                               ),
                ItExpr.IsAny <CancellationToken>()
                );
        }
예제 #2
0
        public void DownloadFile_SkylinkIsDefault_ThrowsArgumentException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK);
            var webPortalClient = new SkynetWebPortal(httpClient);

            // Act
            AsyncTestDelegate downloadRequest = () => webPortalClient.DownloadFile(default);
        public void OneTimeSetUp()
        {
            var httpClient = new HttpClient
            {
                BaseAddress = new Uri("https://skynet.developmomentum.com")
            };

            _skynetWebPortal = new SkynetWebPortal(httpClient);
        }
예제 #4
0
        public void UploadFile_UploadItemIsNull_ThrowsArgumentNullException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);

            // Act
            Task UploadRequest() => webPortalClient.UploadFile(null as UploadItem);

            // Assert
            Assert.That(UploadRequest, Throws.ArgumentNullException);
        }
예제 #5
0
        public void UploadFiles_ItemsAreEmpty_ThrowsArgumentException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);

            // Act
            Task UploadRequest() => webPortalClient.UploadFiles(Array.Empty<UploadItem>());

            // Assert
            Assert.That(UploadRequest, Throws.ArgumentException);
        }
        public void UploadDirectory_FileProviderIsTypeNullFileProvider_ThrowsArgumentException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);

            // Act
            Task UploadRequest() => webPortalClient.UploadDirectory(new NullFileProvider(), "");

            // Assert
            Assert.That(UploadRequest, Throws.ArgumentException);
        }
        public void UploadDirectory_DirectoryPathExists_ThrowsNothing()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileProvider    = SetUpFileProvider();

            // Act
            Task UploadRequest() => webPortalClient.UploadDirectory(fileProvider, "");

            // Assert
            Assert.That(UploadRequest, Throws.Nothing);
        }
        public void UploadDirectory_DirectoryPathDoesNotExist_ThrowsDirectoryNotFoundException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileProvider    = SetUpFileProvider();

            // Act
            Task UploadRequest() => webPortalClient.UploadDirectory(fileProvider, "non-existant-directory");

            // Assert
            Assert.That(UploadRequest, Throws.TypeOf <DirectoryNotFoundException>());
        }
        public async Task UploadDirectory_DirectoryPathExists_ReturnsSkylink()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileProvider    = SetUpFileProvider();

            // Act
            var response = await webPortalClient.UploadDirectory(fileProvider, "");

            // Assert
            Assert.That(response, Is.EqualTo(Skylink.Parse(ValidUploadResponse.Skylink)));
        }
예제 #10
0
        public void UploadFiles_NonSuccessfulResponse_ThrowsHttpRequestException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.BadRequest);
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileMock = new Mock<IFileInfo>().SetupValidFile();

            // Act
            Task UploadRequest() => webPortalClient.UploadFiles(new UploadItem[] { new UploadItem(fileMock.Object) });

            // Assert
            Assert.That(UploadRequest, Throws.TypeOf<HttpRequestException>());
        }
예제 #11
0
        public void UploadFile_FileExistsInvalidUploadResponse_ThrowsHttpResponseException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(InvalidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileProvider    = SetUpFileProvider();

            // Act
            Task UploadRequest() => webPortalClient.UploadFile(fileProvider, "exists.txt");

            // Assert
            Assert.That(UploadRequest, Throws.TypeOf <HttpResponseException>());
        }
예제 #12
0
        public void UploadFile_FilePathIsWhitespace_ThrowsArgumentException(string filePath)
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileProvider    = SetUpFileProvider();

            // Act
            Task UploadRequest() => webPortalClient.UploadFile(fileProvider, filePath);

            // Assert
            Assert.That(UploadRequest, Throws.ArgumentException);
        }
예제 #13
0
        public void UploadFiles_FileInfoEnumerableIsEmpty_ThrowsArgumentException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileProvider = SetUpFileProvider();

            // Act
            Task UploadRequest() => webPortalClient.UploadFiles(Enumerable.Empty<IFileInfo>());

            // Assert
            Assert.That(UploadRequest, Throws.ArgumentException);
        }
예제 #14
0
        public async Task UploadFile_FileInfoIsValidFile_ReturnsSkylink()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileMock        = new Mock <IFileInfo>().SetupValidFile();

            // Act
            var response = await webPortalClient.UploadFile(fileMock.Object);

            // Assert
            Assert.That(response, Is.EqualTo(Skylink.Parse(ValidUploadResponse.Skylink)));
        }
예제 #15
0
        public void UploadFile_FileInfoIsValidFile_ThrowsNothing()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileMock        = new Mock <IFileInfo>().SetupValidFile();

            // Act
            Task UploadRequest() => webPortalClient.UploadFile(fileMock.Object);

            // Assert
            Assert.That(UploadRequest, Throws.Nothing);
        }
예제 #16
0
        public void UploadFile_FileInfoIsNotFoundFileInfo_ThrowsArgumentException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileProvider    = SetUpFileProvider();

            // Act
            Task UploadRequest() => webPortalClient.UploadFile(new NotFoundFileInfo("doesnotexist.txt"));

            // Assert
            Assert.That(UploadRequest, Throws.ArgumentException);
        }
예제 #17
0
        public void UploadFiles_FileInfoEnumerableOnlyContainsValidFilesInvalidUploadResponse_ThrowsHttpResponseException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(InvalidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileMock = new Mock<IFileInfo>().SetupValidFile();

            // Act
            Task UploadRequest() => webPortalClient.UploadFiles(new IFileInfo[] { fileMock.Object });

            // Assert
            Assert.That(UploadRequest, Throws.TypeOf<HttpResponseException>());
        }
예제 #18
0
        public void UploadFiles_FileInfoEnumerableContainsDirectory_ThrowsArgumentException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(ValidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileMock = new Mock<IFileInfo>().SetupDirectory();

            // Act
            Task UploadRequest() => webPortalClient.UploadFiles(new IFileInfo[] { fileMock.Object });

            // Assert
            Assert.That(UploadRequest, Throws.ArgumentException);
        }
예제 #19
0
        public void UploadFile_UploadItemIsNotNullInvalidUploadResponse_ThrowsHttpResponseException()
        {
            // Arrange
            using var httpClient = SetUpHttpClientThatReturns(HttpStatusCode.OK, JsonSerializer.Serialize(InvalidUploadResponse));
            var webPortalClient = new SkynetWebPortal(httpClient);
            var fileMock        = new Mock <IFileInfo>().SetupValidFile();
            var uploadItem      = new UploadItem(fileMock.Object);

            // Act
            Task UploadRequest() => webPortalClient.UploadFile(uploadItem);

            // Assert
            Assert.That(UploadRequest, Throws.TypeOf <HttpResponseException>());
        }