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 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 AddNewspaper_WithValidNewspaper_AddsAdvertisementToNewspaperAdvertisementssCollection()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var advertisementModel = new Advertisement();
            var paperModel = new Newspaper();
            var newspaperItemViewModel = new NewspaperItemViewModel(repository) {Model = paperModel};
            var adDetailViewModel = new NewspaperDetailViewModel(repository) {ItemViewModel = newspaperItemViewModel};
            var detailViewModel = new AdvertisementDetailViewModel(repository)
                                  {ItemViewModel = new AdvertisementItemViewModel(repository) {Model = advertisementModel}};

            //	Act
            detailViewModel.Newspapers.Add(newspaperItemViewModel);
            //	Assert
            detailViewModel.Newspapers.ToList().First().Advertisements.Contains(detailViewModel.ItemViewModel);
        }
        public void AddNewspaper_WithValidNewspaper_AddsNewspaperToNewspapersCollection()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var advertisementModel = new Advertisement();
            var paperModel = new Newspaper();
            var newspaperItemViewModel = new NewspaperItemViewModel(repository) {Model = paperModel};
            var adDetailViewModel = new NewspaperDetailViewModel(repository) {ItemViewModel = newspaperItemViewModel};
            var detailViewModel = new AdvertisementDetailViewModel(repository)
                                  {ItemViewModel = new AdvertisementItemViewModel(repository) {Model = advertisementModel}};

            //	Act
            detailViewModel.Newspapers.Add(newspaperItemViewModel);
            //	Assert
            detailViewModel.Newspapers.Count.Should().Be(1, "There should be one item 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 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 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 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_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 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 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 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 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_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);
        }
        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 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 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 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);
        }
Exemplo n.º 19
0
 public SaveNewspaperItemMessage(NewspaperItemViewModel itemViewModel)
 {
     ItemViewModel = itemViewModel;
 }
        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.");
        }
Exemplo n.º 21
0
        public void Name_WhenNullOrEmpty_SetsAllowSaveToFalse()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var model = new Newspaper();
            var itemViewModel = new NewspaperItemViewModel(repository) {Model = model};
            var viewModel = new NewspaperDetailViewModel(repository) {ItemViewModel = itemViewModel};
            viewModel.AllowSave.Should().Be(true, "We have a valid name to reference.");

            //	Act
            viewModel.Name = "";

            //	Assert
            viewModel.AllowSave.Should().Be(false, "Cannot save an newspaper without a name.");
        }
        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");
        }
Exemplo n.º 23
0
        public void Name_WhenNotNullOrEmpty_SetsAllowAddToTrue()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var model = new Newspaper();
            var itemViewModel = new NewspaperItemViewModel(repository) {Model = model};

            //	Act
            var viewModel = new NewspaperDetailViewModel(repository) {ItemViewModel = itemViewModel};

            //	Assert
            viewModel.AllowSave.Should().Be(true, "We have a valid name to reference.");
        }
 public CurrentNewspaperItemChangedMessage(NewspaperItemViewModel itemViewModel)
 {
     ItemViewModel = itemViewModel;
 }
        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.");
        }
Exemplo n.º 26
0
        public void Name_SetWhenModelNotPresent_ThrowsMissingModelException()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var vm = new NewspaperItemViewModel(repository);
            vm.Model.Should().BeNull("Because vm.Model not set during object instantiation.");

            //	Act
            var action = new Action(() => { vm.Name = "Name"; });

            //	Assert
            action.ShouldThrow<MissingModelException>("Cannot set any properties if Model not present.");
        }
        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 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 RemoveNewspaper_WithExistingNewspaperInNewspapersCollection_RemovesNewspaperFromNewspapersCollection()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var advertisementModel = new Advertisement();
            var paperModel1 = new Newspaper();
            var newspaperItemViewModel1 = new NewspaperItemViewModel(repository) {Model = paperModel1};
            var paperModel2 = new Newspaper();
            var newspaperItemViewModel2 = new NewspaperItemViewModel(repository) {Model = paperModel2};
            var adDetailViewModel = new NewspaperDetailViewModel(repository) {ItemViewModel = newspaperItemViewModel1};
            var detailViewModel = new AdvertisementDetailViewModel(repository)
                                  {ItemViewModel = new AdvertisementItemViewModel(repository) {Model = advertisementModel}};
            detailViewModel.Newspapers.Add(newspaperItemViewModel1);
            detailViewModel.Newspapers.Add(newspaperItemViewModel2);
            detailViewModel.Newspapers.Should().BeEquivalentTo(new List<NewspaperItemViewModel>
                                                               {newspaperItemViewModel1, newspaperItemViewModel2});
            //	Act
            detailViewModel.Newspapers.Remove(newspaperItemViewModel1);

            //	Assert
            detailViewModel.Newspapers.Should().BeEquivalentTo(new List<NewspaperItemViewModel> {newspaperItemViewModel2});
        }