public void SetContent_WhereContentIsLarge_ExecutesSet() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); var testFile = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", new MemoryStream(new byte[100]), fixture.GetProgressReporter()); testFile.Directory = testDirectory.ToContract(); fixture.OnCondition(config, GatewayCapabilities.SetContent, () => { gateway.SetContent(rootName, testFile.Id, new MemoryStream(largeContent), fixture.GetProgressReporter()); using (var result = gateway.GetContent(rootName, testFile.Id)) { var buffer = new byte[largeContent.Length]; int position = 0, bytesRead = 0; do { position += bytesRead = result.Read(buffer, position, buffer.Length - position); } while (bytesRead != 0); Assert.AreEqual(buffer.Length, position, "Truncated result content"); Assert.AreEqual(-1, result.ReadByte(), "Excessive result content"); CollectionAssert.AreEqual(largeContent, buffer, "Mismatched result content"); } }); } }, 4); }
public void RenameItem_WhereItemIsFile_ExecutesRename() { _fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, _fixture)) { gateway.GetDrive(rootName, config.ApiKey, _fixture.GetParameters(config)); var file = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", _smallContent.ToStream(), _fixture.GetProgressReporter()); file.Directory = testDirectory.ToContract(); _fixture.OnCondition(config, GatewayCapabilities.RenameFileItem, () => { gateway.RenameItem(rootName, file.Id, "File-Renamed.ext"); var items = gateway.GetChildItem(rootName, testDirectory.Id); Assert.IsTrue(items.Any(i => i.Name == "File-Renamed.ext"), "Expected renamed file is missing"); using (var result = gateway.GetContent(rootName, ((FileInfoContract)items.Single(i => i.Name == "File-Renamed.ext")).Id)) using (var streamReader = new StreamReader(result)) { Assert.AreEqual(_smallContent, streamReader.ReadToEnd(), "Mismatched content"); } Assert.IsFalse(items.Any(i => i.Name == "File.ext"), "Excessive file found"); }); } }); }
public void NewFileItem_WhereContentIsLarge_CreatesFile() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); fixture.OnCondition(config, GatewayCapabilities.NewFileItem, () => { var newFile = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", new MemoryStream(largeContent), fixture.GetProgressReporter()); var items = gateway.GetChildItem(rootName, testDirectory.Id); Assert.AreEqual(1, items.Count(i => i.Name == "File.ext"), "Expected file is missing"); Assert.AreEqual(items.Single(i => i.Name == "File.ext").Id, newFile.Id, "Mismatched file Id"); using (var result = gateway.GetContent(rootName, newFile.Id)) { var buffer = new byte[largeContent.Length]; int position = 0, bytesRead = 0; do { position += bytesRead = result.Read(buffer, position, buffer.Length - position); } while (bytesRead != 0); Assert.AreEqual(buffer.Length, position, "Truncated result content"); Assert.AreEqual(-1, result.ReadByte(), "Excessive result content"); CollectionAssert.AreEqual(largeContent, buffer, "Mismatched result content"); } }); } }, 4); }
public void CopyItem_WhereItemIsFile_ToDifferentDirectory_ExecutesCopy() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); var fileOriginal = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter()); var directoryTarget = gateway.NewDirectoryItem(rootName, testDirectory.Id, "Target"); fixture.OnCondition(config, GatewayCapabilities.CopyFileItem, () => { var fileCopy = (FileInfoContract)gateway.CopyItem(rootName, fileOriginal.Id, "File-Copy.ext", directoryTarget.Id, false); var items = gateway.GetChildItem(rootName, testDirectory.Id); var targetItems = gateway.GetChildItem(rootName, directoryTarget.Id); Assert.AreEqual(targetItems.Single(i => i.Name == "File-Copy.ext").Id, fileCopy.Id, "Mismatched copied file Id"); Assert.IsNotNull(items.SingleOrDefault(i => i.Name == "File.ext"), "Original file is missing"); using (var result = gateway.GetContent(rootName, fileCopy.Id)) using (var streamReader = new StreamReader(result)) { Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content"); } }); } }); }
public void MoveItem_WhereItemIsFile_ExecutesMove() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); var directoryTarget = gateway.NewDirectoryItem(rootName, testDirectory.Id, "DirectoryTarget"); directoryTarget.Parent = testDirectory.ToContract(); var fileOriginal = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter()); fixture.OnCondition(config, GatewayCapabilities.MoveFileItem, () => { var fileMoved = (FileInfoContract)gateway.MoveItem(rootName, fileOriginal.Id, "File.ext", directoryTarget.Id); var targetItems = gateway.GetChildItem(rootName, directoryTarget.Id); Assert.AreEqual(targetItems.Single(i => i.Name == "File.ext").Id, fileMoved.Id, "Mismatched moved file Id"); var originalItems = gateway.GetChildItem(rootName, testDirectory.Id); Assert.IsNull(originalItems.SingleOrDefault(i => i.Name == "File.ext"), "Original file remains"); using (var result = gateway.GetContent(rootName, fileMoved.Id)) using (var streamReader = new StreamReader(result)) { Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content"); } if (!config.Exclusions.HasFlag(GatewayCapabilities.ItemId)) { Assert.AreEqual(fileOriginal.Id, fileMoved.Id, "Mismatched moved file Id"); } }); } }); }
public void NewFileItemAsync_WhereNameContainsSpecialCharacters_CreatesFile() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDriveAsync(rootName, config.ApiKey, fixture.GetParameters(config)).Wait(); fixture.OnCondition(config, GatewayCapabilities.NewFileItem, () => { using (var namesStream = File.OpenRead($"{nameof(GenericAsyncGatewayTests)}.SpecialCharacters.txt")) using (var reader = new StreamReader(namesStream)) { while (!reader.EndOfStream) { var fileName = $"{reader.ReadLine().Split(new[] { ' ', '\t' }, 2)[0]}.txt"; var newFile = gateway.NewFileItemAsync(rootName, testDirectory.Id, fileName, smallContent.ToStream(), fixture.GetProgressReporter()).Result; var items = gateway.GetChildItemAsync(rootName, testDirectory.Id).Result; Assert.AreEqual(1, items.Count(i => i.Name == fileName), $"Expected file '{fileName}' is missing"); Assert.AreEqual(items.Single(i => i.Name == fileName).Id, newFile.Id, $"Mismatched file Id for file '{fileName}'"); using (var result = gateway.GetContentAsync(rootName, newFile.Id).Result) using (var streamReader = new StreamReader(result)) { Assert.AreEqual(smallContent, streamReader.ReadToEnd(), $"Mismatched content for file '{fileName}'"); } } } }); } }); }
public void CopyItem_WhereItemIsDirectory_ToSameDirectoryExecutesCopy() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); var directoryOriginal = gateway.NewDirectoryItem(rootName, testDirectory.Id, "Directory"); var fileOriginal = gateway.NewFileItem(rootName, directoryOriginal.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter()); fixture.OnCondition(config, GatewayCapabilities.CopyDirectoryItem, () => { var directoryCopy = (DirectoryInfoContract)gateway.CopyItem(rootName, directoryOriginal.Id, "Directory-Copy", testDirectory.Id, true); var items = gateway.GetChildItem(rootName, testDirectory.Id); Assert.AreEqual(items.Single(i => i.Name == "Directory-Copy").Id, directoryCopy.Id, "Mismatched copied directory Id"); Assert.IsNotNull(items.SingleOrDefault(i => i.Name == "Directory"), "Original directory is missing"); var copiedFile = (FileInfoContract)gateway.GetChildItem(rootName, directoryCopy.Id).SingleOrDefault(i => i.Name == "File.ext"); Assert.IsTrue(copiedFile != null, "Expected copied file is missing"); using (var result = gateway.GetContent(rootName, copiedFile.Id)) using (var streamReader = new StreamReader(result)) { Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content"); } Assert.AreNotEqual(fileOriginal.Id, copiedFile.Id, "Duplicate copied file Id"); }); } }); }
public void SetContent_AfterGetContent_ExecutesSet() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); var testFile = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter()); testFile.Directory = testDirectory.ToContract(); fixture.OnCondition(config, GatewayCapabilities.SetContent, () => { using (var result = gateway.GetContent(rootName, testFile.Id)) using (var streamReader = new StreamReader(result)) { Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched initial content"); } var changedContent = new string(smallContent.Reverse().ToArray()); gateway.SetContent(rootName, testFile.Id, changedContent.ToStream(), fixture.GetProgressReporter()); using (var result = gateway.GetContent(rootName, testFile.Id)) using (var streamReader = new StreamReader(result)) { Assert.AreEqual(changedContent, streamReader.ReadToEnd(), "Mismatched updated content"); } }); } }); }
public void NewDirectoryItem_CreatesDirectory() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); fixture.OnCondition(config, GatewayCapabilities.NewDirectoryItem, () => { var newDirectory = gateway.NewDirectoryItem(rootName, testDirectory.Id, "Directory"); var items = gateway.GetChildItem(rootName, testDirectory.Id); Assert.AreEqual(1, items.Count(i => i.Name == "Directory"), "Expected directory is missing"); Assert.AreEqual(items.Single(i => i.Name == "Directory").Id, newDirectory.Id, "Mismatched directory Id"); }); } }); }
public void RemoveItem_WhereItemIsFile_ExecutesRemove() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); var file = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter()); fixture.OnCondition(config, GatewayCapabilities.RemoveItem, () => { gateway.RemoveItem(rootName, file.Id, false); var items = gateway.GetChildItem(rootName, testDirectory.Id); Assert.IsFalse(items.Any(i => i.Name == "File.ext"), "Excessive file found"); }); } }); }
public void GetContent_ReturnsResult() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); var testFile = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter()); fixture.OnCondition(config, GatewayCapabilities.GetContent, () => { using (var result = gateway.GetContent(rootName, testFile.Id)) using (var streamReader = new StreamReader(result)) { Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content"); } }); } }); }
public void RemoveItemAsync_WhereItemIsDirectory_ExecutesRemove() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDriveAsync(rootName, config.ApiKey, fixture.GetParameters(config)).Wait(); var directory = gateway.NewDirectoryItemAsync(rootName, testDirectory.Id, "Directory").Result; gateway.NewFileItemAsync(rootName, directory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter()).Wait(); fixture.OnCondition(config, GatewayCapabilities.RemoveItem, () => { gateway.RemoveItemAsync(rootName, directory.Id, true).Wait(); var items = gateway.GetChildItemAsync(rootName, testDirectory.Id).Result; Assert.IsFalse(items.Any(i => i.Name == "Directory"), "Excessive directory found"); }); } }); }
public void RenameItem_WhereItemIsDirectory_ExecutesRename() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); var directory = gateway.NewDirectoryItem(rootName, testDirectory.Id, "Directory"); directory.Parent = testDirectory.ToContract(); fixture.OnCondition(config, GatewayCapabilities.RenameDirectoryItem, () => { gateway.RenameItem(rootName, directory.Id, "Directory-Renamed"); var items = gateway.GetChildItem(rootName, testDirectory.Id); Assert.IsTrue(items.Any(i => i.Name == "Directory-Renamed"), "Expected renamed directory is missing"); Assert.IsFalse(items.Any(i => i.Name == "Directory"), "Excessive directory found"); }); } }); }
public void GetChildItem_ReturnsResults() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); gateway.NewDirectoryItem(rootName, testDirectory.Id, "DirectoryContent"); gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", new MemoryStream(new byte[100]), fixture.GetProgressReporter()); fixture.OnCondition(config, GatewayCapabilities.GetChildItem, () => { var items = gateway.GetChildItem(rootName, testDirectory.Id).ToList(); Assert.AreEqual(2, items.Count, "Unexpected number of results"); Assert.IsTrue(items.OfType <DirectoryInfoContract>().Any(i => i.Name == "DirectoryContent"), "Expected directory is missing"); Assert.IsTrue(items.OfType <FileInfoContract>().Any(i => i.Name == "File.ext" && i.Size == 100), "Expected file is missing"); }); } }); }
public void NewFileItem_CreatesFile() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); fixture.OnCondition(config, GatewayCapabilities.NewFileItem, () => { var newFile = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter()); var items = gateway.GetChildItem(rootName, testDirectory.Id); Assert.AreEqual(1, items.Count(i => i.Name == "File.ext"), "Expected file is missing"); Assert.AreEqual(items.Single(i => i.Name == "File.ext").Id, newFile.Id, "Mismatched file Id"); using (var result = gateway.GetContent(rootName, newFile.Id)) using (var streamReader = new StreamReader(result)) { Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content"); } }); } }); }
public void SetContentAsync_ExecutesSet() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDriveAsync(rootName, config.ApiKey, fixture.GetParameters(config)).Wait(); var testFile = gateway.NewFileItemAsync(rootName, testDirectory.Id, "File.ext", new MemoryStream(new byte[100]), fixture.GetProgressReporter()).Result; testFile.Directory = testDirectory.ToContract(); fixture.OnCondition(config, GatewayCapabilities.SetContent, () => { gateway.SetContentAsync(rootName, testFile.Id, smallContent.ToStream(), fixture.GetProgressReporter(), () => new FileSystemInfoLocator(testFile)).Wait(); using (var result = gateway.GetContentAsync(rootName, testFile.Id).Result) using (var streamReader = new StreamReader(result)) { Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content"); } }); } }); }
public void ClearContent_ExecutesClear() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config)); var testFile = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", new MemoryStream(new byte[100]), fixture.GetProgressReporter()); testFile.Directory = testDirectory.ToContract(); fixture.OnCondition(config, GatewayCapabilities.ClearContent, () => { gateway.ClearContent(rootName, testFile.Id); var items = gateway.GetChildItem(rootName, testDirectory.Id).ToList(); testFile = (FileInfoContract)items.Single(); Assert.AreEqual("File.ext", testFile.Name, "Expected file is missing"); Assert.AreEqual(0, testFile.Size, "Mismatched content size"); }); } }); }
public void NewDirectoryItemAsync_WhereNameContainsSpecialCharacters_CreatesDirectory() { fixture.ExecuteByConfiguration((gateway, rootName, config) => { using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) { gateway.GetDriveAsync(rootName, config.ApiKey, fixture.GetParameters(config)).Wait(); fixture.OnCondition(config, GatewayCapabilities.NewDirectoryItem, () => { using (var namesStream = File.OpenRead($"{nameof(GenericAsyncGatewayTests)}.SpecialCharacters.txt")) using (var reader = new StreamReader(namesStream)) { while (!reader.EndOfStream) { var directoryName = reader.ReadLine().Split(new[] { ' ', '\t' }, 2)[0]; var newDirectory = gateway.NewDirectoryItemAsync(rootName, testDirectory.Id, directoryName).Result; var items = gateway.GetChildItemAsync(rootName, testDirectory.Id).Result; Assert.AreEqual(1, items.Count(i => i.Name == directoryName), $"Expected directory '{directoryName}' is missing"); Assert.AreEqual(items.Single(i => i.Name == directoryName).Id, newDirectory.Id, $"Mismatched directory Id for directory '{directoryName}'"); } } }); } }); }