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 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 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);
        }
        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);
        }