public async Task <List <ApprenticeshipCourse> > Handle(RefreshCourses message) { if (message.RequestTime < DateTime.Now.AddMinutes(-5)) { _logger.Warn($"Received invalid request to get courses. Reason: Request was generated more than 5 minutes ago. Request time: {message.RequestTime}, current time: {DateTime.Now}."); return(new List <ApprenticeshipCourse>()); } var courses = new List <ApprenticeshipCourse>(); if (message.CourseType.HasFlag(CourseType.Standards)) { _logger.Debug($"Getting list of standard courses. RefrechTicks: {message.RequestTime.Ticks}"); var standards = await _standardsService.GetCourses(); courses.AddRange(standards); } if (message.CourseType.HasFlag(CourseType.Frameworks)) { _logger.Debug($"Getting list of framework courses. RefrechTicks: {message.RequestTime.Ticks}"); var frameworks = await _frameworksService.GetCourses(); courses.AddRange(frameworks); } return(courses); }
public static async Task Run([QueueTrigger(QueueNames.GetCourses)] RefreshCourses message, TraceWriter log, [Queue(QueueNames.StoreCourse)] ICollector <ApprenticeshipCourse> storeCourses, ExecutionContext executionContext) { await FunctionRunner.Run <GetCoursesFunction>(log, executionContext, async (container, logger) => { logger.Debug("Starting GetCoursesFunction Function."); var handler = container.GetInstance <GetCoursesHandler>(); var courses = await handler.Handle(message); courses.ForEach(storeCourses.Add); log.Info($"Finished getting courses. Got {courses.Count} courses."); }); }
public async Task RefreshCoursesWhenMaxErrorsOccur() { // Arrange var expectedModels = A.CollectionOfFake <SimpleJobProfileModel>(AbortAfterErrorCount * 2); const HttpStatusCode expectedStatusCode = HttpStatusCode.BadRequest; A.CallTo(() => fakeRefreshService.GetListAsync()).Returns(expectedModels); A.CallTo(() => fakeRefreshService.RefreshCoursesAsync(A <Guid> .Ignored)).Returns(expectedStatusCode); // Act var ex = await Assert.ThrowsAsync <HttpResponseException>(() => RefreshCourses.RunAsync(timer, fakeLogger, fakeRefreshService)).ConfigureAwait(false); // Assert A.CallTo(() => fakeRefreshService.GetListAsync()).MustHaveHappenedOnceExactly(); A.CallTo(() => fakeRefreshService.RefreshCoursesAsync(A <Guid> .Ignored)).MustHaveHappened(AbortAfterErrorCount, Times.Exactly); }
public async Task RefreshCoursesWhenSimpleListReturnsNoDataOK() { // Arrange var expectedModels = A.CollectionOfFake <SimpleJobProfileModel>(0); const HttpStatusCode expectedStatusCode = HttpStatusCode.OK; A.CallTo(() => fakeRefreshService.GetListAsync()).Returns(expectedModels); A.CallTo(() => fakeRefreshService.RefreshCoursesAsync(A <Guid> .Ignored)).Returns(expectedStatusCode); // Act await RefreshCourses.RunAsync(timer, fakeLogger, fakeRefreshService).ConfigureAwait(false); // Assert A.CallTo(() => fakeRefreshService.GetListAsync()).MustHaveHappenedOnceExactly(); A.CallTo(() => fakeRefreshService.RefreshCoursesAsync(A <Guid> .Ignored)).MustHaveHappened(expectedModels.Count, Times.Exactly); }