public void Generate_shouldFilterOutTheInboxFolder() { var root = new MegaNzNodeMock { Id = "1", Name = @"\", ParentId = string.Empty, Type = NodeType.Root }; var inboxFolder = new MegaNzNodeMock { Id = "2", Name = null, ParentId = string.Empty, Type = NodeType.Inbox }; var megaNzCollection = new List <INode> { root, inboxFolder }; // Act var generator = new MegaNzItemListGenerator(); MegaNzItem[] result = generator.Generate(megaNzCollection).ToArray(); // Assert result.Length.Should().Be(1); result[0].MegaNzNode.Type.Should().Be(NodeType.Root); }
public void Constructor_usingINodeOfTypeFile_shouldParseTheCorrectLastModificationDatetime() { // We need a structure like this: // root // +--> folder1 // +--> folder2 // +--> file1 var folder1 = new MegaNzNodeMock { Id = "2", Name = "folder1", Owner = "User", ParentId = "1", Size = 0, Type = NodeType.Directory }; var folder2 = new MegaNzNodeMock { Id = "3", Name = "folder2", Owner = "User", ParentId = "2", Size = 0, Type = NodeType.Directory }; var file1 = new MegaNzNodeMock { Id = "4", Name = "file1_[[2016-1-2-3-4-5]].jpeg", Owner = "User", ParentId = "3", Size = 1024, Type = NodeType.File }; var nodeDictionary = new Dictionary <string, INode> { { _root.Id, _root }, { folder1.Id, folder1 }, { folder2.Id, folder2 }, { file1.Id, file1 } }; // Act var file1Item = new MegaNzItem(file1, nodeDictionary); // Assert file1Item.LastModified.Should().HaveValue(); file1Item.LastModified.Value.Year.Should().Be(2016); file1Item.LastModified.Value.Month.Should().Be(1); file1Item.LastModified.Value.Day.Should().Be(2); file1Item.LastModified.Value.Hour.Should().Be(3); file1Item.LastModified.Value.Minute.Should().Be(4); file1Item.LastModified.Value.Second.Should().Be(5); }
public void Generate_shouldFilterOutTheInboxFolderHierarchyNodes() { var root = new MegaNzNodeMock { Id = "1", Name = @"\", ParentId = string.Empty, Type = NodeType.Root }; var inboxFolder = new MegaNzNodeMock { Id = "2", Name = null, ParentId = string.Empty, Type = NodeType.Trash }; var folderChildOfInbox = new MegaNzNodeMock { Id = "3", Name = "folder1", ParentId = inboxFolder.Id, Type = NodeType.Directory }; var fileChildOfInbox = new MegaNzNodeMock { Id = "4", Name = "file1", ParentId = folderChildOfInbox.Id, Type = NodeType.File, Size = 1024, LastModificationDate = new DateTime(2016, 1, 1, 0, 0, 0) }; var megaNzCollection = new List <INode> { root, inboxFolder, folderChildOfInbox, fileChildOfInbox }; // Act var generator = new MegaNzItemListGenerator(); MegaNzItem[] result = generator.Generate(megaNzCollection).ToArray(); // Assert result.Length.Should().Be(1); result[0].MegaNzNode.Type.Should().Be(NodeType.Root); }
public void Constructor_usingINodeOfTypeDirectory_shouldBuildTheCorrectPath() { // We need a structure like this: // root // +--> folder1 // +--> folder2 // +--> folder3 var folder1 = new MegaNzNodeMock { Id = "2", Name = "folder1", Owner = "User", ParentId = "1", Size = 0, Type = NodeType.Directory }; var folder2 = new MegaNzNodeMock { Id = "3", Name = "folder2", Owner = "User", ParentId = "2", Size = 0, Type = NodeType.Directory }; var folder3 = new MegaNzNodeMock { Id = "4", Name = "folder3", Owner = "User", ParentId = "3", Size = 0, Type = NodeType.Directory }; var nodeDictionary = new Dictionary <string, INode> { { _root.Id, _root }, { folder1.Id, folder1 }, { folder2.Id, folder2 }, { folder3.Id, folder3 } }; // Act var folder3Item = new MegaNzItem(folder3, nodeDictionary); // Assert folder3Item.Path.Should().Be(@"\folder1\folder2\folder3\"); // We want to have the backslash at the end of the path for the directory item }
public void Constructor_usingINodeOfTypeFile_shouldBuildTheCorrectPath() { // We need a structure like this: // root // +--> folder1 // +--> folder2 // +--> file1 var folder1 = new MegaNzNodeMock { Id = "2", Name = "folder1", Owner = "User", ParentId = "1", Size = 0, Type = NodeType.Directory }; var folder2 = new MegaNzNodeMock { Id = "3", Name = "folder2", Owner = "User", ParentId = "2", Size = 0, Type = NodeType.Directory }; var file1 = new MegaNzNodeMock { Id = "4", Name = "file1_[[2016-1-1-0-0-1]].jpeg", Owner = "User", ParentId = "3", Size = 1024, Type = NodeType.File }; var nodeDictionary = new Dictionary <string, INode> { { _root.Id, _root }, { folder1.Id, folder1 }, { folder2.Id, folder2 }, { file1.Id, file1 } }; // Act var file1Item = new MegaNzItem(file1, nodeDictionary); // Assert file1Item.Path.Should().Be(@"\folder1\folder2\file1.jpeg"); }
public void Execute_withAnUploadCommand_shouldUploadTheMegaNzItemCollection() { // Arrange const string filename = "File1.jpeg"; var sourcePath = @"c:\testing\" + filename; var lastModifiedDate = new DateTime(2016, 1, 1, 0, 0, 0); // The command list to be executed var commandList = new ICommand[] { new UploadFileCommand() { SourcePath = sourcePath, DestinationPath = @"\", LastModifiedDate = lastModifiedDate } }; // the initial MegaNZ node list const string rootName = @"\"; const string rootPath = @"\"; const string rootMegaNzId = "0"; var mockMegaNzNodeForRemoteRoot = new Mock <INode>(MockBehavior.Strict); mockMegaNzNodeForRemoteRoot.SetupGet(m => m.Id).Returns(rootMegaNzId); mockMegaNzNodeForRemoteRoot.SetupGet(m => m.Type).Returns(NodeType.Root); var remoteItems = new List <MegaNzItem> { new MegaNzItem(mockMegaNzNodeForRemoteRoot.Object, rootName, ItemType.Folder, rootPath, 0) }; var megaNzItemCollection = new MegaNzItemCollection(remoteItems); const string newFileMegaNzId = "1"; var uploadResultNode = new MegaNzNodeMock { Id = newFileMegaNzId, Name = NameHandler.BuildRemoteFileName(filename, lastModifiedDate), ParentId = rootMegaNzId, Size = 1024, Type = NodeType.File, LastModificationDate = new DateTime(2016, 1, 1, 0, 0, 0) }; // The name of the uploaded file var uploadedFileName = NameHandler.BuildRemoteFileName(filename, lastModifiedDate); var mockMegaApiClient = new Mock <IMegaApiClient>(MockBehavior.Strict); var mockProgressNotifier = new Mock <IProgress <double> >(MockBehavior.Strict); mockMegaApiClient.Setup(m => m.UploadAsync(It.IsAny <Stream>(), uploadedFileName, It.Is <INode>(node => node.Id == rootMegaNzId), mockProgressNotifier.Object)) .ReturnsAsync(uploadResultNode); var mockFileManager = new Mock <IFileManager>(MockBehavior.Strict); mockFileManager.Setup(m => m.GetStreamToReadFile(sourcePath)).Returns((FileStream)null); // Act var executor = new CommandExecutor(mockMegaApiClient.Object, _mockLogger.Object); executor.Execute(commandList, megaNzItemCollection, mockFileManager.Object, mockProgressNotifier.Object); // Assert megaNzItemCollection.GetList().Should().Contain(item => item.MegaNzNode.Id == newFileMegaNzId); }
public void Execute_withACreateFolderCommand_shouldUploadTheMegaNzItemCollection() { // Scenario // Local file structure // root // | // +--> folder1 // | // +--> folder2 // // Remote file structure // root // | // +--> folder1 // Arrange var createFolderCommand = new CreateFolderCommand { ParentPath = "\\folder1", Name = "folder2" }; var commandList = new[] { createFolderCommand }; // Remote items // Root in the remote file structure var mockMegaNzNodeForRemoteRoot = new Mock <INode>(MockBehavior.Strict); mockMegaNzNodeForRemoteRoot.SetupGet(m => m.Id).Returns("0"); mockMegaNzNodeForRemoteRoot.SetupGet(m => m.Type).Returns(NodeType.Root); mockMegaNzNodeForRemoteRoot.SetupGet(m => m.Name).Returns("\\"); var megaNzItemRemoteRoot = new MegaNzItem(mockMegaNzNodeForRemoteRoot.Object, "\\", ItemType.Folder, "\\", 0); // Folder1 in the remote file structure var mockMegaNzNodeForRemoteFolder1 = new Mock <INode>(MockBehavior.Strict); mockMegaNzNodeForRemoteFolder1.SetupGet(m => m.Id).Returns("1"); mockMegaNzNodeForRemoteFolder1.SetupGet(m => m.ParentId).Returns("0"); mockMegaNzNodeForRemoteFolder1.SetupGet(m => m.Type).Returns(NodeType.Directory); mockMegaNzNodeForRemoteFolder1.SetupGet(m => m.Name).Returns("folder1"); var megaNzItemForRemoteFolder1 = new MegaNzItem(mockMegaNzNodeForRemoteFolder1.Object, "\\folder1", ItemType.Folder, "\\folder1", 0); var remoteItems = new[] { megaNzItemRemoteRoot, megaNzItemForRemoteFolder1 }; var megaNzItemCollection = new MegaNzItemCollection(remoteItems); // The MegaNzNode for the folder created var mockMegaNzNodeForRemoteFolder2 = new MegaNzNodeMock { Id = "2", Name = "folder2", Type = NodeType.Directory, Size = 0, ParentId = "1" }; var mockMegaApiClient = new Mock <IMegaApiClient>(MockBehavior.Strict); mockMegaApiClient .Setup(m => m.CreateFolder(createFolderCommand.Name, mockMegaNzNodeForRemoteFolder1.Object)) .Returns(mockMegaNzNodeForRemoteFolder2); var mockFileManager = new Mock <IFileManager>(MockBehavior.Strict); var mockProgressNotifier = new Mock <IProgress <double> >(MockBehavior.Strict); // Act var commandExecutor = new CommandExecutor(mockMegaApiClient.Object, _mockLogger.Object); commandExecutor.Execute(commandList, megaNzItemCollection, mockFileManager.Object, mockProgressNotifier.Object); // Assert megaNzItemCollection.GetList().Should().Contain(item => item.MegaNzNode.Id == mockMegaNzNodeForRemoteFolder2.Id); }
public void Generate_shouldReturnTheCorrectCollectionOfItems() { // Given the following file tree in MegaNZ // root // | // +--> Folder1 // | | // | +--> File1_[[2016-1-1-0-0-0]].jpeg // | // +--> File2_[[2017-2-2-1-1-1]].jpeg // // The result collection should contain: // - / (root) // - /Folder1/ // - /Folder1/File1.jpeg (with last modification date = 1st Gen 2016) // - /File2.jpeg (with last modification date = 2st Feb 2016 01:01:01) var root = new MegaNzNodeMock { Id = "1", Name = @"\", ParentId = string.Empty, Type = NodeType.Root }; var folder1 = new MegaNzNodeMock { Id = "2", Name = "Folder1", ParentId = root.Id, Type = NodeType.Directory }; var file1 = new MegaNzNodeMock { Id = "3", Name = "File1_[[2016-1-1-0-0-0]].jpeg", ParentId = folder1.Id, Type = NodeType.File, Size = 1024 }; var file2 = new MegaNzNodeMock { Id = "4", Name = "File2_[[2017-2-2-1-1-1]].jpeg", ParentId = root.Id, Type = NodeType.File, Size = 2048 }; var megaNzCollection = new List <INode> { root, folder1, file1, file2 }; // Act var generator = new MegaNzItemListGenerator(); MegaNzItem[] result = generator.Generate(megaNzCollection).ToArray(); // Assert result.Length.Should().Be(4); result[0].Name.Should().Be(@"\"); result[0].Path.Should().Be(@"\"); result[0].Type.Should().Be(ItemType.Folder); result[1].Name.Should().Be("Folder1"); result[1].Path.Should().Be(@"\Folder1\"); // Forlder's path MUST end with a backslash result[1].Type.Should().Be(ItemType.Folder); result[2].Name.Should().Be("File1.jpeg"); result[2].Path.Should().Be(@"\Folder1\File1.jpeg"); result[2].LastModified.Should().HaveValue(); result[2].LastModified.Value.Year.Should().Be(2016); result[2].LastModified.Value.Month.Should().Be(1); result[2].LastModified.Value.Day.Should().Be(1); result[2].LastModified.Value.Hour.Should().Be(0); result[2].LastModified.Value.Minute.Should().Be(0); result[2].LastModified.Value.Second.Should().Be(0); result[2].Type.Should().Be(ItemType.File); result[3].Name.Should().Be("File2.jpeg"); result[3].Path.Should().Be(@"\File2.jpeg"); result[3].LastModified.Should().HaveValue(); result[3].LastModified.Value.Year.Should().Be(2017); result[3].LastModified.Value.Month.Should().Be(2); result[3].LastModified.Value.Day.Should().Be(2); result[3].LastModified.Value.Hour.Should().Be(1); result[3].LastModified.Value.Minute.Should().Be(1); result[3].LastModified.Value.Second.Should().Be(1); result[3].Type.Should().Be(ItemType.File); }