public void adds_multiple_hidden_columns()
        {
            // ARRANGE
            var viewModel = new ColumnPickerViewModel(_identifier, _columnService.Object, SchedulerService);

            TestScheduler.AdvanceBy(TimeSpan.FromMilliseconds(1));

            var columns = new[]
            {
                viewModel.Left.First(), viewModel.Left.Skip(1)
                .First()
            };

            columns[0]
            .IsSelected = true;
            columns[1]
            .IsSelected = true;

            // ACT
            viewModel.AddCommand.Execute(null);

            // ASSERT
            Assert.That(viewModel.Left.Contains(columns[0]), Is.False);
            Assert.That(viewModel.Left.Contains(columns[1]), Is.False);
            Assert.That(viewModel.Right.Contains(columns[0]), Is.True);
            Assert.That(viewModel.Right.Contains(columns[1]), Is.True);
        }
        public void can_add_hidden_column()
        {
            // ARRANGE
            var viewModel = new ColumnPickerViewModel(_identifier, _columnService.Object, SchedulerService);

            TestScheduler.AdvanceBy(TimeSpan.FromMilliseconds(1));

            // ACT

            viewModel.Left.First().IsSelected = true;

            // ASSERT
            Assert.That(viewModel.AddCommand.CanExecute(null), Is.True);
        }
        public void no_buttons_enabled_when_populated()
        {
            // ARRANGE
            // ACT
            var viewModel = new ColumnPickerViewModel(_identifier, _columnService.Object, SchedulerService);

            TestScheduler.AdvanceBy(TimeSpan.FromMilliseconds(1));

            // ASSERT
            Assert.That(viewModel.AddCommand.CanExecute(null), Is.False);
            Assert.That(viewModel.RemoveCommand.CanExecute(null), Is.False);
            Assert.That(viewModel.MoveupCommand.CanExecute(null), Is.False);
            Assert.That(viewModel.MovedownCommand.CanExecute(null), Is.False);
        }
        public void can_not_move_first_column_up()
        {
            // ARRANGE
            var viewModel = new ColumnPickerViewModel(_identifier, _columnService.Object, SchedulerService);

            TestScheduler.AdvanceBy(TimeSpan.FromMilliseconds(1));

            // ACT

            viewModel.Right.First().IsSelected = true;

            // ASSERT
            Assert.That(viewModel.MoveupCommand.CanExecute(null), Is.False);
        }
        public void populates_hidden_and_visible_columns_when_created()
        {
            // ARRANGE
            // ACT
            var viewModel = new ColumnPickerViewModel(_identifier, _columnService.Object, SchedulerService);

            TestScheduler.AdvanceBy(TimeSpan.FromMilliseconds(1));

            // ASSERT
            Assert.That(viewModel.Left, Is.Not.Empty);
            Assert.That(viewModel.Left.Select(x => x.Name).SequenceEqual(_hiddenColumns), Is.True);

            Assert.That(viewModel.Right, Is.Not.Empty);
            Assert.That(viewModel.Right.Select(x => x.Name).SequenceEqual(_visibleColumns), Is.True);
        }
        public void can_remove_multiple_visible_columns()
        {
            // ARRANGE
            var viewModel = new ColumnPickerViewModel(_identifier, _columnService.Object, SchedulerService);

            TestScheduler.AdvanceBy(TimeSpan.FromMilliseconds(1));

            // ACT

            viewModel.Right.First().IsSelected = true;
            viewModel.Right.Skip(1).First().IsSelected = true;

            // ASSERT
            Assert.That(viewModel.RemoveCommand.CanExecute(null), Is.True);
        }
        public void removes_visible_column()
        {
            // ARRANGE
            var viewModel = new ColumnPickerViewModel(_identifier, _columnService.Object, SchedulerService);

            TestScheduler.AdvanceBy(TimeSpan.FromMilliseconds(1));

            var column = viewModel.Right.First();

            column.IsSelected = true;

            // ACT
            viewModel.RemoveCommand.Execute(null);

            // ASSERT
            Assert.That(viewModel.Left.Contains(column), Is.True);
            Assert.That(viewModel.Right.Contains(column), Is.False);
        }
        public void moves_visible_column_up()
        {
            // ARRANGE
            var viewModel = new ColumnPickerViewModel(_identifier, _columnService.Object, SchedulerService);

            TestScheduler.AdvanceBy(TimeSpan.FromMilliseconds(1));

            var column      = viewModel.Right.Last();
            var columnIndex = viewModel.Right.ToList().IndexOf(column);

            column.IsSelected = true;

            // ACT
            viewModel.MoveupCommand.Execute(null);

            // ASSERT
            Assert.That(viewModel.Right.ToList().IndexOf(column), Is.EqualTo(--columnIndex));
        }