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);
                }
        }
Пример #2
0
        private SynchronizedItems GetSynchronizedDirectories(string leftDirectoryPath, string rightDirectoryPath)
        {
            var settingsRow = new TestSettingsRow
            {
                LeftDirectory  = new SettingsDirectory(leftDirectoryPath),
                RightDirectory = new SettingsDirectory(rightDirectoryPath)
            };

            return(new SynchronizedItems(settingsRow, new SynchronizedItemFactory(new ItemFactory()),
                                         new SynchronizedItemsStatusAndCommandsUpdater(new SynchronizedItemMatcher())));
        }
        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);
                }
        }