public void TestAtPropertyChangedOnAdressekontoModelEventHandlerRejserPropertyChangedOnAdressekontoModelUpdate(string propertyNameToRaise, string expectPropertyName)
        {
            var fixture = new Fixture();

            fixture.Customize <Byte[]>(e => e.FromFactory(() => TestHelper.GetEmbeddedResource((new Resource()).GetType().Assembly, "Images.Adressekonto.png")));
            fixture.Customize <IRegnskabViewModel>(e => e.FromFactory(() => MockRepository.GenerateMock <IRegnskabViewModel>()));
            fixture.Customize <IFinansstyringRepository>(e => e.FromFactory(() => MockRepository.GenerateMock <IFinansstyringRepository>()));
            fixture.Customize <IExceptionHandlerViewModel>(e => e.FromFactory(() => MockRepository.GenerateMock <IExceptionHandlerViewModel>()));

            var adressekontoModelMock = MockRepository.GenerateMock <IAdressekontoModel>();
            var adressekontoViewModel = new AdressekontoViewModel(fixture.Create <IRegnskabViewModel>(), adressekontoModelMock, fixture.Create <string>(), fixture.Create <byte[]>(), fixture.Create <IFinansstyringRepository>(), fixture.Create <IExceptionHandlerViewModel>());

            Assert.That(adressekontoViewModel, Is.Not.Null);

            var eventCalled = false;

            adressekontoViewModel.PropertyChanged += (s, e) =>
            {
                Assert.That(s, Is.Not.Null);
                Assert.That(e, Is.Not.Null);
                Assert.That(e.PropertyName, Is.Not.Null);
                Assert.That(e.PropertyName, Is.Not.Empty);
                if (string.Compare(e.PropertyName, expectPropertyName, StringComparison.Ordinal) == 0)
                {
                    eventCalled = true;
                }
            };

            Assert.That(eventCalled, Is.False);
            adressekontoModelMock.Raise(m => m.PropertyChanged += null, adressekontoModelMock, new PropertyChangedEventArgs(propertyNameToRaise));
            Assert.That(eventCalled, Is.True);
        }
        public void TestAtSaldoSetterKalderHandleExceptionOnExceptionHandlerViewModelVedExceptions()
        {
            var fixture = new Fixture();

            fixture.Customize <Byte[]>(e => e.FromFactory(() => TestHelper.GetEmbeddedResource((new Resource()).GetType().Assembly, "Images.Adressekonto.png")));
            fixture.Customize <IRegnskabViewModel>(e => e.FromFactory(() => MockRepository.GenerateMock <IRegnskabViewModel>()));
            fixture.Customize <IFinansstyringRepository>(e => e.FromFactory(() => MockRepository.GenerateMock <IFinansstyringRepository>()));

            var exception             = fixture.Create <Exception>();
            var adressekontoModelMock = MockRepository.GenerateMock <IAdressekontoModel>();

            adressekontoModelMock.Expect(m => m.Saldo = Arg <decimal> .Is.Anything)
            .Throw(exception)
            .Repeat.Any();

            var exceptionHandlerViewModelMock = MockRepository.GenerateMock <IExceptionHandlerViewModel>();

            var adressekontoViewModel = new AdressekontoViewModel(fixture.Create <IRegnskabViewModel>(), adressekontoModelMock, fixture.Create <string>(), fixture.Create <byte[]>(), fixture.Create <IFinansstyringRepository>(), exceptionHandlerViewModelMock);

            Assert.That(adressekontoViewModel, Is.Not.Null);

            var newValue = fixture.Create <decimal>();

            adressekontoViewModel.Saldo = newValue;

            adressekontoModelMock.AssertWasCalled(m => m.Saldo = Arg <decimal> .Is.Equal(newValue));
            exceptionHandlerViewModelMock.AssertWasCalled(m => m.HandleException(Arg <Exception> .Is.Equal(exception)));
        }
        /// <summary>
        /// Opdaterer ViewModel for regnskabet med kreditorer.
        /// </summary>
        /// <param name="regnskabViewModel">ViewModel for regnskabet, der skal opdateres.</param>
        /// <param name="adressekontoModels">Kreditorer, som regnskabet skal opdateres med.</param>
        /// <param name="dageForNyheder">Antallet af dage, som nyheder er gældende.</param>
        private void HandleResult(IRegnskabViewModel regnskabViewModel, IEnumerable <IAdressekontoModel> adressekontoModels, int dageForNyheder)
        {
            if (regnskabViewModel == null)
            {
                throw new ArgumentNullException("regnskabViewModel");
            }
            if (adressekontoModels == null)
            {
                throw new ArgumentNullException("adressekontoModels");
            }
            var adressekontoViewModelCollection = new List <IAdressekontoViewModel>(regnskabViewModel.Kreditorer);

            foreach (var adressekontoModel in adressekontoModels.OrderBy(m => m.Nummer))
            {
                try
                {
                    var adressekontoViewModel = regnskabViewModel.Kreditorer.FirstOrDefault(m => m.Nummer == adressekontoModel.Nummer);
                    if (adressekontoViewModel == null)
                    {
                        adressekontoViewModel = new AdressekontoViewModel(regnskabViewModel, adressekontoModel, Resource.GetText(Text.Creditor), Resource.GetEmbeddedResource("Images.Adressekonto.png"), _finansstyringRepository, ExceptionHandler);
                        regnskabViewModel.KreditorAdd(adressekontoViewModel);
                        if (adressekontoModel.StatusDato.Date.CompareTo(regnskabViewModel.StatusDato.Date.AddDays(dageForNyheder * -1)) >= 0 && adressekontoModel.StatusDato.Date.CompareTo(regnskabViewModel.StatusDato.Date) <= 0)
                        {
                            adressekontoModel.SetNyhedsaktualitet(Nyhedsaktualitet.High);
                            regnskabViewModel.NyhedAdd(new NyhedViewModel(adressekontoModel, adressekontoViewModel.Image));
                        }
                        continue;
                    }
                    adressekontoViewModel.Navn            = adressekontoModel.Navn;
                    adressekontoViewModel.PrimærTelefon   = adressekontoModel.PrimærTelefon;
                    adressekontoViewModel.SekundærTelefon = adressekontoModel.SekundærTelefon;
                    adressekontoViewModel.StatusDato      = adressekontoModel.StatusDato;
                    adressekontoViewModel.Saldo           = adressekontoModel.Saldo;
                }
                finally
                {
                    var adressekontoViewModel = adressekontoViewModelCollection.FirstOrDefault(m => m.Nummer == adressekontoModel.Nummer);
                    while (adressekontoViewModel != null)
                    {
                        adressekontoViewModelCollection.Remove(adressekontoViewModel);
                        adressekontoViewModel = adressekontoViewModelCollection.FirstOrDefault(m => m.Nummer == adressekontoModel.Nummer);
                    }
                }
            }
            foreach (var adressekontoViewModel in adressekontoViewModelCollection)
            {
                var refreshCommand = adressekontoViewModel.RefreshCommand;
                if (refreshCommand.CanExecute(adressekontoViewModel))
                {
                    refreshCommand.Execute(adressekontoViewModel);
                }
            }
        }
        public void TestAtPropertyChangedOnAdressekontoModelEventHandlerKasterArgumentNullExceptionHvisEventArgsErNull()
        {
            var fixture = new Fixture();

            fixture.Customize <Byte[]>(e => e.FromFactory(() => TestHelper.GetEmbeddedResource((new Resource()).GetType().Assembly, "Images.Adressekonto.png")));
            fixture.Customize <IRegnskabViewModel>(e => e.FromFactory(() => MockRepository.GenerateMock <IRegnskabViewModel>()));
            fixture.Customize <IFinansstyringRepository>(e => e.FromFactory(() => MockRepository.GenerateMock <IFinansstyringRepository>()));
            fixture.Customize <IExceptionHandlerViewModel>(e => e.FromFactory(() => MockRepository.GenerateMock <IExceptionHandlerViewModel>()));

            var adressekontoModelMock = MockRepository.GenerateMock <IAdressekontoModel>();
            var adressekontoViewModel = new AdressekontoViewModel(fixture.Create <IRegnskabViewModel>(), adressekontoModelMock, fixture.Create <string>(), fixture.Create <byte[]>(), fixture.Create <IFinansstyringRepository>(), fixture.Create <IExceptionHandlerViewModel>());

            Assert.That(adressekontoViewModel, Is.Not.Null);

            var exception = Assert.Throws <ArgumentNullException>(() => adressekontoModelMock.Raise(m => m.PropertyChanged += null, fixture.Create <object>(), null));

            Assert.That(exception, Is.Not.Null);
            Assert.That(exception.ParamName, Is.Not.Null);
            Assert.That(exception.ParamName, Is.Not.Empty);
            Assert.That(exception.ParamName, Is.EqualTo("eventArgs"));
            Assert.That(exception.InnerException, Is.Null);
        }
        public void TestAtSekundærTelefonSetterOpdatererSekundærTelefonOnAdressekontoModel()
        {
            var fixture = new Fixture();

            fixture.Customize <Byte[]>(e => e.FromFactory(() => TestHelper.GetEmbeddedResource((new Resource()).GetType().Assembly, "Images.Adressekonto.png")));
            fixture.Customize <IRegnskabViewModel>(e => e.FromFactory(() => MockRepository.GenerateMock <IRegnskabViewModel>()));
            fixture.Customize <IFinansstyringRepository>(e => e.FromFactory(() => MockRepository.GenerateMock <IFinansstyringRepository>()));

            var adressekontoModelMock = MockRepository.GenerateMock <IAdressekontoModel>();

            var exceptionHandlerViewModelMock = MockRepository.GenerateMock <IExceptionHandlerViewModel>();

            var adressekontoViewModel = new AdressekontoViewModel(fixture.Create <IRegnskabViewModel>(), adressekontoModelMock, fixture.Create <string>(), fixture.Create <byte[]>(), fixture.Create <IFinansstyringRepository>(), exceptionHandlerViewModelMock);

            Assert.That(adressekontoViewModel, Is.Not.Null);

            var newValue = fixture.Create <string>();

            adressekontoViewModel.SekundærTelefon = newValue;

            adressekontoModelMock.AssertWasCalled(m => m.SekundærTelefon = Arg <string> .Is.Equal(newValue));
            exceptionHandlerViewModelMock.AssertWasNotCalled(m => m.HandleException(Arg <Exception> .Is.Anything));
        }
        public void TestAtConstructorInitiererAdressekontoViewModel()
        {
            var fixture = new Fixture();

            fixture.Customize <DateTime>(e => e.FromFactory(() => DateTime.Now));
            fixture.Customize <Byte[]>(e => e.FromFactory(() => TestHelper.GetEmbeddedResource((new Resource()).GetType().Assembly, "Images.Adressekonto.png")));
            fixture.Customize <IRegnskabViewModel>(e => e.FromFactory(() => MockRepository.GenerateMock <IRegnskabViewModel>()));
            fixture.Customize <IFinansstyringRepository>(e => e.FromFactory(() => MockRepository.GenerateMock <IFinansstyringRepository>()));
            fixture.Customize <IExceptionHandlerViewModel>(e => e.FromFactory(() => MockRepository.GenerateMock <IExceptionHandlerViewModel>()));
            fixture.Customize <IAdressekontoModel>(e => e.FromFactory(() =>
            {
                var mock = MockRepository.GenerateMock <IAdressekontoModel>();
                mock.Expect(m => m.Nummer)
                .Return(fixture.Create <int>())
                .Repeat.Any();
                mock.Expect(m => m.Navn)
                .Return(fixture.Create <string>())
                .Repeat.Any();
                mock.Expect(m => m.PrimærTelefon)
                .Return(fixture.Create <string>())
                .Repeat.Any();
                mock.Expect(m => m.SekundærTelefon)
                .Return(fixture.Create <string>())
                .Repeat.Any();
                mock.Expect(m => m.StatusDato)
                .Return(fixture.Create <DateTime>())
                .Repeat.Any();
                mock.Expect(m => m.Saldo)
                .Return(fixture.Create <decimal>())
                .Repeat.Any();
                return(mock);
            }));

            var regnskabViewModelMock = fixture.Create <IRegnskabViewModel>();
            var adressekontoModelMock = fixture.Create <IAdressekontoModel>();
            var displayName           = fixture.Create <string>();
            var image = fixture.Create <byte[]>();
            var adressekontoViewModel = new AdressekontoViewModel(regnskabViewModelMock, adressekontoModelMock, displayName, image, fixture.Create <IFinansstyringRepository>(), fixture.Create <IExceptionHandlerViewModel>());

            Assert.That(adressekontoViewModel, Is.Not.Null);
            Assert.That(adressekontoViewModel.Regnskab, Is.Not.Null);
            Assert.That(adressekontoViewModel.Regnskab, Is.EqualTo(regnskabViewModelMock));
            Assert.That(adressekontoViewModel.Nummer, Is.EqualTo(adressekontoModelMock.Nummer));
            Assert.That(adressekontoViewModel.Navn, Is.Not.Null);
            Assert.That(adressekontoViewModel.Navn, Is.Not.Empty);
            Assert.That(adressekontoViewModel.Navn, Is.EqualTo(adressekontoModelMock.Navn));
            Assert.That(adressekontoViewModel.PrimærTelefon, Is.Not.Null);
            Assert.That(adressekontoViewModel.PrimærTelefon, Is.Not.Empty);
            Assert.That(adressekontoViewModel.PrimærTelefon, Is.EqualTo(adressekontoModelMock.PrimærTelefon));
            Assert.That(adressekontoViewModel.PrimærTelefonLabel, Is.Not.Null);
            Assert.That(adressekontoViewModel.PrimærTelefonLabel, Is.Not.Empty);
            Assert.That(adressekontoViewModel.PrimærTelefonLabel, Is.EqualTo(Resource.GetText(Text.Phone)));
            Assert.That(adressekontoViewModel.SekundærTelefon, Is.Not.Null);
            Assert.That(adressekontoViewModel.SekundærTelefon, Is.Not.Empty);
            Assert.That(adressekontoViewModel.SekundærTelefon, Is.EqualTo(adressekontoModelMock.SekundærTelefon));
            Assert.That(adressekontoViewModel.SekundærTelefonLabel, Is.Not.Null);
            Assert.That(adressekontoViewModel.SekundærTelefonLabel, Is.Not.Empty);
            Assert.That(adressekontoViewModel.SekundærTelefonLabel, Is.EqualTo(Resource.GetText(Text.Phone)));
            Assert.That(adressekontoViewModel.StatusDato, Is.EqualTo(adressekontoModelMock.StatusDato));
            Assert.That(adressekontoViewModel.Saldo, Is.EqualTo(adressekontoModelMock.Saldo));
            Assert.That(adressekontoViewModel.SaldoAsText, Is.Not.Null);
            Assert.That(adressekontoViewModel.SaldoAsText, Is.Not.Empty);
            Assert.That(adressekontoViewModel.SaldoAsText, Is.EqualTo(adressekontoModelMock.Saldo.ToString("C")));
            Assert.That(adressekontoViewModel.SaldoLabel, Is.Not.Null);
            Assert.That(adressekontoViewModel.SaldoLabel, Is.Not.Empty);
            Assert.That(adressekontoViewModel.SaldoLabel, Is.EqualTo(Resource.GetText(Text.Balance)));
            Assert.That(adressekontoViewModel.DisplayName, Is.Not.Null);
            Assert.That(adressekontoViewModel.DisplayName, Is.Not.Empty);
            Assert.That(adressekontoViewModel.DisplayName, Is.EqualTo(displayName));
            Assert.That(adressekontoViewModel.Image, Is.Not.Null);
            Assert.That(adressekontoViewModel.Image, Is.Not.Empty);
            Assert.That(adressekontoViewModel.Image, Is.EqualTo(image));
            Assert.That(adressekontoViewModel.RefreshCommand, Is.Not.Null);
            Assert.That(adressekontoViewModel.RefreshCommand, Is.TypeOf <AdressekontoGetCommand>());

            adressekontoModelMock.AssertWasCalled(m => m.Nummer);
            adressekontoModelMock.AssertWasCalled(m => m.Navn);
            adressekontoModelMock.AssertWasCalled(m => m.PrimærTelefon);
            adressekontoModelMock.AssertWasCalled(m => m.SekundærTelefon);
            adressekontoModelMock.AssertWasCalled(m => m.StatusDato);
            adressekontoModelMock.AssertWasCalled(m => m.Saldo);
        }