public async void LoadChildItems_RefreshStatusAndCommandsFromChilds() { const string dir1Name = "Dir1"; const string dir2Name = "Dir2"; const string file1Name = "File1"; const string file2Name = "File2"; const string file3Name = "File3"; var updateDate = DateTime.Now; using (var leftDirectory = new Infrastructure.TestDirectory()) using (var rightDirectory = new Infrastructure.TestDirectory()) { Infrastructure.TestDirectory.CreateFiles(leftDirectory.CreateDirectory(dir1Name), new Dictionary <string, DateTime> { { file1Name, updateDate } }); Infrastructure.TestDirectory.CreateFiles(leftDirectory.CreateDirectory(dir2Name), new Dictionary <string, DateTime> { { file2Name, updateDate }, { file3Name, updateDate } }); Infrastructure.TestDirectory.CreateFiles(rightDirectory.CreateDirectory(dir1Name), new Dictionary <string, DateTime> { { file1Name, updateDate } }); Infrastructure.TestDirectory.CreateFiles(rightDirectory.CreateDirectory(dir2Name), new Dictionary <string, DateTime> { { file2Name, updateDate }, { file3Name, updateDate } }); var settingsRow = new TestSettingsRow { LeftDirectory = new SettingsDirectory(leftDirectory.FullPath), RightDirectory = new SettingsDirectory(rightDirectory.FullPath) }; var testSynchronizedItemsStatusAndCommandsUpdater = new TestSynchronizedItemsStatusAndCommandsUpdater(); var synchronizedItems = new SynchronizedItems(settingsRow, new SynchronizedItemFactory(new ItemFactory()), testSynchronizedItemsStatusAndCommandsUpdater); await Task.WhenAll(synchronizedItems.LeftDirectory.Load(), synchronizedItems.RightDirectory.Load()); synchronizedItems.LoadChildItems(); var refreshedLeftItemSynchronizedItemsList = testSynchronizedItemsStatusAndCommandsUpdater.RefreshedLeftItemSynchronizedItemsList; var refreshedRightItemSynchronizedItemsList = testSynchronizedItemsStatusAndCommandsUpdater.RefreshedRightItemSynchronizedItemsList; // Каждая директория должна была обновить свои статусы и команды. Assert.Equal(3, refreshedLeftItemSynchronizedItemsList.Count); Assert.Equal(3, refreshedRightItemSynchronizedItemsList.Count); // В таком порядке должны были обновляться статусы элементов. Assert.Equal(refreshedLeftItemSynchronizedItemsList[0], synchronizedItems.ChildItems[0]); Assert.Equal(refreshedLeftItemSynchronizedItemsList[1], synchronizedItems.ChildItems[1]); Assert.Equal(refreshedLeftItemSynchronizedItemsList[2], synchronizedItems); Assert.Equal(refreshedRightItemSynchronizedItemsList[0], synchronizedItems.ChildItems[0]); Assert.Equal(refreshedRightItemSynchronizedItemsList[1], synchronizedItems.ChildItems[1]); Assert.Equal(refreshedRightItemSynchronizedItemsList[2], synchronizedItems); } }
public async Task LoadDirectoryAndFile() { const string directoryAndFileName = "Item"; using (var leftDirectory = new Infrastructure.TestDirectory()) using (var rightDirectory = new Infrastructure.TestDirectory()) { var updateDate = DateTime.Now; leftDirectory.CreateFiles(new Dictionary <string, DateTime> { { directoryAndFileName, updateDate } }); // В директорию надо поместить хотя бы один файл, чтобы она была видна. Infrastructure.TestDirectory.CreateFiles(rightDirectory.CreateDirectory(directoryAndFileName), new Dictionary <string, DateTime> { { "1", updateDate } }); var settingsRow = new TestSettingsRow { LeftDirectory = new SettingsDirectory(leftDirectory.FullPath), RightDirectory = new SettingsDirectory(rightDirectory.FullPath) }; var testSynchronizedItemsStatusAndCommandsUpdater = new TestSynchronizedItemsStatusAndCommandsUpdater(); var synchronizedDirectories = new SynchronizedItems(settingsRow, new SynchronizedItemFactory(new ItemFactory()), testSynchronizedItemsStatusAndCommandsUpdater); await synchronizedDirectories.Load(); Assert.Equal(2, synchronizedDirectories.ChildItemsCount); // Одна модель на директории, одна модель на файлы. // Сначала директория, потом файл. var childDirectories1 = synchronizedDirectories.ChildItems[0]; Assert.Equal(directoryAndFileName, childDirectories1.LeftItem.Name); Assert.Equal(directoryAndFileName, childDirectories1.RightItem.Name); Assert.NotNull(childDirectories1.RightItem.Directory); Assert.True(childDirectories1.RightItem.IsDirectory); // Даже если элемент отсутствует, а присутствующий является директорией, то и этот должен быть директорией. Assert.Null(childDirectories1.LeftItem.Directory); Assert.True(childDirectories1.LeftItem.IsDirectory); var childDirectories2 = synchronizedDirectories.ChildItems[1]; Assert.Equal(directoryAndFileName, childDirectories2.LeftItem.Name); Assert.Equal(directoryAndFileName, childDirectories2.RightItem.Name); Assert.Null(childDirectories2.LeftItem.Directory); Assert.False(childDirectories2.LeftItem.IsDirectory); Assert.Null(childDirectories2.RightItem.Directory); Assert.False(childDirectories2.RightItem.IsDirectory); } }
public async Task LoadDirectories_OneEmptyDirectory() { const string directoryName = "Directory"; const string fileName = "File"; var newerDate = new DateTime(2019, 1, 1); var olderDate = new DateTime(2018, 1, 1); using (var leftDirectory = new Infrastructure.TestDirectory()) using (var rightDirectory = new Infrastructure.TestDirectory()) { var childLeftDirectoryPath = leftDirectory.CreateDirectory(directoryName, newerDate); Infrastructure.TestDirectory.CreateFiles(childLeftDirectoryPath, new Dictionary <string, DateTime> { { fileName, DateTime.Now } }); rightDirectory.CreateDirectory(directoryName, olderDate); var settingsRow = new TestSettingsRow { LeftDirectory = new SettingsDirectory(leftDirectory.FullPath), RightDirectory = new SettingsDirectory(rightDirectory.FullPath) }; var testSynchronizedItemsStatusAndCommandsUpdater = new TestSynchronizedItemsStatusAndCommandsUpdater(); var synchronizedDirectories = new SynchronizedItems(settingsRow, new SynchronizedItemFactory(new ItemFactory()), testSynchronizedItemsStatusAndCommandsUpdater); await synchronizedDirectories.Load(); Assert.Single(synchronizedDirectories.ChildItems); var childDirectories = synchronizedDirectories.ChildItems[0]; Assert.Equal(directoryName, childDirectories.LeftItem.Name); Assert.Equal(directoryName, childDirectories.RightItem.Name); Assert.NotNull(childDirectories.LeftItem.Directory); // Справа реально директории нет, потому что пустые директории не учитываются, но элемент помечен как директория. Assert.Null(childDirectories.RightItem.Directory); Assert.True(childDirectories.RightItem.IsDirectory); Assert.Empty(childDirectories.ChildItems); } }
public async Task Load_RefreshStatusAndCommandsFromChilds() { const string directoryName = "Directory"; const string fileName = "File"; var updateDate = DateTime.Now; using (var leftDirectory = new Infrastructure.TestDirectory()) using (var rightDirectory = new Infrastructure.TestDirectory()) { var childLeftDirectoryPath = leftDirectory.CreateDirectory(directoryName, updateDate); var childRightDirectoryPath = rightDirectory.CreateDirectory(directoryName, updateDate); Infrastructure.TestDirectory.CreateFiles(childLeftDirectoryPath, new Dictionary <string, DateTime> { { fileName, updateDate } }); Infrastructure.TestDirectory.CreateFiles(childRightDirectoryPath, new Dictionary <string, DateTime> { { fileName, updateDate } }); var settingsRow = new TestSettingsRow { LeftDirectory = new SettingsDirectory(leftDirectory.FullPath), RightDirectory = new SettingsDirectory(rightDirectory.FullPath) }; var testSynchronizedItemsStatusAndCommandsUpdater = new TestSynchronizedItemsStatusAndCommandsUpdater(); var synchronizedDirectories = new SynchronizedItems(settingsRow, new SynchronizedItemFactory(new ItemFactory()), testSynchronizedItemsStatusAndCommandsUpdater); await synchronizedDirectories.Load(); Assert.Single(synchronizedDirectories.ChildItems); var childDirectories = synchronizedDirectories.ChildItems[0]; var refreshedLeftItemSynchronizedItemsList = testSynchronizedItemsStatusAndCommandsUpdater.RefreshedLeftItemSynchronizedItemsList; var refreshedRightItemSynchronizedItemsList = testSynchronizedItemsStatusAndCommandsUpdater.RefreshedRightItemSynchronizedItemsList; Assert.Equal(2, refreshedLeftItemSynchronizedItemsList.Count); Assert.Equal(2, refreshedRightItemSynchronizedItemsList.Count); Assert.Equal(childDirectories, refreshedLeftItemSynchronizedItemsList[0]); Assert.Equal(childDirectories, refreshedRightItemSynchronizedItemsList[0]); Assert.Equal(synchronizedDirectories, refreshedLeftItemSynchronizedItemsList[1]); Assert.Equal(synchronizedDirectories, refreshedRightItemSynchronizedItemsList[1]); } }
public async Task LoadFiles() { const string file1Name = "File1"; const string file2Name = "File2"; const string file3Name = "File3"; var updateFileDate = DateTime.Now; var filesDirectoinaries = new Dictionary <string, DateTime> { { file1Name, updateFileDate }, { file2Name, updateFileDate }, { file3Name, updateFileDate } }; using (var leftDirectory = new Infrastructure.TestDirectory()) using (var rightDirectory = new Infrastructure.TestDirectory()) { leftDirectory.CreateFiles(filesDirectoinaries); rightDirectory.CreateFiles(filesDirectoinaries); var settingsRow = new TestSettingsRow { LeftDirectory = new SettingsDirectory(leftDirectory.FullPath), RightDirectory = new SettingsDirectory(rightDirectory.FullPath) }; var testSynchronizedItemsStatusAndCommandsUpdater = new TestSynchronizedItemsStatusAndCommandsUpdater(); var synchronizedDirectories = new SynchronizedItems(settingsRow, new SynchronizedItemFactory(new ItemFactory()), testSynchronizedItemsStatusAndCommandsUpdater); await synchronizedDirectories.Load(); Assert.Equal(3, synchronizedDirectories.ChildItemsCount); var directories = synchronizedDirectories.ChildItems[0]; Assert.Equal(file1Name, directories.LeftItem.Name); Assert.Equal(file1Name, directories.RightItem.Name); // Это файлы. Assert.False(directories.LeftItem.IsDirectory); Assert.Null(directories.LeftItem.Directory); Assert.False(directories.RightItem.IsDirectory); Assert.Null(directories.RightItem.Directory); directories = synchronizedDirectories.ChildItems[1]; Assert.Equal(file2Name, directories.LeftItem.Name); Assert.Equal(file2Name, directories.RightItem.Name); // Это файлы. Assert.False(directories.LeftItem.IsDirectory); Assert.Null(directories.LeftItem.Directory); Assert.False(directories.RightItem.IsDirectory); Assert.Null(directories.RightItem.Directory); directories = synchronizedDirectories.ChildItems[2]; Assert.Equal(file3Name, directories.LeftItem.Name); Assert.Equal(file3Name, directories.RightItem.Name); // Это файлы. Assert.False(directories.LeftItem.IsDirectory); Assert.Null(directories.LeftItem.Directory); Assert.False(directories.RightItem.IsDirectory); Assert.Null(directories.RightItem.Directory); } }