public void RefreshLeftItemStatusesAndCommandsFromChilds_UnknownChild()
        {
            var testSynchronizedItems = new TestSynchronizedItems(null);

            var childSynchronizedDirectories = new TestSynchronizedItems(null);

            childSynchronizedDirectories.LeftItem.UpdateStatus(ItemStatusEnum.Unknown);
            testSynchronizedItems.ChildItemsList.Add(childSynchronizedDirectories);

            var level2Child1 = new TestSynchronizedItems(null);

            level2Child1.LeftItem.UpdateStatus(ItemStatusEnum.Newer);
            level2Child1.LeftItem.SyncCommand.SetCommandAction(() => { return(Task.FromResult(true)); });
            childSynchronizedDirectories.ChildItemsList.Add(level2Child1);

            var level2Child2 = new TestSynchronizedItems(null);

            level2Child2.LeftItem.UpdateStatus(ItemStatusEnum.Missing);
            level2Child2.LeftItem.SyncCommand.SetCommandAction(() => { return(Task.FromResult(true)); });
            childSynchronizedDirectories.ChildItemsList.Add(level2Child2);

            var synchronizedItemsStatusAndCommandsUpdater = new SynchronizedItemsStatusAndCommandsUpdater(null);

            synchronizedItemsStatusAndCommandsUpdater.RefreshLeftItemStatusesAndCommandsFromChilds(testSynchronizedItems);

            // У дочерней строки должен остаться неопределённый статус.
            Assert.Equal(ItemStatusEnum.Unknown, childSynchronizedDirectories.LeftItem.Status.StatusEnum);

            // Статусы родительской строки должны измениться на неопредёлённые.
            Assert.Equal(ItemStatusEnum.Unknown, testSynchronizedItems.LeftItem.Status.StatusEnum);

            // Команд не должно быть ни у дочерней строки, ни у родительской.
            Assert.Null(childSynchronizedDirectories.LeftItem.SyncCommand.CommandAction);
            Assert.Null(testSynchronizedItems.LeftItem.SyncCommand.CommandAction);
        }
        public async Task RefreshLeftItemStatusesAndCommandsFromChilds_CheckCommands(string strLeftStatus)
        {
            var leftStatus = Enum.Parse <ItemStatusEnum>(strLeftStatus);

            var usedCommands = new List <string>(); // Наименования элемнтов, чьи команды будут выполнены.

            var testSynchronizedItems = new TestSynchronizedItems(null);

            for (byte i = 0; i < 4; i++)
            {
                var childSynchronizedItems = new TestSynchronizedItems("Test" + i.ToString());
                testSynchronizedItems.ChildItemsList.Add(childSynchronizedItems);

                // Запишем команды синхронизации для каждого элемента.
                childSynchronizedItems.LeftItem.SyncCommand.SetCommandAction(() =>
                {
                    return(Task.Run(() => usedCommands.Add(childSynchronizedItems.LeftItem.Name)));
                });

                // Лишь половина элементов будет иметь статус для синхронизации и лишь команды этих элементов должны быть выполнены.
                childSynchronizedItems.LeftItem.UpdateStatus(i % 2 == 0 ? leftStatus : ItemStatusEnum.Equally);
            }

            var synchronizedItemsStatusAndCommandsUpdater = new SynchronizedItemsStatusAndCommandsUpdater(null);

            synchronizedItemsStatusAndCommandsUpdater.RefreshLeftItemStatusesAndCommandsFromChilds(testSynchronizedItems);
            await testSynchronizedItems.LeftItem.SyncCommand.Process();

            Assert.Equal(2, usedCommands.Count);
            Assert.Equal("Test0", usedCommands[0]);
            Assert.Equal("Test2", usedCommands[1]);
        }
        public void RefreshLeftItemStatusesAndCommandsFromChilds_CheckStatus(string leftStartStatus, string[] leftItemsStatuses, string leftExpectedStatus)
        {
            var testSynchronizedItems = new TestSynchronizedItems(null);

            testSynchronizedItems.LeftItem.UpdateStatus((ItemStatusEnum)Enum.Parse(typeof(ItemStatusEnum), leftStartStatus));

            foreach (var leftItemStatus in leftItemsStatuses)
            {
                var childSynchronizedItems = new TestSynchronizedItems(null);
                childSynchronizedItems.LeftItem.UpdateStatus((ItemStatusEnum)Enum.Parse(typeof(ItemStatusEnum), leftItemStatus));
                testSynchronizedItems.ChildItemsList.Add(childSynchronizedItems);
            }

            var synchronizedItemsStatusAndCommandsUpdater = new SynchronizedItemsStatusAndCommandsUpdater(null);

            synchronizedItemsStatusAndCommandsUpdater.RefreshLeftItemStatusesAndCommandsFromChilds(testSynchronizedItems);

            Assert.Equal(leftExpectedStatus, testSynchronizedItems.LeftItem.Status.StatusEnum.ToString());
        }