Exemple #1
0
        public void InnerKeySelectorNullNoComparer()
        {
            CustomerRec[] outer = new CustomerRec[]
            {
                new CustomerRec {
                    name = "Tim", custID = 1234
                },
                new CustomerRec {
                    name = "Bob", custID = 9865
                },
                new CustomerRec {
                    name = "Robert", custID = 9895
                }
            };
            AnagramRec[] inner = new AnagramRec[]
            {
                new AnagramRec {
                    name = "Robert", orderID = 93483, total = 19
                },
                new AnagramRec {
                    name = "miT", orderID = 93489, total = 45
                }
            };

            Assert.Throws <ArgumentNullException>("innerKeySelector", () => outer.AsQueryable().GroupJoin(inner.AsQueryable(), e => e.name, null, (cr, arIE) => new JoinRec {
                name = cr.name, orderID = arIE.Select(o => o.orderID).ToArray(), total = arIE.Select(o => o.total).ToArray()
            }));
        }
        // [Fact]
        public void InnerKeySelectorNullNoComparer()
        {
            CustomerRec[] outer = new CustomerRec[]
            {
                new CustomerRec {
                    name = "Tim", custID = 1234
                },
                new CustomerRec {
                    name = "Bob", custID = 9865
                },
                new CustomerRec {
                    name = "Robert", custID = 9895
                }
            };
            AnagramRec[] inner = new AnagramRec[]
            {
                new AnagramRec {
                    name = "Robert", orderID = 93483, total = 19
                },
                new AnagramRec {
                    name = "miT", orderID = 93489, total = 45
                }
            };

            Assert.Throws <ArgumentNullException>("innerKeySelector", () => outer.GroupJoin(inner, e => e.name, null, createJoinRec));
        }
Exemple #3
0
            // Overload-2: Test when IEqualityComparer is null
            public static int Test9()
            {
                CustomerRec[] outer = new CustomerRec[] { new CustomerRec {
                                                              name = "Tim", custID = 1234
                                                          },
                                                          new CustomerRec {
                                                              name = "Bob", custID = 9865
                                                          },
                                                          new CustomerRec {
                                                              name = "Robert", custID = 9895
                                                          } };
                AnagramRec[] inner = new AnagramRec[] { new AnagramRec {
                                                            name = "Robert", orderID = 93483, total = 19
                                                        },
                                                        new AnagramRec {
                                                            name = "miT", orderID = 93489, total = 45
                                                        } };
                JoinRec[] expected = new JoinRec[] { new JoinRec {
                                                         name = "Tim", orderID = new int?[] {}, total = new int?[] {}
                                                     },
                                                     new JoinRec {
                                                         name = "Bob", orderID = new int?[] {}, total = new int?[] {}
                                                     },
                                                     new JoinRec {
                                                         name = "Robert", orderID = new int?[] { 93483 }, total = new int?[] { 19 }
                                                     } };
                Func <CustomerRec, IEnumerable <AnagramRec>, JoinRec> resultSelector = Helper.createJoinRec;

                var actual = outer.GroupJoin(inner, (e) => e.name, (o) => o.name, resultSelector, null);

                return(Helper.DataEqual(expected, actual));
            }
Exemple #4
0
            // Overload-2: Test when resultSelector is null
            public static int Test11e()
            {
                CustomerRec[] outer = new CustomerRec[] { new CustomerRec {
                                                              name = "Tim", custID = 1234
                                                          },
                                                          new CustomerRec {
                                                              name = "Bob", custID = 9865
                                                          },
                                                          new CustomerRec {
                                                              name = "Robert", custID = 9895
                                                          } };
                AnagramRec[] inner = new AnagramRec[] { new AnagramRec {
                                                            name = "Robert", orderID = 93483, total = 19
                                                        },
                                                        new AnagramRec {
                                                            name = "miT", orderID = 93489, total = 45
                                                        } };
                Func <CustomerRec, IEnumerable <AnagramRec>, JoinRec> resultSelector = Helper.createJoinRec;

                try
                {
                    resultSelector = null;
                    var actual = outer.GroupJoin(inner, (e) => e.name, (o) => o.name, resultSelector, new AnagramEqualityComparer());
                    return(1);
                }
                catch (ArgumentNullException ane)
                {
                    if (!ane.CompareParamName("resultSelector"))
                    {
                        return(1);
                    }
                    return(0);
                }
            }
        // [Fact]
        public void ResultSelectorNullNoComparer()
        {
            CustomerRec[] outer = new CustomerRec[]
            {
                new CustomerRec {
                    name = "Tim", custID = 1234
                },
                new CustomerRec {
                    name = "Bob", custID = 9865
                },
                new CustomerRec {
                    name = "Robert", custID = 9895
                }
            };
            AnagramRec[] inner = new AnagramRec[]
            {
                new AnagramRec {
                    name = "Robert", orderID = 93483, total = 19
                },
                new AnagramRec {
                    name = "miT", orderID = 93489, total = 45
                }
            };

            Assert.Throws <ArgumentNullException>("resultSelector", () => outer.GroupJoin(inner, e => e.name, e => e.name, (Func <CustomerRec, IEnumerable <AnagramRec>, JoinRec>)null));
        }
        public ActionResult Details(int id)
        {
            var product = _productsRepository.GetProduct(id);

            if (product == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
            }

            IEnumerable <Promotion> promotions = null;
            CustomerRec             customer   = null;

            var relatedProducts = _productsRepository.GetRelatedProducts(product.Id);

            var clickEvent = new ClickEvent
            {
                ClickTime = DateTime.Now,
                ProductId = product.Id
            };

            _telemetryRepository.SendClick(clickEvent);

            if (User.Identity.IsAuthenticated)
            {
                customer   = _customerRepository.GetCustomerByName(User.Identity.Name);
                promotions = _promotionsRepository.GetPromotions(customer.CustomerId);
            }

            var relatedCatalogItems = relatedProducts
                                      .OrderBy(p => p.Name)
                                      .Select(relatedProduct => ProductToCatalogItem(promotions, customer, relatedProduct))
                                      .ToList();

            return(View(new CatalogItemDetailsModel(ProductToCatalogItem(promotions, customer, product), relatedCatalogItems)));
        }
Exemple #7
0
        public void ResultSelectorNull()
        {
            CustomerRec[] outer = new CustomerRec[]
            {
                new CustomerRec {
                    name = "Tim", custID = 1234
                },
                new CustomerRec {
                    name = "Bob", custID = 9865
                },
                new CustomerRec {
                    name = "Robert", custID = 9895
                }
            };
            AnagramRec[] inner = new AnagramRec[]
            {
                new AnagramRec {
                    name = "Robert", orderID = 93483, total = 19
                },
                new AnagramRec {
                    name = "miT", orderID = 93489, total = 45
                }
            };

            AssertExtensions.Throws <ArgumentNullException>("resultSelector", () => outer.AsNaturalQueryable().GroupJoin(inner.AsNaturalQueryable(), e => e.name, e => e.name, (Expression <Func <CustomerRec, IEnumerable <AnagramRec>, JoinRec> >)null, new AnagramEqualityComparer()));
        }
Exemple #8
0
            // outerKeySelector matches more than one innerKeySelector
            public static int Test9()
            {
                CustomerRec[] outer = new CustomerRec[] { new CustomerRec {
                                                              name = "Prakash", custID = 98022
                                                          },
                                                          new CustomerRec {
                                                              name = "Bob", custID = 99022
                                                          },
                                                          new CustomerRec {
                                                              name = "Tim", custID = 99021
                                                          },
                                                          new CustomerRec {
                                                              name = "Robert", custID = 99022
                                                          } };
                OrderRec[] inner = new OrderRec[] { new OrderRec {
                                                        orderID = 45321, custID = 18022, total = 50
                                                    },
                                                    new OrderRec {
                                                        orderID = 43421, custID = 29022, total = 20
                                                    },
                                                    new OrderRec {
                                                        orderID = 95421, custID = 39021, total = 9
                                                    } };
                JoinRec[] expected = new JoinRec[] { };
                Func <CustomerRec, OrderRec, JoinRec> resultSelector = Helper.createJoinRec;

                var actual = outer.Join(inner, (e) => e.custID, (o) => o.custID, resultSelector);

                return(Verification.Allequal(expected, actual));
            }
Exemple #9
0
            // Overload-2: Test when resultSelector=null
            public static int Test13e()
            {
                CustomerRec[] outer = new CustomerRec[] { new CustomerRec {
                                                              name = "Prakash", custID = 98022
                                                          },
                                                          new CustomerRec {
                                                              name = "Tim", custID = 99021
                                                          },
                                                          new CustomerRec {
                                                              name = "Robert", custID = 99022
                                                          } };
                AnagramRec[] inner = new AnagramRec[] { new AnagramRec {
                                                            name = "miT", orderID = 43455, total = 10
                                                        },
                                                        new AnagramRec {
                                                            name = "Prakash", orderID = 323232, total = 9
                                                        } };
                Func <CustomerRec, AnagramRec, JoinRec> resultSelector = Helper.createJoinRec;

                try
                {
                    resultSelector = null;
                    var actual = outer.Join(inner, (e) => e.name, (o) => o.name, resultSelector, new AnagramEqualityComparer());
                    return(1);
                }
                catch (ArgumentNullException ane)
                {
                    if (!ane.CompareParamName("resultSelector"))
                    {
                        return(1);
                    }
                    return(0);
                }
            }
Exemple #10
0
            // Overload-2: Test when IEqualityComparer is not-null
            public static int Test12()
            {
                CustomerRec[] outer = new CustomerRec[] { new CustomerRec {
                                                              name = "Prakash", custID = 98022
                                                          },
                                                          new CustomerRec {
                                                              name = "Tim", custID = 99021
                                                          },
                                                          new CustomerRec {
                                                              name = "Robert", custID = 99022
                                                          } };
                AnagramRec[] inner = new AnagramRec[] { new AnagramRec {
                                                            name = "miT", orderID = 43455, total = 10
                                                        },
                                                        new AnagramRec {
                                                            name = "Prakash", orderID = 323232, total = 9
                                                        } };
                JoinRec[] expected = new JoinRec[] { new JoinRec {
                                                         name = "Prakash", orderID = 323232, total = 9
                                                     },
                                                     new JoinRec {
                                                         name = "Tim", orderID = 43455, total = 10
                                                     } };
                Func <CustomerRec, AnagramRec, JoinRec> resultSelector = Helper.createJoinRec;

                var actual = outer.Join(inner, (e) => e.name, (o) => o.name, resultSelector, new AnagramEqualityComparer());

                return(Verification.Allequal(expected, actual));
            }
Exemple #11
0
            // No match between innerKeySelector and outerKeySelector
            public static int Test8()
            {
                CustomerRec[] outer = new CustomerRec[] { new CustomerRec {
                                                              name = "Tim", custID = 1234
                                                          },
                                                          new CustomerRec {
                                                              name = "Bob", custID = 9865
                                                          },
                                                          new CustomerRec {
                                                              name = "Robert", custID = 9895
                                                          } };
                OrderRec[] inner = new OrderRec[] { new OrderRec {
                                                        orderID = 97865, custID = 2334, total = 25
                                                    },
                                                    new OrderRec {
                                                        orderID = 34390, custID = 9065, total = 19
                                                    } };
                JoinRec[] expected = new JoinRec[] { new JoinRec {
                                                         name = "Tim", orderID = new int?[] {}, total = new int?[] {}
                                                     },
                                                     new JoinRec {
                                                         name = "Bob", orderID = new int?[] {}, total = new int?[] {}
                                                     },
                                                     new JoinRec {
                                                         name = "Robert", orderID = new int?[] {}, total = new int?[] {}
                                                     } };
                Func <CustomerRec, IEnumerable <OrderRec>, JoinRec> resultSelector = Helper.createJoinRec;

                var actual = outer.GroupJoin(inner, (e) => e.custID, (o) => o.custID, resultSelector);

                return(Helper.DataEqual(expected, actual));
            }
 public static JoinRec createJoinRec(CustomerRec cr, IEnumerable <AnagramRec> arIE)
 {
     return(new JoinRec
     {
         name = cr.name,
         orderID = arIE.Select(o => o.orderID).ToArray(),
         total = arIE.Select(o => o.total).ToArray(),
     });
 }
Exemple #13
0
            public static JoinRec createJoinRec(CustomerRec cr, AnagramRec or)
            {
                JoinRec jr = new JoinRec();

                jr.name    = cr.name;
                jr.orderID = or.orderID;
                jr.total   = or.total;

                return(jr);
            }
Exemple #14
0
 // Helper function to test index=0
 public static IEnumerable <int?> index_zero(CustomerRec cr, int index)
 {
     if (index == 0)
     {
         return(cr.total);
     }
     else
     {
         return new int?[] { }
     };
 }
Exemple #15
0
 // selector function to test index=max value is right
 // Tests if index increments correctly
 public static string index_five(CustomerRec cr, int index)
 {
     if (index == 5)
     {
         return(cr.name);
     }
     else
     {
         return(null);
     }
 }
        public ActionResult Index()
        {
            var catalogItems = new List <CatalogItem>();
            var products     = _productsRepository.GetProducts();
            var username     = Request.QueryString["user"];

            IEnumerable <Promotion> promotions          = null;
            IEnumerable <Product>   recommendedProducts = new List <Product>();

            CustomerRec customer = null;

            if (User.Identity.IsAuthenticated)
            {
                customer = _customerRepository.GetCustomerByName(User.Identity.Name);

                if (customer != null)
                {
                    promotions          = _promotionsRepository.GetPromotions(customer.CustomerId);
                    recommendedProducts = _productsRepository.GetRecommendedProducts(customer.CustomerId);
                }
            }
            else if (!String.IsNullOrEmpty(username))
            {
                customer            = _customerRepository.GetCustomerByName(username);
                promotions          = _promotionsRepository.GetPromotions(customer.CustomerId);
                recommendedProducts = _productsRepository.GetRecommendedProducts(customer.CustomerId);
            }

            var recommendedCatalogItems = recommendedProducts
                                          .OrderBy(p => p.Name)
                                          .Select(recommendedProduct => ProductToCatalogItem(promotions, customer, recommendedProduct))
                                          .ToList();

            foreach (var product in products.OrderBy(p => p.Name))
            {
                if (User.Identity.IsAuthenticated && customer != null)
                {
                    var playCount = _productsRepository.GetSongPlayCount(product.Id, customer.CustomerId);

                    product.PlayCount = playCount;
                }

                catalogItems.Add(ProductToCatalogItem(promotions, customer, product));
            }

            var catalogModel = new CatalogModel(catalogItems, recommendedCatalogItems);

            return(View(catalogModel));
        }
Exemple #17
0
            // outer is empty and inner is non-empty
            public static int Test1()
            {
                CustomerRec[] outer = new CustomerRec[] { };
                OrderRec[]    inner = new OrderRec[] { new OrderRec {
                                                           orderID = 45321, custID = 98022, total = 50
                                                       },
                                                       new OrderRec {
                                                           orderID = 97865, custID = 32103, total = 25
                                                       } };
                JoinRec[] expected = new JoinRec[] { };
                Func <CustomerRec, IEnumerable <OrderRec>, JoinRec> resultSelector = Helper.createJoinRec;

                var actual = outer.GroupJoin(inner, (e) => e.custID, (o) => o.custID, resultSelector);

                return(Helper.DataEqual(expected, actual));
            }
Exemple #18
0
            // outer is non-empty and inner is non-empty
            public static int Test2()
            {
                CustomerRec[] outer = new CustomerRec[] { new CustomerRec {
                                                              name = "Tim", custID = 43434
                                                          },
                                                          new CustomerRec {
                                                              name = "Bob", custID = 34093
                                                          } };
                OrderRec[] inner    = new OrderRec[] { };
                JoinRec[]  expected = new JoinRec[] { };
                Func <CustomerRec, OrderRec, JoinRec> resultSelector = Helper.createJoinRec;

                var actual = outer.Join(inner, (e) => e.custID, (o) => o.custID, resultSelector);

                return(Verification.Allequal(expected, actual));
            }
Exemple #19
0
            public static JoinRec createJoinRec(CustomerRec cr, IEnumerable <AnagramRec> arIE)
            {
                int count = 0;

                JoinRec jr = new JoinRec();

                jr.name    = cr.name;
                jr.orderID = new int?[arIE.Count()];
                jr.total   = new int?[arIE.Count()];

                foreach (AnagramRec ar in arIE)
                {
                    jr.orderID[count] = ar.orderID;
                    jr.total[count]   = ar.total;
                    count++;
                }

                return(jr);
            }
Exemple #20
0
            public static JoinRec createJoinRec(CustomerRec cr, IEnumerable <OrderRec> orIE)
            {
                int count = 0;

                JoinRec jr = new JoinRec();

                jr.name = cr.name;

                jr.orderID = new int?[orIE.Count()];
                jr.total   = new int?[orIE.Count()];

                foreach (OrderRec or in orIE)
                {
                    jr.orderID[count] = or.orderID;
                    jr.total[count]   = or.total;
                    count++;
                }

                return(jr);
            }
Exemple #21
0
            // outer is non-empty and inner is empty
            public static int Test2()
            {
                CustomerRec[] outer = new CustomerRec[] { new CustomerRec {
                                                              name = "Tim", custID = 43434
                                                          },
                                                          new CustomerRec {
                                                              name = "Bob", custID = 34093
                                                          } };
                OrderRec[] inner    = new OrderRec[] { };
                JoinRec[]  expected = new JoinRec[] { new JoinRec {
                                                          name = "Tim", orderID = new int?[] {}, total = new int?[] {}
                                                      },
                                                      new JoinRec {
                                                          name = "Bob", orderID = new int?[] {}, total = new int?[] {}
                                                      } };
                Func <CustomerRec, IEnumerable <OrderRec>, JoinRec> resultSelector = Helper.createJoinRec;

                var actual = outer.GroupJoin(inner, (e) => e.custID, (o) => o.custID, resultSelector);

                return(Helper.DataEqual(expected, actual));
            }
Exemple #22
0
 // Helper function to test index=max value
 public static IEnumerable<int?> index_four(CustomerRec cr, int index)
 {
     if (index == 4) return cr.total;
     else return new int?[] { };
 }
Exemple #23
0
 public static JoinRec createJoinRec(CustomerRec cr, AnagramRec or)
 {
     return new JoinRec { name = cr.name, orderID = or.orderID, total = or.total };
 }
        private static CatalogItem ProductToCatalogItem(IEnumerable <Promotion> promotions, CustomerRec customer, Product relatedProduct)
        {
            var catalogItem = new CatalogItem
            {
                Id            = relatedProduct.Id,
                Name          = relatedProduct.Name,
                Description   = relatedProduct.Description,
                Title1        = relatedProduct.Title1,
                Title2        = relatedProduct.Title2,
                TitlesCount   = relatedProduct.TitlesCount,
                OriginalPrice = relatedProduct.Price,
                PlayCount     = relatedProduct.PlayCount
            };

            var promotion = promotions != null && customer != null
                ? promotions.FirstOrDefault(p => p.CustomerId == customer.CustomerId && p.ProductId == relatedProduct.Id)
                : null;

            if (promotion != null)
            {
                catalogItem.CurrentPrice      = promotion.NewPrice;
                catalogItem.PromotionDiscount = promotion.PromotionDiscount;
            }

            return(catalogItem);
        }
Exemple #25
0
 public static JoinRec createJoinRec(CustomerRec cr, AnagramRec or)
 {
     return(new JoinRec {
         name = cr.name, orderID = or.orderID, total = or.total
     });
 }
Exemple #26
0
 // selector function to test index=max value is right
 // Tests if index increments correctly
 public static string index_five(CustomerRec cr, int index)
 {
     if (index == 5) return cr.name;
     else return null;
 }