public void InitalState()
        {
            var viewModel = new AccountManagementPageViewModel(Application);

            Assert.That(viewModel.Caption, Is.EqualTo(Properties.Resources.AccountManagementPageCaption));
            Assert.That(viewModel.CreateNewAccountCommand.IsEnabled, Is.False);
            Assert.That(viewModel.OpenAccountCommand.IsEnabled, Is.True);
            Assert.That(viewModel.Accounts, Is.Empty);
        }
        public void CreateRepositoryWithRepositoryThrowsErrorShowsMessageBox()
        {
            Repository.When(r => r.Create(Arg.Any<string>(), Arg.Any<string>())).Do(c => {throw new ApplicationException("ErrorMessage");});

            var viewModel = new AccountManagementPageViewModel(Application)
            {
                NewAccountFilePath = "Test",
                NewAccountNameProperty = {Value = "Test"}
            };

            viewModel.CreateNewAccountCommand.Execute(null);

            Repository.Received(1).Create("Test", "Test");
            WindowManager.Received(1).ShowError("Error", "ErrorMessage");
        }
        public void CreateAccount()
        {
            var viewModel = new AccountManagementPageViewModel(Application)
            {
                NewAccountFilePath = "Test",
                NewAccountNameProperty = {Value = "Test"}
            };

            viewModel.CreateNewAccountCommand.Execute(null);

            Repository.Received(1).Create("Test", "Test");
            Assert.That(Application.ActivePage, Is.InstanceOf<RequestManagementPageViewModel>());

            var requestManagementPage = (RequestManagementPageViewModel) Application.ActivePage;
            Assert.That(requestManagementPage.Month, Is.EqualTo(ApplicationContext.Now.Month));
            Assert.That(requestManagementPage.Year, Is.EqualTo(ApplicationContext.Now.Year));

            ApplicationContext.DidNotReceiveWithAnyArgs().UpdateRecentAccountInformation("Test");
        }
        public void LoadsRecentAccounts()
        {
            var values = new List<RecentAccountInformation>
            {
                CreateRecentAccountInformation("C:\test\test.txt", new DateTime(2014, 4, 1)),
                CreateRecentAccountInformation("C:\test2\test2.txt", new DateTime(2014, 8, 14))
            };

            ApplicationContext.RecentAccounts.Returns(values.AsReadOnly());

            var viewModel = new AccountManagementPageViewModel(Application);

            Assert.That(viewModel.Accounts.Count, Is.EqualTo(2));

            Assert.That(viewModel.Accounts[0].LastAccessDate, Is.EqualTo(new DateTime(2014, 4, 1)));
            Assert.That(viewModel.Accounts[0].Path, Is.EqualTo("C:\test\test.txt"));

            Assert.That(viewModel.Accounts[1].LastAccessDate, Is.EqualTo(new DateTime(2014, 8, 14)));
            Assert.That(viewModel.Accounts[1].Path, Is.EqualTo("C:\test2\test2.txt"));
        }
        public void OpenCommand(bool accept)
        {
            var expectedPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Konto.mmdb");

            if (accept)
            {
                WindowManager.ShowOpenFileDialog(Arg.Any<string>(), Arg.Any<string>()).Returns(expectedPath);
            }
            else
            {
                WindowManager.ShowOpenFileDialog(Arg.Any<string>(), Arg.Any<string>()).Returns("");
                expectedPath = "";
            }

            var viewModel = new AccountManagementPageViewModel(Application);
            viewModel.OpenAccountCommand.Execute(null);

            WindowManager.Received(1).ShowOpenFileDialog(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), Properties.Resources.AccountManagementFilterOpenAccount);

            if (accept)
            {
                Repository.Received(1).Open(expectedPath);
                Repository.Received(1).UpdateStandingOrdersToCurrentMonth();
                Assert.That(Application.ActivePage, Is.InstanceOf<RequestManagementPageViewModel>());
            }
            else
            {
                Repository.DidNotReceiveWithAnyArgs().Open(Arg.Any<string>());
                Repository.DidNotReceiveWithAnyArgs().UpdateStandingOrdersToCurrentMonth();
                Assert.That(Application.ActivePage, Is.Not.InstanceOf<RequestManagementPageViewModel>());
            }

            ApplicationContext.DidNotReceiveWithAnyArgs().UpdateRecentAccountInformation(Arg.Any<string>());
        }
        public void OpenRecentAccountWithException(bool answerYes)
        {
            const string accountPath = @"C:\test\test.txt";
            var values = new List<RecentAccountInformation>
            {
                CreateRecentAccountInformation(accountPath, new DateTime(2014, 4, 1)),
            };
            ApplicationContext.RecentAccounts.Returns(values.AsReadOnly());
            Repository.When(r => r.Open(Arg.Any<string>())).Do(c => { throw new FileNotFoundException("Text"); });

            if (answerYes)
            {
                WindowManager.When(w => w.ShowQuestion(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<Action>(), Arg.Any<Action>()))
                             .Do(c => ((Action)c[2]).Invoke());
            }

            var viewModel = new AccountManagementPageViewModel(Application);
            viewModel.Accounts.First().OpenCommand.Execute(null);

            Repository.Received(1).Open(accountPath);
            ApplicationContext.DidNotReceiveWithAnyArgs().UpdateRecentAccountInformation(Arg.Any<string>());

            WindowManager.Received(1).ShowQuestion(Properties.Resources.ErrorOpenRecentAccount,
                                                   string.Format(Properties.Resources.RecentAccountNotFoundFormat, accountPath),
                                                   Arg.Any<Action>(), Arg.Any<Action>());

            if (answerYes)
            {
                ApplicationContext.Received(1).DeleteRecentAccountInformation(accountPath);
                Assert.That(viewModel.Accounts.Count, Is.EqualTo(0));
            }
            else
            {
                ApplicationContext.DidNotReceiveWithAnyArgs().DeleteRecentAccountInformation(Arg.Any<string>());
                Assert.That(viewModel.Accounts.Count, Is.EqualTo(1));
            }

            Assert.That(Application.ActivePage, Is.Not.InstanceOf<AccountManagementPageViewModel>());
        }
        public void OpenRecentAccount()
        {
            var values = new List<RecentAccountInformation>
            {
                CreateRecentAccountInformation(@"C:\test\test.txt", new DateTime(2014, 4, 1)),
            };
            ApplicationContext.RecentAccounts.Returns(values.AsReadOnly());

            var viewModel = new AccountManagementPageViewModel(Application);
            viewModel.Accounts.First().OpenCommand.Execute(null);

            Repository.Received(1).Open(@"C:\test\test.txt");
            Repository.Received(1).UpdateStandingOrdersToCurrentMonth();
            ApplicationContext.DidNotReceiveWithAnyArgs().UpdateRecentAccountInformation(@"C:\test\test.txt");
            Assert.That(Application.ActivePage, Is.InstanceOf<RequestManagementPageViewModel>());
        }
        public void OpenCommandWithException()
        {
            WindowManager.ShowOpenFileDialog(Arg.Any<string>(), Arg.Any<string>()).Returns("TestPath");
            Repository.When(r => r.Open(Arg.Any<string>())).Do(c => {throw new ApplicationException("TestMessage");});

            var viewModel = new AccountManagementPageViewModel(Application);
            viewModel.OpenAccountCommand.Execute(null);

            WindowManager.Received(1).ShowError(Properties.Resources.ErrorOpenRecentAccount,string.Format(Properties.Resources.RecentAccountUnexpectedErrorFormat, "TestMessage"));
            Repository.Received(1).Open(Arg.Any<string>());
            ApplicationContext.DidNotReceiveWithAnyArgs().UpdateRecentAccountInformation(Arg.Any<string>());
            Assert.That(Application.ActivePage, Is.Not.InstanceOf<RequestManagementPageViewModel>());
        }
 public void ActivateAccountManagementPage()
 {
     var accountManagementScreen = new AccountManagementPageViewModel(this);
     ActivePage = accountManagementScreen;
 }