Пример #1
0
        public void LoadProperties()
        {
            List <PropertyMetaData> properties = new List <PropertyMetaData>();

            properties.Add(new PropertyMetaData()
            {
                Name = "ismobile", Type = "Boolean"
            });
            properties.Add(new PropertyMetaData()
            {
                Name = "hardwarevendor", Type = "String"
            });
            properties.Add(new PropertyMetaData()
            {
                Name = "hardwarevariants", Type = "Array"
            });
            ProductMetaData devicePropertyData = new ProductMetaData();

            devicePropertyData.Properties = properties;
            _propertiesReturnedByRequestEngine.Add("test", devicePropertyData);
            _complexPropertyTypes.Add("hardwarevariants", typeof(IReadOnlyList <string>));

            CreatePipeline();

            Assert.AreEqual(3, _engine.Properties.Count);
            Assert.IsTrue(_engine.Properties.Any(p => p.Name == "ismobile"));
            Assert.IsTrue(_engine.Properties.Any(p => p.Name == "hardwarevendor"));
            Assert.IsTrue(_engine.Properties.Any(p => p.Name == "hardwarevariants"));
        }
Пример #2
0
        public void LoadProperties_NoMatchSubProperties()
        {
            List <PropertyMetaData> subproperties = new List <PropertyMetaData>();

            subproperties.Add(new PropertyMetaData()
            {
                Name = "ismobile", Type = "Boolean"
            });
            subproperties.Add(new PropertyMetaData()
            {
                Name = "hardwarevendor", Type = "String"
            });
            subproperties.Add(new PropertyMetaData()
            {
                Name = "hardwarevariants", Type = "Array"
            });

            List <PropertyMetaData> properties = new List <PropertyMetaData>();

            properties.Add(new PropertyMetaData()
            {
                Name = "cloudComplexProperty", Type = "Array", ItemProperties = subproperties
            });

            ProductMetaData devicePropertyData = new ProductMetaData();

            devicePropertyData.Properties = properties;
            _propertiesReturnedByRequestEngine.Add("test", devicePropertyData);

            CreatePipeline();
        }
Пример #3
0
        public void LoadProperties_WrongProperties()
        {
            List <PropertyMetaData> properties = new List <PropertyMetaData>();

            properties.Add(new PropertyMetaData()
            {
                Name = "ismobile", Type = "Boolean"
            });
            properties.Add(new PropertyMetaData()
            {
                Name = "hardwarevendor", Type = "String"
            });
            properties.Add(new PropertyMetaData()
            {
                Name = "hardwarevariants", Type = "Array"
            });
            ProductMetaData devicePropertyData = new ProductMetaData();

            devicePropertyData.Properties = properties;
            _propertiesReturnedByRequestEngine.Add("test2", devicePropertyData);

            try
            {
                CreatePipeline();
                Assert.Fail("PipelineException should be thrown");
            }
            catch (PipelineException ex)
            {
                Assert.AreEqual(
                    string.Format(CultureInfo.InvariantCulture,
                                  PropertiesError,
                                  "test"),
                    ex.Message);
            }
        }
        public ActionResult Edit(ProductMetaData MyProduct, FormCollection fc)
        {
            if (ModelState.IsValid)
            {
                String[] res = generatePaths(MyProduct.LargeImage, MyProduct.SmallImage, MyProduct.ProductName);
                MyProduct.LargeImagePath = res[0];
                MyProduct.SmallImagePath = res[1];
                ViewBag.Images           = fc["largeimg"];
                ViewBag.SmallImage       = fc["smallimg"];
                Product tblProduct = new Product();
                tblProduct.ProductID        = MyProduct.ProductID;
                tblProduct.ProductName      = MyProduct.ProductName;
                tblProduct.Price            = MyProduct.Price;
                tblProduct.Quantity         = MyProduct.Quantity;
                tblProduct.Category         = MyProduct.Category;
                tblProduct.ShortDescription = MyProduct.ShortDescription;
                tblProduct.LongDescription  = MyProduct.LongDescription;
                tblProduct.LargeImage       = MyProduct.LargeImagePath;
                tblProduct.SmallImage       = MyProduct.SmallImagePath;
                HttpResponseMessage webResponse = webClient.PutAsJsonAsync("http://localhost:64732/api/Products/", tblProduct).Result;
                if (webResponse.IsSuccessStatusCode)
                {
                    removeImages(fc["largeimg"].ToString(), fc["smallimg"].ToString());
                    saveImages(MyProduct.LargeImage, MyProduct.SmallImage, MyProduct.ProductName.ToString());
                    logger.Info("SUCCESSFULLY UPDATED ALL THE DETAILS OF " + MyProduct.ProductName);
                    return(RedirectToAction("Index"));
                }
                else
                {
                    logger.Debug("WEB API ERROR FOR UPDATING PRODUCT " + webResponse.StatusCode.ToString());
                }
            }

            return(View(MyProduct));
        }
        // GET: Products/Details/5
        public ActionResult Details(string id)
        {
            ProductMetaData myProduct = null;

            try
            {
                if (id == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }
                HttpResponseMessage webResponse = webClient.GetAsync("http://localhost:64732/api/Products/" + id).Result;
                Product             products    = null;
                if (webResponse.IsSuccessStatusCode)
                {
                    //Storing the response details recieved from web api
                    var response = webResponse.Content.ReadAsStringAsync().Result;
                    products = JsonConvert.DeserializeObject <Product>(response);
                }
                if (products == null)
                {
                    logger.Debug("ERROR IN GETTING PRODUCT DETAILS OF  " + id);
                    return(HttpNotFound());
                }
                List <string> values = products.LargeImage.Split(',').ToList();
                values.Remove("");
                ViewBag.Images = values;
                myProduct      = setproductMetaData(products);
            }
            catch (Exception ex)
            {
                logger.Error("ERROR IN GETTING PRODUCT DETAILS OF  " + id + ex.Message, ex);
            }
            return(View(myProduct));
        }
Пример #6
0
        public void Process_NoCloudResponse()
        {
            // Setup properties.
            List <PropertyMetaData> properties = new List <PropertyMetaData>();

            properties.Add(new PropertyMetaData()
            {
                Name = "ismobile", Type = "Boolean"
            });
            ProductMetaData devicePropertyData = new ProductMetaData();

            devicePropertyData.Properties = properties;
            _propertiesReturnedByRequestEngine.Add("test", devicePropertyData);

            // Create mock TestInstance so we can see if the ProcessCloudEngine
            // method is called.
            var mockTestInstance = new Mock <TestInstance>()
            {
                CallBase = true
            };

            mockTestInstance.Protected().Setup(
                "ProcessCloudEngine",
                ItExpr.IsAny <IFlowData>(),
                ItExpr.IsAny <TestData>(),
                ItExpr.IsAny <string>()).Verifiable();

            // Create mock TestRequestEngine
            var mockRequestEngine = new Mock <TestRequestEngine>()
            {
                CallBase = true
            };

            mockRequestEngine.Object.PublicProperties = _propertiesReturnedByRequestEngine;

            // Construct the pipeline.
            var pipeline = new PipelineBuilder(new LoggerFactory())
                           .AddFlowElement(mockRequestEngine.Object)
                           .AddFlowElement(mockTestInstance.Object)
                           .Build();

            // Process the pipeline.
            using (var flowData = pipeline.CreateFlowData())
            {
                flowData
                .AddEvidence("query.user-agent", "iPhone")
                .Process();
            }

            // Verify the ProcessCloudEngine method was called
            mockTestInstance.Protected().Verify(
                "ProcessCloudEngine",
                Times.Never(),
                ItExpr.IsAny <IFlowData>(),
                ItExpr.IsAny <TestData>(),
                ItExpr.IsAny <string>());
        }
        public ProductMetaData setproductMetaData(Product products)
        {
            ProductMetaData myProduct = new ProductMetaData();
            var             config    = new MapperConfiguration(cfg => cfg.CreateMap <Product, ProductMetaData>());
            var             mapper    = new Mapper(config);

            myProduct = mapper.Map <ProductMetaData>(products);
            return(myProduct);
        }
        public ActionResult Create(ProductMetaData MyProduct)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    String[] refs = generatePaths(MyProduct.LargeImage, MyProduct.SmallImage, MyProduct.ProductName.ToString());

                    Product tblProduct = new Product();
                    tblProduct.ProductID        = "";
                    tblProduct.ProductName      = MyProduct.ProductName;
                    tblProduct.Price            = MyProduct.Price;
                    tblProduct.Quantity         = MyProduct.Quantity;
                    tblProduct.Category         = MyProduct.Category;
                    tblProduct.ShortDescription = MyProduct.ShortDescription;
                    tblProduct.LongDescription  = MyProduct.LongDescription;
                    tblProduct.LargeImage       = refs[0];
                    tblProduct.SmallImage       = refs[1];

                    HttpResponseMessage webResponse = webClient.PostAsJsonAsync("http://localhost:64732/api/Products", tblProduct).Result;
                    if (webResponse.IsSuccessStatusCode)
                    {
                        saveImages(MyProduct.LargeImage, MyProduct.SmallImage, MyProduct.ProductName.ToString());
                        logger.Info("DETAILS SAVED FOR PRODUCT" + MyProduct.ProductName);
                        return(RedirectToAction("Index"));
                    }
                    else
                    {
                        logger.Error("WEB API ERROR FOR SAVING DETAILS " + MyProduct.ProductName + webResponse.StatusCode);
                    }
                }
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        System.Console.WriteLine("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error("ERROR IN SAVING PRODUCTS DETAILS  " + ex.Message, ex);
            }

            return(View(MyProduct));
        }
Пример #9
0
        public void LoadProperties_NoMatchArray()
        {
            List <PropertyMetaData> properties = new List <PropertyMetaData>();

            properties.Add(new PropertyMetaData()
            {
                Name = "cloudArrayProperty", Type = "Array"
            });
            ProductMetaData devicePropertyData = new ProductMetaData();

            devicePropertyData.Properties = properties;
            _propertiesReturnedByRequestEngine.Add("test", devicePropertyData);

            CreatePipeline();
        }
        // GET: Products/Edit/5
        public ActionResult Edit(string id)
        {
            ProductMetaData myProduct = null;

            try
            {
                if (id == null)
                {
                    logger.Debug("NULL ID PASSED " + id);
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }
                HttpResponseMessage webResponse = webClient.GetAsync("http://localhost:64732/api/Products/" + id).Result;
                Product             products    = null;
                if (webResponse.IsSuccessStatusCode)
                {
                    //Storing the response details recieved from web api
                    var response = webResponse.Content.ReadAsStringAsync().Result;
                    products = JsonConvert.DeserializeObject <Product>(response);
                }
                else
                {
                    logger.Debug("WEB API ERROR FOR GETTING PRODUCT " + id + " " + webResponse.StatusCode.ToString());
                }

                List <string> values = products.LargeImage.Split(',').ToList();
                values.Remove("");
                ViewBag.Images     = values;
                ViewBag.SmallImage = products.SmallImage;
                myProduct          = setproductMetaData(products);

                webResponse = webClient.GetAsync("http://localhost:64732/api/Categories").Result;
                if (webResponse.IsSuccessStatusCode)
                {
                    var Response = webResponse.Content.ReadAsStringAsync().Result;
                    var Category = JsonConvert.DeserializeObject <List <Category> >(Response);
                    TempData["Category"] = new SelectList(Category, "CategoryID", "CategoryName", products.Category.ToString());
                    logger.Info("SUCCESSFULLY LOADED ALL THE CATEGORIES");
                }
                else
                {
                    logger.Debug("WEB API ERROR FOR GETTING CATEGORIES " + webResponse.StatusCode.ToString());
                }
            }catch (Exception ex)
            {
                logger.Error("ERROR IN UPDATING PRODUCTS DETAILS OF  " + myProduct.ProductName + ex.Message, ex);
            }
            return(View(myProduct));
        }
        public ProductMetaData setproductMetaData(Product products)
        {
            ProductMetaData myProduct = new ProductMetaData();

            myProduct.ProductID        = products.ProductID;
            myProduct.ProductName      = products.ProductName;
            myProduct.Price            = products.Price;
            myProduct.Quantity         = products.Quantity;
            myProduct.ShortDescription = products.ShortDescription;
            myProduct.LongDescription  = products.LongDescription;
            myProduct.SmallImage       = null;
            myProduct.SmallImagePath   = products.SmallImage;
            myProduct.LargeImage       = null;
            myProduct.LargeImagePath   = products.LargeImage;
            myProduct.Category         = products.tblCategory.CategoryName;
            return(myProduct);
        }
Пример #12
0
        public void LoadProperties_SubProperties()
        {
            List <PropertyMetaData> subproperties = new List <PropertyMetaData>();

            subproperties.Add(new PropertyMetaData()
            {
                Name = "ismobile", Type = "Boolean"
            });
            subproperties.Add(new PropertyMetaData()
            {
                Name = "hardwarevendor", Type = "String"
            });
            subproperties.Add(new PropertyMetaData()
            {
                Name = "hardwarevariants", Type = "Array"
            });

            List <PropertyMetaData> properties = new List <PropertyMetaData>();

            properties.Add(new PropertyMetaData()
            {
                Name = "devices", Type = "Array", ItemProperties = subproperties
            });

            ProductMetaData devicePropertyData = new ProductMetaData();

            devicePropertyData.Properties = properties;
            _propertiesReturnedByRequestEngine.Add("test", devicePropertyData);

            CreatePipeline();

            Assert.AreEqual(1, _engine.Properties.Count);
            Assert.AreEqual("devices", _engine.Properties[0].Name);
            Assert.AreEqual(3, _engine.Properties[0].ItemProperties.Count);
            Assert.IsTrue(_engine.Properties[0].ItemProperties.Any(p => p.Name == "ismobile"));
            Assert.IsTrue(_engine.Properties[0].ItemProperties.Any(p => p.Name == "hardwarevendor"));
            Assert.IsTrue(_engine.Properties[0].ItemProperties.Any(p => p.Name == "hardwarevariants"));
        }
Пример #13
0
        public void LoadProperties_NoMatch()
        {
            List <PropertyMetaData> properties = new List <PropertyMetaData>();

            properties.Add(new PropertyMetaData()
            {
                Name = "cloudStringProperty", Type = "String"
            });
            properties.Add(new PropertyMetaData()
            {
                Name = "cloudBoolProperty", Type = "Boolean"
            });
            properties.Add(new PropertyMetaData()
            {
                Name = "cloudJavaScriptProperty", Type = "JavaScript"
            });
            ProductMetaData devicePropertyData = new ProductMetaData();

            devicePropertyData.Properties = properties;
            _propertiesReturnedByRequestEngine.Add("test", devicePropertyData);

            CreatePipeline();

            Assert.AreEqual(3, _engine.Properties.Count);
            var query1 = _engine.Properties.Where(p => p.Name == "cloudStringProperty");

            Assert.IsTrue(query1.Any());
            Assert.IsTrue(query1.First().Type.Equals(typeof(string)));
            var query2 = _engine.Properties.Where(p => p.Name == "cloudBoolProperty");

            Assert.IsTrue(query2.Any());
            Assert.IsTrue(query2.First().Type.Equals(typeof(bool)));
            var query3 = _engine.Properties.Where(p => p.Name == "cloudJavaScriptProperty");

            Assert.IsTrue(query3.Any());
            Assert.IsTrue(query3.First().Type.Equals(typeof(JavaScript)));
        }
Пример #14
0
        public void LoadProperties_DelayedProperties()
        {
            List <string> evidenceProperties = new List <string>();

            evidenceProperties.Add("javascript");

            List <PropertyMetaData> properties = new List <PropertyMetaData>();

            properties.Add(new PropertyMetaData()
            {
                Name = "javascript", Type = "JavaScript", DelayExecution = true
            });
            properties.Add(new PropertyMetaData()
            {
                Name = "hardwarevendor", Type = "String", EvidenceProperties = evidenceProperties
            });
            properties.Add(new PropertyMetaData()
            {
                Name = "hardwarevariants", Type = "Array", EvidenceProperties = evidenceProperties
            });
            ProductMetaData devicePropertyData = new ProductMetaData();

            devicePropertyData.Properties = properties;
            _propertiesReturnedByRequestEngine.Add("test", devicePropertyData);
            _complexPropertyTypes.Add("hardwarevariants", typeof(IReadOnlyList <string>));

            CreatePipeline();

            Assert.AreEqual(3, _engine.Properties.Count);
            Assert.IsTrue(_engine.Properties.Any(p => p.Name == "javascript"));
            Assert.IsTrue(_engine.Properties.Any(p => p.Name == "hardwarevendor"));
            Assert.IsTrue(_engine.Properties.Any(p => p.Name == "hardwarevariants"));
            Assert.IsTrue(_engine.Properties.Single(p => p.Name == "javascript").DelayExecution);
            Assert.AreEqual(1, _engine.Properties.Single(p => p.Name == "hardwarevendor").EvidenceProperties.Count);
            Assert.AreEqual(1, _engine.Properties.Single(p => p.Name == "hardwarevariants").EvidenceProperties.Count);
        }
Пример #15
0
        public void CloudEngines_WrongOrder()
        {
            // Setup properties.
            List <PropertyMetaData> properties = new List <PropertyMetaData>();

            properties.Add(new PropertyMetaData()
            {
                Name = "ismobile", Type = "Boolean"
            });
            ProductMetaData devicePropertyData = new ProductMetaData();

            devicePropertyData.Properties = properties;
            _propertiesReturnedByRequestEngine.Add("test", devicePropertyData);

            // Create mock TestInstance so we can see if the ProcessCloudEngine
            // method is called.
            var mockTestInstance = new Mock <TestInstance>()
            {
                CallBase = true
            };

            mockTestInstance.Protected().Setup(
                "ProcessCloudEngine",
                ItExpr.IsAny <IFlowData>(),
                ItExpr.IsAny <TestData>(),
                ItExpr.IsAny <string>()).Verifiable();

            // Create mock TestRequestEngine so we can mock the ProcessEngine
            // method and get it to set it's aspect data.
            var mockRequestEngine = new Mock <TestRequestEngine>()
            {
                CallBase = true
            };

            mockRequestEngine.Object.PublicProperties = _propertiesReturnedByRequestEngine;
            mockRequestEngine.Protected()
            .Setup(
                "ProcessEngine",
                ItExpr.IsAny <IFlowData>(),
                ItExpr.IsAny <CloudRequestData>())
            .Callback((IFlowData data, CloudRequestData aspectData) => {
                aspectData.JsonResponse   = "{ \"response\": true }";
                aspectData.ProcessStarted = true;
            });

            // Construct the pipeline.
            var pipeline = new PipelineBuilder(new LoggerFactory())
                           .AddFlowElement(mockTestInstance.Object)
                           .AddFlowElement(mockRequestEngine.Object)
                           .Build();

            // Process the pipeline.
            try
            {
                using (var flowData = pipeline.CreateFlowData())
                {
                    flowData
                    .AddEvidence("query.user-agent", "iPhone")
                    .Process();
                }
            }
            catch (AggregateException ex)
            {
                var expectedExceptions = ex.InnerExceptions
                                         .Where(e => e.GetType() == typeof(PipelineConfigurationException));

                Assert.IsTrue(
                    expectedExceptions.Count() > 0,
                    "Aggregate exception did not contain expected PipelineConfigurationException.");
                Assert.AreEqual(
                    "The 'TestInstanceProxy' requires a 'CloudRequestEngine' " +
                    "before it in the Pipeline. This engine will be unable to " +
                    "produce results until this is corrected.",
                    expectedExceptions.FirstOrDefault()?.Message,
                    "PipelineConfigurationException message was incorrect.");
            }
        }