public ArrangementPageViewModel(InteriorField[,] layout, Chair chairModel, Table tableModel)
        {
            this.Rows = layout.GetLength(0);
            this.Columns = layout.GetLength(1);
            this.Arrangement = new ObservableCollection<ArrangedFieldViewModel>();
            for (int y = 0; y < layout.GetLength(0); y++)
                for (int x = 0; x < layout.GetLength(1); x++)
                {
                    this.Arrangement.Add(new ArrangedFieldViewModel((layout[y, x])));
                }

            this.Palettes = new ObservableCollection<string>(new[] { "Light", "Dark" });
            this.ChairModel = chairModel;
            this.TableModel = tableModel;

            Pathway autoPathway = new Pathway();
            Flower autoFlower = new Flower();
            foreach (ArrangedFieldViewModel field in this.Arrangement)
            {
                if (field?.PlaceHolder?.CanHoldObject(autoFlower) ?? false) field.ArrangeObjectCommand.Execute(autoFlower);
                else if (field?.PlaceHolder?.CanHoldObject(autoPathway) ?? false) field.ArrangeObjectCommand.Execute(autoPathway);
            }

            this.ClearAllCommand = new DelegateCommand((param) => this.ClearAll());
            this.FillAllCommand = new DelegateCommand((param) => this.FillAll());
            this.RemoveObjectCommand = new DelegateCommand(this.RemoveObject, this.CanRemoveObject);
        }
 public void ShouldInitializeModelsCorrectly()
 {
     Chair chairModel = new Chair();
     Table tableModel = new Table();
     ArrangementPageViewModel vm = new ArrangementPageViewModel(Layout, chairModel, tableModel);
     Assert.AreEqual(chairModel, vm.ChairModel);
     Assert.AreEqual(tableModel, vm.TableModel);
 }
            public void ShouldInitializeDimensionsCorrectly()
            {
                Chair chairModel = new Chair();
                Table tableModel = new Table();
                ArrangementPageViewModel vm = new ArrangementPageViewModel(Layout, chairModel, tableModel);

                Assert.AreEqual(2, vm.Rows);
                Assert.AreEqual(3, vm.Columns);
            }
            public void ShouldInitializeNonFunitureCorrectly()
            {
                Chair chairModel = new Chair();
                Table tableModel = new Table();
                ArrangementPageViewModel vm = new ArrangementPageViewModel(Layout, chairModel, tableModel);

                Assert.IsTrue(vm.Arrangement
                    .Where(arrangement => !((arrangement.PlaceHolder is FurnitureField) || (arrangement.PlaceHolder is EmptySpaceField)))
                    .All(arrangement => arrangement.ArrangedItems.Any()));
            }
            public void ShouldClearArrangedModels()
            {
                Chair chairModel = new Chair();
                Table tableModel = new Table();
                ArrangementPageViewModel vm = new ArrangementPageViewModel(Layout, chairModel, tableModel);
                vm.Arrangement[0].ArrangeObjectCommand.Execute(chairModel);
                vm.Arrangement[1].ArrangeObjectCommand.Execute(tableModel);

                Assert.IsTrue(vm.ClearAllCommand.CanExecute(null));
                vm.ClearAllCommand.Execute(null);
                Assert.AreEqual(null, vm.Arrangement[0].ArrangedItems.FirstOrDefault());
                Assert.AreEqual(null, vm.Arrangement[1].ArrangedItems.FirstOrDefault());
            }
            public void ShouldFillAllEmptyFields1()
            {
                Chair chairModel = new Chair();
                Table tableModel = new Table();
                ArrangementPageViewModel vm = new ArrangementPageViewModel(Layout, chairModel, tableModel);

                Assert.AreEqual(null, vm.Arrangement[0].ArrangedItems.FirstOrDefault());
                Assert.AreEqual(null, vm.Arrangement[1].ArrangedItems.FirstOrDefault());

                Assert.IsTrue(vm.FillAllCommand.CanExecute(null));
                vm.FillAllCommand.Execute(null);

                Assert.IsTrue(vm.Arrangement[0].ArrangedItems.First() is Chair);
                Assert.IsTrue(vm.Arrangement[1].ArrangedItems.First() is Table);
            }
            public void ShouldBeDisabledForNonFurniture2()
            {
                Chair chairModel = new Chair();
                Table tableModel = new Table();
                ArrangementPageViewModel vm = new ArrangementPageViewModel(Layout, chairModel, tableModel);

                ArrangedFieldViewModel field = new ArrangedFieldViewModel(new FlowerField());
                field.ArrangeObjectCommand.Execute(new Pathway());
                Assert.IsFalse(vm.RemoveObjectCommand.CanExecute(field));
            }
            public void ShouldNotReplaceFilledFields()
            {
                Chair chairModel = new Chair();
                Table tableModel = new Table();
                ArrangementPageViewModel vm = new ArrangementPageViewModel(Layout, chairModel, tableModel);

                vm.Arrangement[0].ArrangeObjectCommand.Execute(chairModel);
                vm.FillAllCommand.Execute(null);

                Assert.AreEqual(chairModel, vm.Arrangement[0].ArrangedItems.First());
                Assert.IsTrue(vm.Arrangement[1].ArrangedItems.First() is Table);
                Assert.IsFalse(vm.Arrangement[1].ArrangedItems.First() == tableModel);
            }
            public void ShouldFillAllEmptyFields2()
            {
                Chair chairModel = new Chair();
                Table tableModel = new Table();
                ArrangementPageViewModel vm = new ArrangementPageViewModel(Layout, chairModel, tableModel);

                Assert.AreEqual(null, vm.Arrangement[0].ArrangedItems.FirstOrDefault());
                Assert.AreEqual(null, vm.Arrangement[1].ArrangedItems.FirstOrDefault());

                Assert.IsTrue(vm.FillAllCommand.CanExecute(null));
                vm.FillAllCommand.Execute(null);

                Assert.IsTrue(vm.Arrangement[0].ArrangedItems.First() is Chair);
                Assert.IsTrue(vm.Arrangement[1].ArrangedItems.First() is Table);

                Assert.IsFalse(vm.Arrangement.Any(a => !(a.PlaceHolder is FurnitureField) && a.ArrangedItems.Any(item => item is FurnitureItem)));
            }