Index: Core/Gui/src/Core.Gui/Commands/StorageCommandHandler.cs =================================================================== diff -u -r8b7e959df30173881f81b817c4f6226546807f31 -ra2083c5d161b2769dcde539d41f2afdf3df90f41 --- Core/Gui/src/Core.Gui/Commands/StorageCommandHandler.cs (.../StorageCommandHandler.cs) (revision 8b7e959df30173881f81b817c4f6226546807f31) +++ Core/Gui/src/Core.Gui/Commands/StorageCommandHandler.cs (.../StorageCommandHandler.cs) (revision a2083c5d161b2769dcde539d41f2afdf3df90f41) @@ -119,7 +119,8 @@ } catch (ProjectFactoryException e) { - log.Error(e); + log.Error(e.Message); + log.Info(Resources.StorageCommandHandler_NewProject_Creating_new_project_failed); return; } Index: Core/Gui/src/Core.Gui/Properties/Resources.Designer.cs =================================================================== diff -u -rb41da4f0fb44af1cd286c3d77668280497ec8199 -ra2083c5d161b2769dcde539d41f2afdf3df90f41 --- Core/Gui/src/Core.Gui/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision b41da4f0fb44af1cd286c3d77668280497ec8199) +++ Core/Gui/src/Core.Gui/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision a2083c5d161b2769dcde539d41f2afdf3df90f41) @@ -2597,6 +2597,15 @@ } /// + /// Looks up a localized string similar to Nieuw project aanmaken is mislukt.. + /// + public static string StorageCommandHandler_NewProject_Creating_new_project_failed { + get { + return ResourceManager.GetString("StorageCommandHandler_NewProject_Creating_new_project_failed", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Sla wijzigingen in het project op: {0}?. /// public static string StorageCommandHandler_OpenSaveOrDiscardProjectDialog_SaveChangesToProject_0 { Index: Core/Gui/src/Core.Gui/Properties/Resources.resx =================================================================== diff -u -rb41da4f0fb44af1cd286c3d77668280497ec8199 -ra2083c5d161b2769dcde539d41f2afdf3df90f41 --- Core/Gui/src/Core.Gui/Properties/Resources.resx (.../Resources.resx) (revision b41da4f0fb44af1cd286c3d77668280497ec8199) +++ Core/Gui/src/Core.Gui/Properties/Resources.resx (.../Resources.resx) (revision a2083c5d161b2769dcde539d41f2afdf3df90f41) @@ -469,6 +469,9 @@ Nieuw project aanmaken is geannuleerd. + + Nieuw project aanmaken is mislukt. + Fout Index: Core/Gui/test/Core.Gui.Test/Commands/StorageCommandHandlerTest.cs =================================================================== diff -u -r2bb78c041989c4970c56a3d74f0afa82083625ae -ra2083c5d161b2769dcde539d41f2afdf3df90f41 --- Core/Gui/test/Core.Gui.Test/Commands/StorageCommandHandlerTest.cs (.../StorageCommandHandlerTest.cs) (revision 2bb78c041989c4970c56a3d74f0afa82083625ae) +++ Core/Gui/test/Core.Gui.Test/Commands/StorageCommandHandlerTest.cs (.../StorageCommandHandlerTest.cs) (revision a2083c5d161b2769dcde539d41f2afdf3df90f41) @@ -58,7 +58,8 @@ projectOwner.Stub(po => po.ProjectFilePath).Return(savedProjectPath); var projectFactory = mocks.Stub(); - projectFactory.Stub(pf => pf.CreateNewProject(OnCreateNewProjectFunc)).Return(newProject); + projectFactory.Stub(pf => pf.CreateNewProject(OnCreateNewProjectFunc)) + .Return(newProject); projectOwner.Expect(po => po.SetProject(newProject, null)); var inquiryHelper = mocks.Stub(); @@ -89,6 +90,90 @@ } [Test] + public void CreateNewProject_ProjectFactoryReturnsNull_LogsMessage() + { + // Setup + object OnCreateNewProjectFunc() => null; + + var projectStorage = mocks.Stub(); + var projectMigrator = mocks.Stub(); + var projectOwner = mocks.Stub(); + + var projectFactory = mocks.StrictMock(); + projectFactory.Stub(pf => pf.CreateNewProject(OnCreateNewProjectFunc)) + .Return(null); + + var inquiryHelper = mocks.Stub(); + var mainWindowController = mocks.Stub(); + + mocks.ReplayAll(); + + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectMigrator, + projectFactory, + projectOwner, + inquiryHelper, + mainWindowController); + + // Call + void Call() => storageCommandHandler.CreateNewProject(OnCreateNewProjectFunc); + + // Assert + Tuple[] expectedMessages = + { + Tuple.Create("Nieuw project aanmaken is gestart.", LogLevelConstant.Info), + Tuple.Create("Nieuw project aanmaken is geannuleerd.", LogLevelConstant.Info) + }; + TestHelper.AssertLogMessagesWithLevelAreGenerated(Call, expectedMessages, 2); + + mocks.VerifyAll(); + } + + [Test] + public void CreateNewProject_ProjectFactoryThrowsProjectFactoryException_LogsMessage() + { + // Setup + const string expectedExceptionMessage = "Error message"; + object OnCreateNewProjectFunc() => null; + + var projectStorage = mocks.Stub(); + var projectMigrator = mocks.Stub(); + var projectOwner = mocks.Stub(); + + var projectFactory = mocks.StrictMock(); + projectFactory.Stub(pf => pf.CreateNewProject(OnCreateNewProjectFunc)) + .Throw(new ProjectFactoryException(expectedExceptionMessage)); + + var inquiryHelper = mocks.Stub(); + var mainWindowController = mocks.Stub(); + + mocks.ReplayAll(); + + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectMigrator, + projectFactory, + projectOwner, + inquiryHelper, + mainWindowController); + + // Call + void Call() => storageCommandHandler.CreateNewProject(OnCreateNewProjectFunc); + + // Assert + Tuple[] expectedMessages = + { + Tuple.Create("Nieuw project aanmaken is gestart.", LogLevelConstant.Info), + Tuple.Create(expectedExceptionMessage, LogLevelConstant.Error), + Tuple.Create("Nieuw project aanmaken is mislukt.", LogLevelConstant.Info) + }; + TestHelper.AssertLogMessagesWithLevelAreGenerated(Call, expectedMessages, 3); + + mocks.VerifyAll(); + } + + [Test] public void SaveProject_SavingProjectThrowsStorageException_AbortSaveAndReturnFalse() { // Setup