public void TestAtExecuteDontExecuteDependencyCommandHvisCanExecuteOnDepencendyCommandErFalse()
        {
            var fixture = new Fixture();

            fixture.Customize <DateTime>(e => e.FromFactory(() => DateTime.Now));

            var dependencyCommandMock = MockRepository.GenerateMock <ITaskableCommand>();

            dependencyCommandMock.Expect(m => m.CanExecute(Arg <IRegnskabViewModel> .Is.TypeOf))
            .Return(false)
            .Repeat.Any();

            Func <IEnumerable <IBudgetkontoModel> > budgetkontoplanGetter = () => new List <IBudgetkontoModel>(0);
            var finansstyringRepositoryMock = MockRepository.GenerateMock <IFinansstyringRepository>();

            finansstyringRepositoryMock.Expect(m => m.BudgetkontoplanGetAsync(Arg <int> .Is.GreaterThan(0), Arg <DateTime> .Is.GreaterThan(DateTime.MinValue)))
            .Return(Task.Run(budgetkontoplanGetter))
            .Repeat.Any();

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

            var regnskabsnummer       = fixture.Create <int>();
            var statusDato            = fixture.Create <DateTime>();
            var regnskabViewModelMock = MockRepository.GenerateMock <IRegnskabViewModel>();

            regnskabViewModelMock.Expect(m => m.Nummer)
            .Return(regnskabsnummer)
            .Repeat.Any();
            regnskabViewModelMock.Expect(m => m.StatusDato)
            .Return(statusDato)
            .Repeat.Any();
            regnskabViewModelMock.Expect(m => m.Budgetkonti)
            .Return(new List <IBudgetkontoViewModel>(0))
            .Repeat.Any();
            regnskabViewModelMock.Expect(m => m.Budgetkontogrupper)
            .Return(new List <IBudgetkontogruppeViewModel>(0))
            .Repeat.Any();

            var command = new BudgetkontoplanGetCommand(dependencyCommandMock, finansstyringRepositoryMock, exceptionHandlerMock);

            Assert.That(command, Is.Not.Null);
            Assert.That(command.ExecuteTask, Is.Null);

            var    mock   = regnskabViewModelMock;
            Action action = () =>
            {
                command.Execute(mock);
                Assert.That(command.ExecuteTask, Is.Not.Null);
                command.ExecuteTask.Wait();
            };

            Task.Run(action).Wait(3000);

            dependencyCommandMock.AssertWasCalled(m => m.CanExecute(Arg <IRegnskabViewModel> .Is.Equal(regnskabViewModelMock)));
            dependencyCommandMock.AssertWasNotCalled(m => m.Execute(Arg <object> .Is.Anything));
            dependencyCommandMock.AssertWasNotCalled(m => m.ExecuteTask);
            finansstyringRepositoryMock.AssertWasCalled(m => m.BudgetkontoplanGetAsync(Arg <int> .Is.Equal(regnskabsnummer), Arg <DateTime> .Is.Equal(statusDato)));
            exceptionHandlerMock.AssertWasNotCalled(m => m.HandleException(Arg <Exception> .Is.Anything));
        }
        public void TestAtConstructorInitiererBudgetkontoplanGetCommand()
        {
            var fixture = new Fixture();

            fixture.Customize <ITaskableCommand>(e => e.FromFactory(() => MockRepository.GenerateMock <ITaskableCommand>()));
            fixture.Customize <IFinansstyringRepository>(e => e.FromFactory(() => MockRepository.GenerateMock <IFinansstyringRepository>()));
            fixture.Customize <IExceptionHandlerViewModel>(e => e.FromFactory(() => MockRepository.GenerateMock <IExceptionHandlerViewModel>()));

            var command = new BudgetkontoplanGetCommand(fixture.Create <ITaskableCommand>(), fixture.Create <IFinansstyringRepository>(), fixture.Create <IExceptionHandlerViewModel>());

            Assert.That(command, Is.Not.Null);
            Assert.That(command.ExecuteTask, Is.Null);
        }
        public void TestAtCanExecuteReturnererTrue()
        {
            var fixture = new Fixture();

            fixture.Customize <IRegnskabViewModel>(e => e.FromFactory(() => MockRepository.GenerateMock <IRegnskabViewModel>()));
            fixture.Customize <ITaskableCommand>(e => e.FromFactory(() => MockRepository.GenerateMock <ITaskableCommand>()));
            fixture.Customize <IFinansstyringRepository>(e => e.FromFactory(() => MockRepository.GenerateMock <IFinansstyringRepository>()));
            fixture.Customize <IExceptionHandlerViewModel>(e => e.FromFactory(() => MockRepository.GenerateMock <IExceptionHandlerViewModel>()));

            var command = new BudgetkontoplanGetCommand(fixture.Create <ITaskableCommand>(), fixture.Create <IFinansstyringRepository>(), fixture.Create <IExceptionHandlerViewModel>());

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

            var result = command.CanExecute(fixture.Create <IRegnskabViewModel>());

            Assert.That(result, Is.True);
        }
        public void TestAtExecuteExecutesRefreshCommandOnBudgetkontiSomIkkeErHentet()
        {
            var fixture = new Fixture();

            fixture.Customize <DateTime>(e => e.FromFactory(() => DateTime.Now));
            fixture.Customize <IBudgetkontogruppeViewModel>(e => e.FromFactory(() =>
            {
                var budgetkontogruppeViewModelMock = MockRepository.GenerateMock <IBudgetkontogruppeViewModel>();
                budgetkontogruppeViewModelMock.Expect(m => m.Nummer)
                .Return(fixture.Create <int>())
                .Repeat.Any();
                return(budgetkontogruppeViewModelMock);
            }));

            var dependencyCommandMock = MockRepository.GenerateMock <ITaskableCommand>();

            dependencyCommandMock.Expect(m => m.CanExecute(Arg <IRegnskabViewModel> .Is.TypeOf))
            .Return(false)
            .Repeat.Any();

            var budgetkontogruppeViewModelMockCollection = fixture.CreateMany <IBudgetkontogruppeViewModel>(7).ToList();
            var budgetkontoModelMockCollection           = GetBudgetkontoModels(fixture, budgetkontogruppeViewModelMockCollection, new Random(DateTime.Now.Second), 1).ToArray();
            Func <IEnumerable <IBudgetkontoModel> > budgetkontoplanGetter = () => budgetkontoModelMockCollection;
            var finansstyringRepositoryMock = MockRepository.GenerateMock <IFinansstyringRepository>();

            finansstyringRepositoryMock.Expect(m => m.BudgetkontoplanGetAsync(Arg <int> .Is.GreaterThan(0), Arg <DateTime> .Is.GreaterThan(DateTime.MinValue)))
            .Return(Task.Run(budgetkontoplanGetter))
            .Repeat.Any();

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

            var refreshCommandMock = MockRepository.GenerateMock <ICommand>();

            refreshCommandMock.Expect(m => m.CanExecute(Arg <object> .Is.NotNull))
            .Return(true)
            .Repeat.Any();

            var budgetkontoViewModelMock = MockRepository.GenerateMock <IBudgetkontoViewModel>();

            budgetkontoViewModelMock.Expect(m => m.Kontonummer)
            .Return(budgetkontoModelMockCollection.ElementAt(0).Kontonummer)
            .Repeat.Any();

            var unreadedBudgetkontoViewModelMock = MockRepository.GenerateMock <IBudgetkontoViewModel>();

            unreadedBudgetkontoViewModelMock.Expect(m => m.Kontonummer)
            .Return(fixture.Create <string>())
            .Repeat.Any();
            unreadedBudgetkontoViewModelMock.Expect(m => m.RefreshCommand)
            .Return(refreshCommandMock)
            .Repeat.Any();

            var regnskabsnummer       = fixture.Create <int>();
            var statusDato            = fixture.Create <DateTime>();
            var regnskabViewModelMock = MockRepository.GenerateMock <IRegnskabViewModel>();

            regnskabViewModelMock.Expect(m => m.Nummer)
            .Return(regnskabsnummer)
            .Repeat.Any();
            regnskabViewModelMock.Expect(m => m.StatusDato)
            .Return(statusDato)
            .Repeat.Any();
            regnskabViewModelMock.Expect(m => m.Budgetkonti)
            .Return(new List <IBudgetkontoViewModel> {
                budgetkontoViewModelMock, unreadedBudgetkontoViewModelMock
            })
            .Repeat.Any();
            regnskabViewModelMock.Expect(m => m.Budgetkontogrupper)
            .Return(budgetkontogruppeViewModelMockCollection)
            .Repeat.Any();

            var command = new BudgetkontoplanGetCommand(dependencyCommandMock, finansstyringRepositoryMock, exceptionHandlerMock);

            Assert.That(command, Is.Not.Null);
            Assert.That(command.ExecuteTask, Is.Null);

            var    mock   = regnskabViewModelMock;
            Action action = () =>
            {
                command.Execute(mock);
                Assert.That(command.ExecuteTask, Is.Not.Null);
                command.ExecuteTask.Wait();
            };

            Task.Run(action).Wait(3000);

            dependencyCommandMock.AssertWasCalled(m => m.CanExecute(Arg <IRegnskabViewModel> .Is.Equal(regnskabViewModelMock)));
            dependencyCommandMock.AssertWasNotCalled(m => m.Execute(Arg <object> .Is.Anything));
            dependencyCommandMock.AssertWasNotCalled(m => m.ExecuteTask);
            finansstyringRepositoryMock.AssertWasCalled(m => m.BudgetkontoplanGetAsync(Arg <int> .Is.Equal(regnskabsnummer), Arg <DateTime> .Is.Equal(statusDato)));
            regnskabViewModelMock.AssertWasCalled(m => m.Budgetkontogrupper);
            regnskabViewModelMock.AssertWasCalled(m => m.Budgetkonti, opt => opt.Repeat.Times(budgetkontoModelMockCollection.Count() + 1));
            regnskabViewModelMock.AssertWasNotCalled(m => m.BudgetkontoAdd(Arg <IBudgetkontoViewModel> .Is.Anything));
            unreadedBudgetkontoViewModelMock.AssertWasCalled(m => m.RefreshCommand);
            refreshCommandMock.AssertWasCalled(m => m.CanExecute(Arg <object> .Is.Equal(unreadedBudgetkontoViewModelMock)));
            refreshCommandMock.AssertWasCalled(m => m.Execute(Arg <object> .Is.Equal(unreadedBudgetkontoViewModelMock)));
            exceptionHandlerMock.AssertWasNotCalled(m => m.HandleException(Arg <Exception> .Is.Anything));
        }