public void itShouldShowOpenFileDialogOnCtrlO()
        {
            var mockOpenDialog = new MockOpenFileDialog();
            var sut            = new Main().WithOpenFileDialog(mockOpenDialog);

            sut.AcceptKeys(Keys.Control | Keys.O);

            Assert.IsTrue(mockOpenDialog.OpenDialogShown);
        }
        public void itShouldLetWorkspaceDecideIfItClosesOrNotWhenNotForcedClose(bool isDirty, bool expectedClosed)
        {
            var sut           = new Main();
            var mockWorkspace = new MockQueryWorkspaceView(isDirty);

            sut.AddWorkspace("test", mockWorkspace);

            sut.AcceptKeys(Keys.Control | Keys.W);

            Assert.IsTrue(mockWorkspace.WasClosed == expectedClosed);
        }
        public void itShouldForceCloseWorkspaceOnCtrlQ()
        {
            var sut = new Main();

            var mockWorkspace = new MockQueryWorkspaceView(true);

            sut.AddWorkspace("test", mockWorkspace);

            sut.AcceptKeys(Keys.Control | Keys.Q);

            Assert.IsTrue(mockWorkspace.WasClosed);
        }
        public void itShouldToggleParametersPaneVisibility()
        {
            var sut           = new Main();
            var mockWorkspace = new MockQueryWorkspaceView(new MockCommandDispatcher());

            sut.AddWorkspace("test", mockWorkspace);

            sut.AcceptKeys(Keys.Control | Keys.N);

            // Output pane visible by default after opening new workspace
            Assert.IsTrue(sut.ActiveQueryWorkspace.IsParametersPaneVisible);

            // Toggle off
            sut.AcceptKeys(Keys.Control | Keys.P);

            // For some odd reason, mockWorkspace.IsParametersPaneVisible is TRUE here!!!
            Assert.IsFalse(sut.ActiveQueryWorkspace.IsParametersPaneVisible);

            // Toggle back on
            sut.AcceptKeys(Keys.Control | Keys.P);

            Assert.IsTrue(sut.ActiveQueryWorkspace.IsParametersPaneVisible);
        }
        public void itShouldToggleResultsPaneVisibility()
        {
            var sut           = new Main();
            var mockWorkspace = new MockQueryWorkspaceView(new MockCommandDispatcher())
                                .WithRunQueryAsync(false);

            sut.AddWorkspace("test", mockWorkspace);

            sut.AcceptKeys(Keys.Control | Keys.E);

            // Output pane visible by default after command execution
            Assert.IsTrue(mockWorkspace.IsResultsPaneVisible);

            // Toggle off
            sut.AcceptKeys(Keys.Control | Keys.R);

            Assert.IsFalse(mockWorkspace.IsResultsPaneVisible);

            // Toggle back on
            sut.AcceptKeys(Keys.Control | Keys.R);

            Assert.IsTrue(mockWorkspace.IsResultsPaneVisible);
        }
        public void itShouldAddNewWorkspaceToMRUOnSave()
        {
            var sut           = new Main().WithAppStateStore(new MockAppStateStore());
            var workspaceFile = "TestFile.qws";
            var workspace1    = new MockQueryWorkspaceView(workspaceFile);

            sut.AddWorkspace("test1", workspace1);

            sut.AcceptKeys(Keys.Control | Keys.S);

            Assert.IsTrue(workspace1.DidSaveWorkspace);

            Assert.IsTrue(sut.MRUItems[0].Text.Contains(workspaceFile));
        }
        public void itShouldCycleWorkspaceTabsBackwardOnCtrlShiftT()
        {
            var sut        = new Main();
            var workspace1 = new MockQueryWorkspaceView();
            var workspace2 = new MockQueryWorkspaceView();
            var workspace3 = new MockQueryWorkspaceView();

            sut.AddWorkspace("test1", workspace1);
            sut.AddWorkspace("test2", workspace2);
            sut.AddWorkspace("test3", workspace3);

            sut.AcceptKeys(Keys.Control | Keys.Shift | Keys.T);

            Assert.AreEqual(sut.ActiveQueryWorkspace, workspace2);

            sut.AcceptKeys(Keys.Control | Keys.Shift | Keys.T);

            Assert.AreEqual(sut.ActiveQueryWorkspace, workspace1);

            sut.AcceptKeys(Keys.Control | Keys.Shift | Keys.T);

            Assert.AreEqual(sut.ActiveQueryWorkspace, workspace3);
        }
        public void itShouldApplyFilterOnCtrlF()
        {
            var sut        = new Main();
            var workspace1 = new MockQueryWorkspaceView();
            var workspace2 = new MockQueryWorkspaceView();

            sut.AddWorkspace("test1", workspace1);

            sut.AddWorkspace("test2", workspace2);

            sut.AcceptKeys(Keys.Control | Keys.F);

            Assert.IsFalse(workspace1.DidApplyFilter);
            Assert.IsTrue(workspace2.DidApplyFilter);
        }
        public void itShouldToggleOutputPaneVisibility()
        {
            var sut           = new Main();
            var mockWorkspace = new MockQueryWorkspaceView(new MockCommandDispatcher())
                                .WithRunQueryAsync(false);

            sut.AddWorkspace("test", mockWorkspace);

            sut.AcceptKeys(Keys.Control | Keys.E);

            var isOutputPaneVisible = mockWorkspace.IsOutputPaneVisible;

            // Toggle
            sut.AcceptKeys(Keys.Control | Keys.Shift | Keys.O);

            Assert.AreNotEqual(isOutputPaneVisible, mockWorkspace.IsOutputPaneVisible);

            isOutputPaneVisible = mockWorkspace.IsOutputPaneVisible;

            // Toggle
            sut.AcceptKeys(Keys.Control | Keys.Shift | Keys.O);

            Assert.AreNotEqual(isOutputPaneVisible, mockWorkspace.IsOutputPaneVisible);
        }
        public void itShouldRunQueryOnCtrlE()
        {
            var sut        = new Main();
            var workspace1 = new MockQueryWorkspaceView(new MockCommandDispatcher());
            var workspace2 = new MockQueryWorkspaceView(new MockCommandDispatcher());


            sut.AddWorkspace("test1", workspace1);

            sut.AddWorkspace("test2", workspace2);

            sut.AcceptKeys(Keys.Control | Keys.E);

            Assert.IsFalse(workspace1.DidRunQuery);
            Assert.IsTrue(workspace2.DidRunQuery);
        }
        public void itShouldSaveWorkspaceOnCtrlS()
        {
            var sut        = new Main();
            var workspace1 = new MockQueryWorkspaceView();
            var workspace2 = new MockQueryWorkspaceView();
            var workspace3 = new MockQueryWorkspaceView();

            sut.AddWorkspace("test1", workspace1);
            sut.AddWorkspace("test2", workspace2);
            sut.AddWorkspace("test3", workspace3);

            sut.AcceptKeys(Keys.Control | Keys.S);

            Assert.IsFalse(workspace1.DidSaveWorkspace);
            Assert.IsFalse(workspace2.DidSaveWorkspace);
            Assert.IsTrue(workspace3.DidSaveWorkspace);
        }
        public void itShouldCloneActiveWorkspaceOnCtrlD()
        {
            var sut = new Main();

            var model = new Workspace {
                ConnectionString = "qwerty",
                Query            = "SELECT * FROM Test",
                Parameters       = "@1 = a @2 = b"
            };

            sut.AddWorkspace("test", new QueryWorkspaceView(model));

            Assert.AreEqual(1, sut.Workspaces.Count);

            sut.AcceptKeys(Keys.Control | Keys.D);

            Assert.IsTrue(sut.Workspaces.First().Model.HasSameValueAs(sut.Workspaces.Last().Model));
        }