public void DeleteCommand_WhenItemDeletedFromTheCollection_CallsRepositoryDelete()
        {
            var repository = Substitute.For<INewspaperAdRepository>();
            repository.GetAllAdvertisements().Returns(new List<Advertisement>());
            bool deleteCalled;
            Newspaper deletedModel;

            var model1 = new Newspaper {Name = "Paper 1"};
            var model2 = new Newspaper {Name = "Paper 2"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var paperItemVm2 = new NewspaperItemViewModel(repository) {Model = model2};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);

            repository.When(x => x.Delete(model1)).Do(x => RepositoryUpdateFields(x, out deleteCalled, out deletedModel));

            collectionViewModel.Newspapers.Add(paperItemVm1);
            collectionViewModel.Newspapers.Add(paperItemVm2);

            //	Act
            collectionViewModel.Newspapers.Remove(paperItemVm1);
            paperItemVm1.DbStatus.Should().Be(DbModificationState.Deleted, "State of object should be deleted.");

            //	Assert
            repository.Received().Save(model1);
        }
        public void AddAdvertisement_WithValidAd_AddsCurrentNewspaperItemToNewspapersCollectionInTheAddedAd()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var detailViewModel = new NewspaperDetailViewModel(repository);
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            var paperModel1 = new Newspaper() {Name = "New paper 1"};
            var paperItemViewModel1 = new NewspaperItemViewModel(repository) {Model = paperModel1};
            var adModel = new Advertisement() {Name = "Ad 1 Name", Text = "Ad 1 text."};
            var adItemViewModel = new AdvertisementItemViewModel(repository) {Model = adModel};
            collectionViewModel.Newspapers.Add(paperItemViewModel1);
            collectionViewModel.CurrentItem.Should().Be(paperItemViewModel1, "The current item is the item that was added.");
            detailViewModel.ItemViewModel.Should().Be(collectionViewModel.CurrentItem,
                                                      "The detail view model references the collection's current item.");
            paperItemViewModel1.Advertisements.Count.Should().Be(0, "No newspapers are referenced in the advertisement.");
            adItemViewModel.Newspapers.Count.Should().Be(0, "There are no papers in this ad's collection.");

            //	Act
            paperItemViewModel1.Advertisements.Add(adItemViewModel);

            //	Assert
            paperItemViewModel1.Advertisements.Count.Should().Be(1, "One item was added");
            adItemViewModel.Newspapers.Count.Should().Be(1, "One newspaper reference was added to this advertisement.");
            adItemViewModel.Newspapers.ToList().First().Should().Be(collectionViewModel.CurrentItem,
                                                                    "The paper added to the advertisment's newspaper collection was the Newspaper collection's CurrentItem");
        }
        public void AddItemCommand_WhenInvokedAgainstEmptyNewspapersCollection_ReturnsItemViewModelAsCurrentItemInCollection()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var detailViewModel = new NewspaperDetailViewModel(repository);
            var collectionViewModel = new NewspaperCollectionViewModel(repository);

            //	Act
            detailViewModel.AddItemCommand.Execute(null);

            //	Assert
            detailViewModel.ItemViewModel.Should().Be(collectionViewModel.CurrentItem,
                                                      "The detail view model should be the CurrentItem in the collection.");
        }
        public void AddingItemMessageHandler_WhenInvoked_CallsRepositorySaveWithNewItem()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var message = new AddingNewspaperItemMessage();
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.Newspapers.Count.Should().Be(0, "There are no items in the collection initially.");

            //	Act
            Messenger.Default.Send(message);

            //	Assert
            repository.Received().Save(collectionViewModel.Newspapers.First().Model);
        }
        public void AddingItemMessageHandler_WhenInvoked_AddsNewItemToNewspapersCollection()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var message = new AddingNewspaperItemMessage();
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.Newspapers.Count.Should().Be(0, "There are no items in the collection initially.");
            //	Act
            Messenger.Default.Send(message);

            //	Assert
            collectionViewModel.Newspapers.Count.Should().Be(1, "A new item should have been added to the collection.");
            collectionViewModel.Newspapers.First().Name.Should().Be(Newspaper.MSG_NEW_NEWSPAPER_NAME,
                                                                    "The new item should be a new Newspaper.");
        }
        public void AddingItemMessage_WhenReceived_AddsNewNewspaperToCollection()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var detailViewModel = new NewspaperDetailViewModel(repository);
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            var countBeforeAdd = collectionViewModel.Newspapers.Count;
            countBeforeAdd.Should().Be(0, "The collection should be empty");

            //	Act
            detailViewModel.AddItemCommand.Execute(null);
            var countAfterAdd = collectionViewModel.Newspapers.Count;

            //	Assert
            countAfterAdd.Should().Be(1, "One item should have been added.");
        }
        public void NewspaperDetailItem_WhenNewspaperCurrentItemChangedMessageReceived_ResetsItemViewModelToValueSentInMessage()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var detailViewModel = new NewspaperDetailViewModel(repository);
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            var paperModel1 = new Newspaper() {Name = "New paper 1"};
            var paperModel2 = new Newspaper() {Name = "New paper 2"};
            var paperItemViewModel1 = new NewspaperItemViewModel(repository) {Model = paperModel1};
            var paperItemViewModel2 = new NewspaperItemViewModel(repository) {Model = paperModel2};
            collectionViewModel.Newspapers.Add(paperItemViewModel1);
            collectionViewModel.Newspapers.Add(paperItemViewModel2);
            collectionViewModel.CurrentItem.Should().Be(paperItemViewModel2);

            //	Act
            collectionViewModel.CurrentItem = paperItemViewModel1;

            //	Assert
            detailViewModel.ItemViewModel.Should().Be(paperItemViewModel1);
        }
        public void CancelCommand_WhenInvoked_ResetsNameToCollectionCurrentValue()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var detailViewModel = new NewspaperDetailViewModel(repository);
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            detailViewModel.AddItemCommand.Execute(null);
            collectionViewModel.CurrentItem.Should().Be(detailViewModel.ItemViewModel,
                                                        "The detail model points to the Collection CurrentItem");
            var oldName = collectionViewModel.CurrentItem.Name;
            var newName = "Changed Newspaper Name";
            detailViewModel.Name = newName;
            collectionViewModel.CurrentItem.Name.Should().Be(oldName, "Name in the collection should not change");
            detailViewModel.Name.Should().Be(newName, "Alteration is reflected in the detail view model");

            //	Act
            detailViewModel.CancelItemCommand.Execute(null);

            //	Assert
            detailViewModel.Name.Should().Be(oldName, "The Newspaper name should revert back");
            collectionViewModel.CurrentItem.Should().Be(detailViewModel.ItemViewModel,
                                                        "The entire instance should have reverted back to the original value");
        }
        public void AddingItemMessageHandler_WhenInvoked_SendsCurrentItemChangedMessage()
        {
            //  Arrange
            var repository = GetNewspaperRepository();
            var message = new AddingNewspaperItemMessage();
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            var changedMessageReceived = false;
            NewspaperItemViewModel receivedItemViewModel = null;

            collectionViewModel.Newspapers.Count.Should().Be(0, "There are no items in the collection initially.");
            Messenger.Default.Register<CurrentNewspaperItemChangedMessage>(this, msg =>
                                                                                 {
                                                                                     changedMessageReceived = true;
                                                                                     receivedItemViewModel = msg.ItemViewModel;
                                                                                 });
            //	Act
            Messenger.Default.Send(message);

            //	Assert
            changedMessageReceived.Should().Be(true, "The message was sent from the NewspaperCollectionsViewModel.");
            receivedItemViewModel.Should().Be(collectionViewModel.Newspapers.First(),
                                              "The item received in the message matches the CurrentItem in the collection.");
        }
        public void CurrentItem_AfterDeletingLastItemOnNewspapersCollection_SetToLastItemInNewspapersCollection()
        {
            //	Arrange
            var repository = GetNewspaperRepository();
            var model1 = new Newspaper {Name = "Paper 1"};
            var model2 = new Newspaper {Name = "Paper 2"};
            var model3 = new Newspaper {Name = "Paper 3"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var paperItemVm2 = new NewspaperItemViewModel(repository) {Model = model2};
            var paperItemVm3 = new NewspaperItemViewModel(repository) {Model = model3};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.Newspapers.Add(paperItemVm1);
            collectionViewModel.Newspapers.Add(paperItemVm2);
            collectionViewModel.Newspapers.Add(paperItemVm3);
            collectionViewModel.CurrentItem.Should().Be(paperItemVm3, "CurrentItem should be the last item added.");

            //	Act
            collectionViewModel.Newspapers.Remove(paperItemVm3);

            //	Assert
            collectionViewModel.CurrentItem.Should().Be(paperItemVm2,
                                                        "Removing the last entry makes the current last entry the CurrentItem");
        }
        public void SelectedItemChangedHandler_WhenInvoked_SetsCurrentItemToNewSelection()
        {
            //	Arrange
            var repository = GetNewspaperRepository();
            var model1 = new Newspaper {Name = "Paper 1"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.CurrentItem.Should().Be(null, "There is no current item in an empty list.");

            //	Act
            collectionViewModel.Newspapers.Add(paperItemVm1);

            //	Assert
            collectionViewModel.CurrentItem.Should().Be(paperItemVm1, "The current item is now");
        }
        public void SelectedItemChangedHandler_WhenCollectionChanged_IsCalled()
        {
            //	Arrange
            var repository = GetNewspaperRepository();
            var collectionChangedCalled = false;
            var model1 = new Newspaper {Name = "Paper 1"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.SelectedItemChangedCommand =
                new RelayCommand<RoutedPropertyChangedEventArgs<object>>((args) => { collectionChangedCalled = true; });
            collectionViewModel.Newspapers.Add(paperItemVm1);

            //	Act
            collectionViewModel.SelectedItemChangedCommand.Execute(null);
            //	Assert
            collectionChangedCalled.Should().Be(true, "The event was called");
        }
        public void SaveCommand_WhenPopulatedAndNewItemAdded_IsExecuted()
        {
            //	Arrange
            var saveCommandCalled = false;
            var repository = GetNewspaperRepository();
            var model1 = new Newspaper {Name = "Paper 1"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.SaveCommand = new RelayCommand(() => { saveCommandCalled = true; });

            //	Act
            collectionViewModel.Newspapers.Add(paperItemVm1);

            //	Assert
            repository.Received().Save(model1);
        }
        public void RemovingItemMessageHandler_WhenInvoked_SendsCurrentItemChangedMessage()
        {
            //	Arrange
            var itemChangedMessageReceived = false;
            NewspaperItemViewModel changedItemViewModel = null;
            var repository = GetNewspaperRepository();

            var model1 = new Newspaper {Name = "Paper 1"};
            var model2 = new Newspaper {Name = "Paper 2"};
            var model3 = new Newspaper {Name = "Paper 3"};

            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var paperItemVm2 = new NewspaperItemViewModel(repository) {Model = model2};
            var paperItemVm3 = new NewspaperItemViewModel(repository) {Model = model3};

            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.Newspapers.Add(paperItemVm1);
            collectionViewModel.Newspapers.Add(paperItemVm2);
            collectionViewModel.Newspapers.Add(paperItemVm3);

            collectionViewModel.CurrentItem.Should().Be(paperItemVm3, "CurrentItem should be the last item added.");
            collectionViewModel.Newspapers.Count.Should().Be(3, "There are now three items in the list.");

            var message = new RemovingNewspaperItemMessage(paperItemVm2);
            Messenger.Default.Register<CurrentNewspaperItemChangedMessage>(this, (msg) =>
                                                                                 {
                                                                                     itemChangedMessageReceived = true;
                                                                                     changedItemViewModel = msg.ItemViewModel;
                                                                                 });

            //	Act
            Messenger.Default.Send<RemovingNewspaperItemMessage>(message);

            //	Assert
            itemChangedMessageReceived.Should().Be(true, "The message was received from the collection view model.");
            changedItemViewModel.Should().Be(collectionViewModel.CurrentItem,
                                             "The item sent is the current item from the collection view model.");
        }
        public void SelectedItemChangedHandler_WhenInvoked_SendsMessageNewspaperChanged()
        {
            //	Arrange
            var messageReceived = false;
            NewspaperItemViewModel vm = null;
            var repository = GetNewspaperRepository();
            var model1 = new Newspaper {Name = "Paper 1"};
            var model2 = new Newspaper {Name = "Paper 2"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var paperItemVm2 = new NewspaperItemViewModel(repository) {Model = model2};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            Messenger.Default.Register<CurrentNewspaperItemChangedMessage>(this, (msg) =>
                                                                                 {
                                                                                     messageReceived = true;
                                                                                     vm = msg.ItemViewModel;
                                                                                 });

            collectionViewModel.Newspapers.Add(paperItemVm1);
            collectionViewModel.Newspapers.Add(paperItemVm2);
            var args = new RoutedPropertyChangedEventArgs<object>(null, paperItemVm2);

            //	Act
            collectionViewModel.SelectedItemChangedCommand.Execute(args);

            //	Assert
            messageReceived.Should().Be(true, "The CurrentItemChangedMessage message was sent.");
            collectionViewModel.CurrentItem.Should().Be(paperItemVm2, "The current item is the last one added.");
            vm.Model.Should().Be(paperItemVm2.Model, "The added model was sent in the message.");
        }
        public void SaveCommand_WhenInvoked_UpdatesNewspaperNameInCollectionCurrentItem()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var detailViewModel = new NewspaperDetailViewModel(repository);
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            detailViewModel.AddItemCommand.Execute(null);
            var originalName = detailViewModel.Name;
            var newName = "Changed Newspaper Name";
            detailViewModel.Name = newName;
            Newspaper model = null;
            collectionViewModel.CurrentItem.Name.Should().Be(originalName, "Name does not change until Save command.");
            detailViewModel.ItemViewModel.Name.Should().Be(originalName, "Name does not change until Save command.");
            repository.WhenForAnyArgs(r => r.Save(detailViewModel.ItemViewModel.Model)).Do(
                (newspaper) => { model = (Newspaper) newspaper.Args()[0]; });
            //	Act
            detailViewModel.SaveItemCommand.Execute(new SaveNewspaperItemMessage(detailViewModel.ItemViewModel));

            //	Assert
            detailViewModel.Name.Should().Be(detailViewModel.ItemViewModel.Name, "ItemViewModel should have been updated");
            detailViewModel.ItemViewModel.Should().Be(collectionViewModel.CurrentItem,
                                                      "CurrentItem should be the same as detail ItemViewModel");
            repository.Received().Save(detailViewModel.ItemViewModel.Model);
        }
        public void Newspapers_DeleteExistingItem_RemovesItemFromCollection()
        {
            //	Arrange
            var repository = GetNewspaperRepository();
            var model1 = new Newspaper {Name = "Paper 1"};
            var model2 = new Newspaper {Name = "Paper 2"};
            var model3 = new Newspaper {Name = "Paper 3"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var paperItemVm2 = new NewspaperItemViewModel(repository) {Model = model2};
            var paperItemVm3 = new NewspaperItemViewModel(repository) {Model = model3};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.Newspapers.Add(paperItemVm1);
            collectionViewModel.Newspapers.Add(paperItemVm2);
            collectionViewModel.Newspapers.Add(paperItemVm3);
            var itemsInCollection = new List<NewspaperItemViewModel>() {paperItemVm1, paperItemVm3};

            //	Act
            collectionViewModel.Newspapers.Remove(paperItemVm2);

            //	Assert
            collectionViewModel.Newspapers.ShouldBeEquivalentTo(itemsInCollection,
                                                                "The items in the object match the items in the list.");
        }
        public void SavingItemMessageHandler_WhenInvoked_CallsRepositorySaveOnCurrentItem()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var model1 = new Newspaper {Name = "Paper 1"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.CurrentItem.Should().Be(null, "There is no current item in an empty list.");

            //	Act
            collectionViewModel.Newspapers.Add(paperItemVm1);

            //	Assert
            repository.Received().Save(model1);
        }
        public void SaveCommand_WhenInvoked_CallsRepositorySaveOnCurrentItem()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var saveCalled = false;
            Newspaper savedModel;

            var model1 = new Newspaper {Name = "Paper 1"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);

            repository.When(x => x.Save(model1)).Do(x => RepositoryUpdateFields(x, out saveCalled, out savedModel));
            collectionViewModel.Newspapers.Add(paperItemVm1);
            var currentItem = collectionViewModel.CurrentItem;

            //	Act
            collectionViewModel.SaveCommand.Execute(paperItemVm1);

            //	Assert
            repository.Received().Save(model1);
            currentItem.Model.Should().Be(model1, "The Save was called with the added model.");
        }
        public void CurrentItem_WhenItemDeletedThatIsNotInTheCollection_DoesNothing()
        {
            //	Arrange
            var repository = GetNewspaperRepository();
            var model1 = new Newspaper {Name = "Paper 1"};
            var model2 = new Newspaper {Name = "Paper 2"};
            var model3 = new Newspaper {Name = "Paper 3"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var paperItemVm2 = new NewspaperItemViewModel(repository) {Model = model2};
            var paperItemVm3 = new NewspaperItemViewModel(repository) {Model = model3};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.Newspapers.Add(paperItemVm1);
            collectionViewModel.Newspapers.Add(paperItemVm2);
            collectionViewModel.CurrentItem.Should().Be(paperItemVm2, "CurrentItem should be the last item added.");
            var count = collectionViewModel.Newspapers.Count;
            var itemsInCollection = collectionViewModel.Newspapers.ToList();

            //	Act
            collectionViewModel.Newspapers.Remove(paperItemVm3);

            //	Assert
            collectionViewModel.Newspapers.Count.Should().Be(count, "The number of papers in the collection should not change");
            collectionViewModel.Newspapers.ShouldBeEquivalentTo(itemsInCollection, "The collection remains unchanged");
        }
        public void CurrentItem_AfterNewItemAdded_IsNewItem()
        {
            //	Arrange

            var repository = GetNewspaperRepository();
            var model = new Newspaper();
            var itemViewModel = new NewspaperItemViewModel(repository) {Model = model};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);

            //	Act
            collectionViewModel.Newspapers.Add(itemViewModel);

            //	Assert
            collectionViewModel.CurrentItem.Should().Be(itemViewModel, "After adding a new item, it becomes the CurrentItem.");
        }
Ejemplo n.º 22
0
        public void SaveCommand_WhenInvoked_UpdatesCollectionCurrentItemWithNewValue()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var detailViewModel = new NewspaperDetailViewModel(repository);
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            detailViewModel.AddItemCommand.Execute(null);
            collectionViewModel.CurrentItem.Should().Be(detailViewModel.ItemViewModel,
                                                        "The detail model points to the Collection CurrentItem");
            var oldName = collectionViewModel.CurrentItem.Name;
            var newName = "Changed Newspaper Name";
            detailViewModel.Name = newName;

            //	Act
            detailViewModel.SaveItemCommand.Execute(null);

            //	Assert
            collectionViewModel.CurrentItem.Should().Be(detailViewModel.ItemViewModel,
                                                        "The current item in the collection matches the one in the detail view model.");
            repository.Received().Save(detailViewModel.ItemViewModel.Model);
        }
        public void RemovingItemMessageHandler_WhenInvoked_CallsRepositoryDeleteWithDeletedItem()
        {
            //	Arrange
            var repository = GetNewspaperRepository();

            var model1 = new Newspaper {Name = "Paper 1"};
            var model2 = new Newspaper {Name = "Paper 2"};
            var model3 = new Newspaper {Name = "Paper 3"};

            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var paperItemVm2 = new NewspaperItemViewModel(repository) {Model = model2};
            var paperItemVm3 = new NewspaperItemViewModel(repository) {Model = model3};

            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.Newspapers.Add(paperItemVm1);
            collectionViewModel.Newspapers.Add(paperItemVm2);
            collectionViewModel.Newspapers.Add(paperItemVm3);

            collectionViewModel.CurrentItem.Should().Be(paperItemVm3, "CurrentItem should be the last item added.");
            collectionViewModel.Newspapers.Count.Should().Be(3, "There are now three items in the list.");

            var message = new RemovingNewspaperItemMessage(paperItemVm2);

            //	Act
            Messenger.Default.Send<RemovingNewspaperItemMessage>(message);

            //	Assert
            repository.Received().Save(model2);
        }
        public void CurrentItem_AfterDeletingNotLastExistingItem_IsTheFollowingItem()
        {
            //	Arrange
            var repository = GetNewspaperRepository();
            var model1 = new Newspaper {Name = "Paper 1"};
            var model2 = new Newspaper {Name = "Paper 2"};
            var model3 = new Newspaper {Name = "Paper 3"};
            var model4 = new Newspaper {Name = "Paper 4"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var paperItemVm2 = new NewspaperItemViewModel(repository) {Model = model2};
            var paperItemVm3 = new NewspaperItemViewModel(repository) {Model = model3};
            var paperItemVm4 = new NewspaperItemViewModel(repository) {Model = model4};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.Newspapers.Add(paperItemVm1);
            collectionViewModel.Newspapers.Add(paperItemVm2);
            collectionViewModel.Newspapers.Add(paperItemVm3);
            collectionViewModel.Newspapers.Add(paperItemVm4);
            collectionViewModel.CurrentItem.Should().Be(paperItemVm4, "CurrentItem should be the last item added.");

            //	Act
            collectionViewModel.Newspapers.Remove(paperItemVm2);

            //	Assert
            collectionViewModel.CurrentItem.Should().Be(paperItemVm3,
                                                        "CurrentItem should be the first item following the one removed");
        }
        public void RemovingItemMessageHandler_WhenInvoked_RemovesItemFromNewspapersCollection()
        {
            //	Arrange
            var repository = GetNewspaperRepository();

            var model1 = new Newspaper {Name = "Paper 1"};
            var model2 = new Newspaper {Name = "Paper 2"};
            var model3 = new Newspaper {Name = "Paper 3"};

            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var paperItemVm2 = new NewspaperItemViewModel(repository) {Model = model2};
            var paperItemVm3 = new NewspaperItemViewModel(repository) {Model = model3};

            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.Newspapers.Add(paperItemVm1);
            collectionViewModel.Newspapers.Add(paperItemVm2);
            collectionViewModel.Newspapers.Add(paperItemVm3);

            collectionViewModel.CurrentItem.Should().Be(paperItemVm3, "CurrentItem should be the last item added.");
            collectionViewModel.Newspapers.Count.Should().Be(3, "There are now three items in the list.");

            var message = new RemovingNewspaperItemMessage(paperItemVm2);

            //	Act
            Messenger.Default.Send<RemovingNewspaperItemMessage>(message);

            //	Assert
            collectionViewModel.Newspapers.Count.Should().Be(2, "An item should have been removed from the collection.");
            collectionViewModel.Newspapers.ShouldBeEquivalentTo(new List<NewspaperItemViewModel>() {paperItemVm1, paperItemVm3},
                                                                "Item paperItemVm2 was removed, leaving paperItemVm1 and paperItemVm3 in the list.");
        }
        public void DetailViewModelReadyMessageHandler_WhenReceived_SendsCurrentItemAsCurrentItemChangedMessage()
        {
            //  Arrange
            var repository = GetNewspaperRepository();
            var model1 = new Newspaper {Name = "Paper 1"};
            var model2 = new Newspaper {Name = "Paper 2"};
            var model3 = new Newspaper {Name = "Paper 3"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var paperItemVm2 = new NewspaperItemViewModel(repository) {Model = model2};
            var paperItemVm3 = new NewspaperItemViewModel(repository) {Model = model3};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.Newspapers.Add(paperItemVm1);
            collectionViewModel.Newspapers.Add(paperItemVm2);
            collectionViewModel.Newspapers.Add(paperItemVm3);
            collectionViewModel.CurrentItem.Should().Be(paperItemVm3, "CurrentItem should be the last item added.");
            NewspaperItemViewModel itemFromMessage = paperItemVm2;
            Messenger.Default.Register<CurrentNewspaperItemChangedMessage>(this,
                                                                           (message) => itemFromMessage = message.ItemViewModel);

            //  Act
            Messenger.Default.Send(new NewspaperDetailViewModelReady());

            //  Assert

            itemFromMessage.Model.Should().Be(model3,
                                              "When the NewspaperDetailViewModelIsReady the collection's current item is sent");
        }
        public void SaveCommand_WhenPopulatedAndNewItemAdded_IsExecuted()
        {
            //	Arrange
            var saveCommandCalled = false;
            var repository = Substitute.For<INewspaperAdRepository>();
            var model1 = new Newspaper {Name = "Paper 1"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            collectionViewModel.SaveCommand = new RelayCommand(() => { saveCommandCalled = true; });

            //	Act
            collectionViewModel.Newspapers.Add(paperItemVm1);

            //	Assert
            repository.Received().Save(model1);
            //saveCommandCalled.Should().Be(true, "Adding an item to the list causes the contents of SaveCommand to be executed");
        }
        public void Newspapers_AddNewItem_InsertsItemInTheCollection()
        {
            //	Arrange
            var repository = GetNewspaperRepository();
            var model1 = new Newspaper {Name = "Paper 1"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);

            //	Act
            collectionViewModel.Newspapers.Add(paperItemVm1);

            //	Assert
            collectionViewModel.Newspapers.Count.Should().Be(1, "There is one item in the collection");
            collectionViewModel.Newspapers.First().Should().Be(paperItemVm1,
                                                               "The item added was the same as the paper we created.");
        }
        public void SaveCommand_WhenItemAdded_CallsRepositorySaveOnCurrentItem()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var model1 = new Newspaper {Name = "Paper 1"};
            var model2 = new Newspaper {Name = "Paper 2"};
            var model3 = new Newspaper {Name = "Paper 3"};
            var model4 = new Newspaper {Name = "Paper 4"};
            var paperItemVm1 = new NewspaperItemViewModel(repository) {Model = model1};
            var paperItemVm2 = new NewspaperItemViewModel(repository) {Model = model2};
            var paperItemVm3 = new NewspaperItemViewModel(repository) {Model = model3};
            var paperItemVm4 = new NewspaperItemViewModel(repository) {Model = model4};
            var collectionViewModel = new NewspaperCollectionViewModel(repository);

            //	Act
            collectionViewModel.Newspapers.Add(paperItemVm1);
            collectionViewModel.Newspapers.Add(paperItemVm2);
            collectionViewModel.Newspapers.Add(paperItemVm3);

            //	Assert
            repository.Received().Save(model1);
            repository.Received().Save(model2);
            repository.Received().Save(model3);
            repository.DidNotReceive().Save(paperItemVm4.Model);
        }