private static DateTime SetupDuration(CountdownViewModel model) { switch (model.SelectedDurationType) { case CountdownViewModel.DurationType.Seconds: return DateTime.UtcNow.AddSeconds(model.Duration); case CountdownViewModel.DurationType.Minutes: return DateTime.UtcNow.AddMinutes(model.Duration); case CountdownViewModel.DurationType.Hours: return DateTime.UtcNow.AddHours(model.Duration); case CountdownViewModel.DurationType.Days: return DateTime.UtcNow.AddDays(model.Duration); case CountdownViewModel.DurationType.Months: return DateTime.UtcNow.AddMonths(model.Duration); case CountdownViewModel.DurationType.Years: return DateTime.UtcNow.AddYears(model.Duration); default: throw new ArgumentException("Invalid duration"); } }
public async void PostCountdownViewModel_RedirectsToIndexContainingTheCountdownIdInUrlHash() { var fakeAccount = new Account { Id = 123, DisplayName = "TestDisplayName" }; const long fakeId = 12345; var fakeCountdownViewModel = new CountdownViewModel { Description = "Test description", EndsOnYear = 2013, EndsOnMonth = 12, EndsOnDay = 15, EndsOnHour = 22, EndsOnMinute = 37 }; var countdownController = TestableCountdownController.Create(); countdownController.MockContextService .Setup(x => x.GetCurrentAccountAsync()) .Returns(Task.FromResult(fakeAccount)); countdownController.MockCountdownRepository .Setup(x => x.CreateAsync(It.IsAny<Countdown>())) .Returns((Countdown c) => { c.Id = fakeId; return Task.FromResult(c); }); var result = await countdownController.Create(fakeCountdownViewModel) as RedirectResult; Assert.IsNotNull(result); StringAssert.EndsWith(string.Format("/Countdown/{0}", fakeId), result.Url); }
public async void PostCountdownViewModel_CorrectlyCreatesCountdown() { var fakeRepository = new FakeCountdownRepository(); var fakeAccount = new Account { Id = 123, DisplayName = "TestDisplayName" }; var mockVoteService = new Mock<IVoteService>(); var mockUserContextService = new Mock<IContextService>(); mockUserContextService .Setup(x => x.GetCurrentAccountAsync()) .Returns(Task.FromResult(fakeAccount)); var countdownController = new CountdownController(fakeRepository, mockVoteService.Object, mockUserContextService.Object); ControllerContextHelper.SetupMockContext(countdownController); var fakeCountdownViewModel1 = new CountdownViewModel { Id = 12, Description = "Test description 1", SelectedCountdownType = CountdownViewModel.CountdownType.Duration, SelectedDurationType = CountdownViewModel.DurationType.Minutes, Duration = 10 }; var fakeCountdownViewModel2 = new CountdownViewModel { Id = 123, Description = "Test description 2", EndsOnYear = 2013, EndsOnMonth = 11, EndsOnDay = 14, EndsOnHour = 21, EndsOnMinute = 39, SelectedCountdownType = CountdownViewModel.CountdownType.Date }; var expectedEndDate = new DateTime( fakeCountdownViewModel2.EndsOnYear, fakeCountdownViewModel2.EndsOnMonth, fakeCountdownViewModel2.EndsOnDay, (int) fakeCountdownViewModel2.EndsOnHour, (int) fakeCountdownViewModel2.EndsOnMinute, 0).ToUniversalTime(); await countdownController.Create(fakeCountdownViewModel1); await countdownController.Create(fakeCountdownViewModel2); IEnumerable<CountdownAggregate> countdowns = (await fakeRepository.GetLatestAsync(0, 10)).ToList(); Assert.AreEqual(2, countdowns.Count()); CountdownAggregate dateCountdown = countdowns.First(x => x.Id == 123); CountdownAggregate durationCountdown = countdowns.First(x => x.Id == 12); // Date countdown verification Assert.AreEqual(fakeCountdownViewModel2.Description, dateCountdown.Description); Assert.AreEqual(expectedEndDate, dateCountdown.EndsOn); Assert.IsTrue(dateCountdown.IsCreatedByCurrentUser); Assert.AreEqual(fakeAccount.DisplayName, dateCountdown.CreatedByName); Assert.AreEqual(DateTime.Today.Date, dateCountdown.CreatedOn.Date); // Duration countdown verification Assert.AreEqual(fakeCountdownViewModel1.Description, durationCountdown.Description); // difference of 10 min Assert.AreEqual(DateTimeOffset.UtcNow.AddMinutes(10).Minute, durationCountdown.EndsOn.Minute); }
private async Task<Countdown> CreateCountdownAsync(CountdownViewModel countdownViewModel) { Account currentAccount = await _contextService.GetCurrentAccountAsync(); Countdown countdown = countdownViewModel.ToCountdown(currentAccount); await _countdownRepository.CreateAsync(countdown); return countdown; }
public async Task<ActionResult> Create(CountdownViewModel countdownViewModel) { Countdown countdown = await CreateCountdownAsync(countdownViewModel); string url = string.Concat("/Countdown/", countdown.Id); return Redirect(url); }