public void GetWebRequestDesignerViewModel_Constructor_PreviewViewModel_NotNull()
        {
            var properties = new Dictionary<string, Mock<ModelProperty>>();
            var propertyCollection = new Mock<ModelPropertyCollection>();

            var url = new Mock<ModelProperty>();
            url.SetupProperty(p => p.ComputedValue, null);
            properties.Add("Url", url);
            propertyCollection.Protected().Setup<ModelProperty>("Find", "Url", true).Returns(url.Object);

            var modelItemMock = new Mock<ModelItem>();
            modelItemMock.Setup(s => s.Properties).Returns(propertyCollection.Object);

            var sut = new GetWebRequestWithTimeoutDesignerViewModel(modelItemMock.Object);
            Assert.IsNotNull(sut.PreviewViewModel);
        }
        public void GetWebRequestDesignerViewModel_SetUrl_EmptyString_CanPreviewIsFalse()
        {
            var properties = new Dictionary<string, Mock<ModelProperty>>();
            var propertyCollection = new Mock<ModelPropertyCollection>();

            var url = new Mock<ModelProperty>();
            url.SetupProperty(p => p.ComputedValue, "xxxxx"); // start "tracking" sets/gets to this property
            properties.Add("Url", url);
            propertyCollection.Protected().Setup<ModelProperty>("Find", "Url", true).Returns(url.Object);

            var modelItemMock = new Mock<ModelItem>();
            modelItemMock.Setup(s => s.Properties).Returns(propertyCollection.Object);

            var sut = new GetWebRequestWithTimeoutDesignerViewModel(modelItemMock.Object);
            url.Object.ComputedValue = "";
            modelItemMock.Raise(mi => mi.PropertyChanged += null, new PropertyChangedEventArgs("Url"));

            Assert.IsFalse(sut.PreviewViewModel.CanPreview);
        }
        public void GetWebRequestDesignerViewModel_SetUrl_StringWithTwoVariables_CanPreviewIsTrueAndPreviewInputsCountIsTwo()
        {
            var properties = new Dictionary<string, Mock<ModelProperty>>();
            var propertyCollection = new Mock<ModelPropertyCollection>();

            var url = new Mock<ModelProperty>();
            url.SetupProperty(p => p.ComputedValue, ""); // start "tracking" sets/gets to this property
            properties.Add("Url", url);
            propertyCollection.Protected().Setup<ModelProperty>("Find", "Url", true).Returns(url.Object);

            var modelItemMock = new Mock<ModelItem>();
            modelItemMock.Setup(s => s.Properties).Returns(propertyCollection.Object);

            var sut = new GetWebRequestWithTimeoutDesignerViewModel(modelItemMock.Object);
            url.Object.ComputedValue = "http://www.[[mysite]].com?[[queryString]]";
            modelItemMock.Raise(mi => mi.PropertyChanged += null, new PropertyChangedEventArgs("Url"));

            Assert.IsTrue(sut.PreviewViewModel.CanPreview);
            Assert.IsTrue(sut.PreviewViewModel.Inputs.Count == 2);
            Assert.AreEqual(sut.PreviewViewModel.InputsVisibility, Visibility.Visible);
        }
        public void GetWebRequestDesignerViewModel_Validate_ValidString_IsValidTrue()
        {
            //------------Setup for test--------------------------
            var modelItem = GenerateMockModelItem("http://www.search.com?p=5");

            var viewModel = new GetWebRequestWithTimeoutDesignerViewModel(modelItem.Object);

            //------------Execute Test---------------------------
            viewModel.Validate();

            //------------Assert Results-------------------------
            Assert.IsTrue(viewModel.IsValid);
            Assert.IsNull(viewModel.Errors);
        }
        public void GetWebRequestDesignerViewModel_Validate_ValidExpression_IsValidTrue()
        {
            //------------Setup for test--------------------------
            var modelItem = GenerateMockModelItem("http://[[asdf]]?[[asdf]]");

            var viewModel = new GetWebRequestWithTimeoutDesignerViewModel(modelItem.Object);

            //------------Execute Test---------------------------
            viewModel.Validate();

            //------------Assert Results-------------------------
            Assert.IsTrue(viewModel.IsValid);
            Assert.IsNull(viewModel.Errors);
        }
        public void GetWebRequestDesignerViewModel_Validate_InvalidExpression_IsValidFalse()
        {
            //------------Setup for test--------------------------
            var modelItem = GenerateMockModelItem("[[asdf]asdf]]asdf]]");

            var viewModel = new GetWebRequestWithTimeoutDesignerViewModel(modelItem.Object);

            //------------Execute Test---------------------------
            viewModel.Validate();

            //------------Assert Results-------------------------
            Assert.IsFalse(viewModel.IsValid);
            Assert.AreEqual(1, viewModel.Errors.Count);
            Assert.AreEqual("Invalid expression: opening and closing brackets don't match.", viewModel.Errors[0].Message);
        }
        public void GetWebRequestDesignerViewModel_ExecutePreviewWhenUrlIsNull_WebRequestIsNotInvoked()
        {
            var modelItem = GenerateMockModelItem(string.Empty);

            var sut = new GetWebRequestWithTimeoutDesignerViewModel(modelItem.Object);

            var isInvoked = false;
            sut.WebInvoke = (m, u, h) =>
            {
                isInvoked = true;
                return "Was Called";
            };

            sut.PreviewViewModel.PreviewCommand.Execute(null);

            Assert.IsTrue(string.IsNullOrWhiteSpace(sut.PreviewViewModel.Output));
            Assert.IsFalse(isInvoked);
            Assert.AreEqual(1, sut.Errors.Count);
        }
        public void GetWebRequestDesignerViewModel_ExecutePreviewWhenUrlIsValidWithoutHttpPrefix_WebRequestIsInvoked()
        {
            var properties = new Dictionary<string, Mock<ModelProperty>>();
            var propertyCollection = new Mock<ModelPropertyCollection>();

            var url = new Mock<ModelProperty>();
            url.SetupProperty(p => p.ComputedValue, "www.google.com"); // start "tracking" sets/gets to this property
            properties.Add("Url", url);
            propertyCollection.Protected().Setup<ModelProperty>("Find", "Url", true).Returns(url.Object);

            var modelItemMock = new Mock<ModelItem>();
            modelItemMock.Setup(s => s.Properties).Returns(propertyCollection.Object);

            var sut = new GetWebRequestWithTimeoutDesignerViewModel(modelItemMock.Object);

            sut.WebInvoke = (m, u, h) => { return "Was Called"; };

            sut.PreviewViewModel.PreviewCommand.Execute(null);

            Assert.IsFalse(string.IsNullOrWhiteSpace(sut.PreviewViewModel.Output));
            Assert.AreEqual(sut.PreviewViewModel.Output, "Was Called");
            Assert.IsNull(sut.Errors);
        }
        public void GetWebRequestDesignerViewModel_SetHeaders_StringWithOneVariables_PreviewInputsCountIsOne()
        {

            var properties = new Dictionary<string, Mock<ModelProperty>>();
            var propertyCollection = new Mock<ModelPropertyCollection>();

            var headers = new Mock<ModelProperty>();
            headers.SetupProperty(p => p.ComputedValue, ""); // start "tracking" sets/gets to this property
            properties.Add("Headers", headers);
            propertyCollection.Protected().Setup<ModelProperty>("Find", "Headers", true).Returns(headers.Object);

            var modelItemMock = new Mock<ModelItem>();
            modelItemMock.Setup(s => s.Properties).Returns(propertyCollection.Object);

            var sut = new GetWebRequestWithTimeoutDesignerViewModel(modelItemMock.Object);

            headers.Object.ComputedValue = "ContentType=[[contenttype]]";
            modelItemMock.Raise(mi => mi.PropertyChanged += null, new PropertyChangedEventArgs("Headers"));

            Assert.IsTrue(sut.PreviewViewModel.Inputs.Count == 1);
            Assert.AreEqual(sut.PreviewViewModel.InputsVisibility, Visibility.Visible);
        }