public void QueryState_WithNoItemInContext_ReturnsDisabled()
        {
            // Arrange
            var sheer = Substitute.For<ISheerResponse>();
            var contextChecker = Substitute.For<ICommandContextChecker>();
            var locator = Substitute.For<IDialogLocator>();
            var processor = Substitute.For<IDialogResultProcessor>();
            var command = new SelectBaseLayout(sheer, contextChecker, locator, processor);

            var context = new CommandContext();

            // Act
            var result = command.QueryState(context);

            // Assert
            Assert.Equal(CommandState.Disabled, result);
        }
        public void Run_WithIsPostBackTrueAndHasResultTrue_CallsDialogResultProcessor()
        {
            // Arrange
            var result = new ID().ToString();
            var item = MasterFakesFactory.CreateFakeItem();
            var args = Substitute.For<ClientPipelineArgs>();
            args.Parameters = new NameValueCollection {{"items", item.Uri.ToString()}};
            args.IsPostBack = true;
            args.Result = result;

            var sheer = Substitute.For<ISheerResponse>();
            sheer.CheckModified().Returns(true);
            var contextChecker = Substitute.For<ICommandContextChecker>();
            var locator = Substitute.For<IDialogLocator>();
            var processor = Substitute.For<IDialogResultProcessor>();
            var command = new SelectBaseLayout(sheer, contextChecker, locator, processor);

            // Act
            command.Run(args);

            // Assert
            string message;
            processor.Received().ProcessResult(Arg.Is<Item>(i => i.ID == item.ID), result, out message);
        }
        public void Run_WithIsPostBackTrueAndHasResultTrueAndResultProcessorReturnsFalse_CallsAlertWithMessage()
        {
            // Arrange
            var result = new ID().ToString();
            var item = MasterFakesFactory.CreateFakeItem();
            var args = Substitute.For<ClientPipelineArgs>();
            args.Parameters = new NameValueCollection {{"items", item.Uri.ToString()}};
            args.IsPostBack = true;
            args.Result = result;

            string message;
            var expectedAlert = "This is the expected alert message!";
            var sheer = Substitute.For<ISheerResponse>();
            sheer.CheckModified().Returns(true);
            var contextChecker = Substitute.For<ICommandContextChecker>();
            var locator = Substitute.For<IDialogLocator>();
            var processor = Substitute.For<IDialogResultProcessor>();
            processor.ProcessResult(Arg.Any<Item>(), Arg.Any<string>(), out message)
                .Returns(false)
                .AndDoes(ci => ci[2] = expectedAlert);
            var command = new SelectBaseLayout(sheer, contextChecker, locator, processor);

            // Act
            command.Run(args);

            // Assert
            sheer.Received().Alert(expectedAlert);
        }
            Run_WithIsPostBackFalseAndDialogLocatorReturnsValue_CallsShowModalDialogWithReturnedValueAndCallsWaitForPostBack
            ()
        {
            // Arrange
            var item = MasterFakesFactory.CreateFakeItem();
            var args = Substitute.For<ClientPipelineArgs>();
            args.Parameters = new NameValueCollection {{"items", item.Uri.ToString()}};
            args.IsPostBack = false;

            var sheer = Substitute.For<ISheerResponse>();
            sheer.CheckModified().Returns(true);
            var contextChecker = Substitute.For<ICommandContextChecker>();
            var url = "/This/is/my/dialog/url";
            var locator = Substitute.For<IDialogLocator>();
            locator.GetDialogUrl(Arg.Any<Item>()).Returns(url);
            var processor = Substitute.For<IDialogResultProcessor>();
            var command = new SelectBaseLayout(sheer, contextChecker, locator, processor);

            // Act
            command.Run(args);

            // Assert
            sheer.Received().ShowModalDialog(url);
            args.Received().WaitForPostBack();
        }
        public void Run_WithIsPostBackFalseAndDialogLocatorReturnsNull_CallsAlertButNotShowModalDialog()
        {
            // Arrange
            var item = MasterFakesFactory.CreateFakeItem();
            var args = Substitute.For<ClientPipelineArgs>();
            args.Parameters = new NameValueCollection {{"items", item.Uri.ToString()}};
            args.IsPostBack = false;

            var sheer = Substitute.For<ISheerResponse>();
            sheer.CheckModified().Returns(true);
            var contextChecker = Substitute.For<ICommandContextChecker>();
            var locator = Substitute.For<IDialogLocator>();
            locator.GetDialogUrl(Arg.Any<Item>()).Returns((string) null);
            var processor = Substitute.For<IDialogResultProcessor>();
            var command = new SelectBaseLayout(sheer, contextChecker, locator, processor);

            // Act
            command.Run(args);

            // Assert
            sheer.Received().Alert(Arg.Any<string>());
            sheer.DidNotReceive().ShowModalDialog(Arg.Any<string>());
        }
        public void Run_WithIsPostBackFalse_CallsDialogLocatorWithItemFromPipelineArgs()
        {
            // Arrange
            var item = MasterFakesFactory.CreateFakeItem();
            var args = Substitute.For<ClientPipelineArgs>();
            args.Parameters = new NameValueCollection {{"items", item.Uri.ToString()}};
            args.IsPostBack = false;

            var sheer = Substitute.For<ISheerResponse>();
            sheer.CheckModified().Returns(true);
            var contextChecker = Substitute.For<ICommandContextChecker>();
            var locator = Substitute.For<IDialogLocator>();
            var processor = Substitute.For<IDialogResultProcessor>();
            var command = new SelectBaseLayout(sheer, contextChecker, locator, processor);

            // Act
            command.Run(args);

            // Assert
            locator.Received().GetDialogUrl(Arg.Is<Item>(i => i.ID == item.ID));
        }
        public void Run_WhenCheckModifiedReturnsFalse_DoesNotDoAnything()
        {
            // Arrange
            var args = Substitute.For<ClientPipelineArgs>();

            var sheer = Substitute.For<ISheerResponse>();
            sheer.CheckModified().Returns(false);
            var contextChecker = Substitute.For<ICommandContextChecker>();
            var locator = Substitute.For<IDialogLocator>();
            var processor = Substitute.For<IDialogResultProcessor>();
            var command = new SelectBaseLayout(sheer, contextChecker, locator, processor);

            // Act
            command.Run(args);

            // Assert
            sheer.DidNotReceive().Alert(Arg.Any<string>());
            sheer.DidNotReceive().ShowModalDialog(Arg.Any<string>());
            locator.DidNotReceive().GetDialogUrl(Arg.Any<Item>());
            string message;
            processor.DidNotReceive().ProcessResult(Arg.Any<Item>(), Arg.Any<string>(), out message);
        }
        public void QueryState_WhenContextCheckerReturnsTrue_ReturnsEnabled()
        {
            // Arrange
            var sheer = Substitute.For<ISheerResponse>();
            var contextChecker = Substitute.For<ICommandContextChecker>();
            contextChecker.CanExecute(Arg.Any<Item>()).Returns(true);
            var locator = Substitute.For<IDialogLocator>();
            var processor = Substitute.For<IDialogResultProcessor>();
            var command = new SelectBaseLayout(sheer, contextChecker, locator, processor);

            var context = new CommandContext(MasterFakesFactory.CreateFakeItem());

            // Act
            var result = command.QueryState(context);

            // Assert
            Assert.Equal(CommandState.Enabled, result);
        }