public List<IContent> GetContents(Newsletter newsletter) { var hostIndex = 0; var tripIndex = 0; var contents =new List<IContent>(); foreach (var contentType in newsletter.DisplayPattern.ToCharArray()) { IContent content = null; switch (contentType) { case 'H': if (hostIndex >= newsletter.HostIds.Count) continue; content = _database.Get<Host>(newsletter.HostIds[hostIndex]); hostIndex++; break; case 'T': if (tripIndex >= newsletter.TripIds.Count) continue; content = _database.Get<Trip>(newsletter.TripIds[tripIndex]); tripIndex++; break; } contents.Add(content); } return contents; }
public ActionResult Create(int count) { var db = GetDatabase(); // [YOGESH] - Fetch the TripHostOrder setting from the DB. var tripHostOrder = db.GetAll<Settings>().Select(h => h.TripHostOrder).FirstOrDefault(); // [YOGESH] - Count the number of Trips and Hosts for the newsletter. int countT = tripHostOrder.ToCharArray().Where(m => m.Equals('T')).Count(); int countH = tripHostOrder.ToCharArray().Where(m => m.Equals('H')).Count(); #region [YOGESH] - For tasks 1 & 2 var hosts = db.GetAll<Host>().OrderBy(m => m.UseCount).ToList(); var trips = db.GetAll<Trip>().OrderBy(m => m.UseCount).ToList(); for (int i = 0; i < count; i++) { var newsletter = new Newsletter() { HostIds = hosts.Select(h => h.Id).Take(countH).ToList(), TripIds = trips.Select(t => t.Id).Take(countT).ToList(), // [YOGESH] - Assign the TripHostOrder setting value to the TripHostOrder property of the Newsletter. TripHostOrder = tripHostOrder }; db.Save(newsletter); for (int j = 0; j < countH; j++) { hosts[j].UseCount++; } hosts = hosts.OrderBy(m => m.UseCount).ToList(); for (int j = 0; j < countT; j++) { trips[j].UseCount++; } trips = trips.OrderBy(m => m.UseCount).ToList(); } db.SaveAll(hosts); db.SaveAll(trips); #endregion #region [YOGESH] - For task 1 only //var hostIds = db.GetAll<Host>().Select(h => h.Id).ToArray(); //var tripIds = db.GetAll<Trip>().Select(t => t.Id).ToArray(); //for (int i = 0; i < count; i++) //{ // var newsletter = new Newsletter() // { // HostIds = Enumerable.Range(0, countH).Select(x => hostIds.GetRandom()).ToList(), // TripIds = Enumerable.Range(0, countT).Select(x => tripIds.GetRandom()).ToList(), // // [YOGESH] - Assign the TripHostOrder setting value to the TripHostOrder property of the Newsletter. // TripHostOrder = tripHostOrder // }; // db.Save(newsletter); //} #endregion TempData["notification"] = $"Created {count} newsletters"; return RedirectToAction("list"); }
public void GetContents_WhenNotExistEnoughHostInList_ReturnRestOfContents() { // Arrange var newsletter = new Newsletter { Id = "0001", DisplayPattern = "HHTTHH", HostIds = new List<string> { "0000"}, TripIds = new List<string> { "0000", "0001", "0002", "0003", "0004" } }; // Act var result = _newsletterService.GetContents(newsletter); // Assert Assert.That(result.Count, Is.EqualTo(3)); }
public void GetContents_WhenNewsletterWithPattern_ReturnContents() { // Arrange var newsletter = new Newsletter { Id = "0001", DisplayPattern = "HHTTHH", HostIds = new List<string> {"0000", "0001", "0002", "0003", "0004" }, TripIds = new List<string> { "0000","0001","0002", "0003", "0004" } }; // Act var result = _newsletterService.GetContents(newsletter); // Assert Assert.That(result.Count, Is.EqualTo(newsletter.DisplayPattern.Length)); }
public void CreateRandomData(int count, string pattern) { var hostIds = _database.GetAll<Host>().Select(h => h.Id).ToArray(); var tripIds = _database.GetAll<Trip>().Select(t => t.Id).ToArray(); var hostCount = pattern.ToCharArray().Where(x => x.Equals('H')).Count(); var tripCount = pattern.ToCharArray().Where(x => x.Equals('T')).Count(); for (int i = 0; i < count; i++) { var newsletter = new Newsletter() { HostIds = Enumerable.Range(0, hostCount).Select(x => hostIds.GetRandom()).ToList(), TripIds = Enumerable.Range(0, tripCount).Select(x => tripIds.GetRandom()).ToList(), }; newsletter.DisplayPattern = pattern; _database.Save(newsletter); } }
public ActionResult Create(int count) { var db = GetDatabase(); var hostIds = db.GetAll<Host>().Select(h => h.Id).ToArray(); var tripIds = db.GetAll<Trip>().Select(t => t.Id).ToArray(); for (int i = 0; i < count; i++) { var newsletter = new Newsletter() { HostIds = Enumerable.Range(0, 2).Select(x => hostIds.GetRandom()).ToList(), TripIds = Enumerable.Range(0, 2).Select(x => tripIds.GetRandom()).ToList(), }; db.Save(newsletter); } TempData["notification"] = $"Created {count} newsletters"; return RedirectToAction("list"); }
public void GetContents_WhenPatternIsEmpty_ReturnEmptyValue() { // Arrange var newsletter = new Newsletter { Id = "0000", DisplayPattern = "" }; // Act var result = _newsletterService.GetContents(newsletter); // Assert Assert.That(result, Is.Empty); }