public async Task Create_ShallReturnAJob() { var mockClient = new Mock <IJobsClient>(); var mockLogger = new Mock <ILogger <ClaraJobsApi> >(); JobId.TryParse("jobid", out JobId jobId); PayloadId.TryParse("payloadid", out PayloadId payloadId); PipelineId.TryParse("pipelineid", out PipelineId pipelineId); mockClient.Setup(p => p.CreateJob(It.IsAny <PipelineId>(), It.IsAny <string>(), It.IsAny <JobPriority>())) .ReturnsAsync(new JobInfo { Name = "bla bla job", JobId = jobId, PayloadId = payloadId, PipelineId = pipelineId }); var service = new ClaraJobsApi( mockClient.Object, mockLogger.Object); var job = await service.Create(Guid.NewGuid().ToString(), "bla bla", JobPriority.Higher); Assert.Equal(jobId.ToString(), job.JobId); Assert.Equal(payloadId.ToString(), job.PayloadId); mockClient.Verify( p => p.CreateJob(It.IsAny <PipelineId>(), It.IsAny <string>(), JobPriority.Higher), Times.Exactly(1)); mockLogger.VerifyLogging(LogLevel.Information, Times.Once()); mockLogger.VerifyLogging(LogLevel.Error, Times.Never()); }
public async Task <Job> Create(string pipeline, string jobName, JobPriority jobPriority) { return(await Policy.Handle <Exception>() .WaitAndRetryAsync( 3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (exception, retryCount, context) => { _logger.Log(LogLevel.Error, "Exception while creating a new job: {exception}", exception); }) .ExecuteAsync(async() => { if (!PipelineId.TryParse(pipeline, out PipelineId pipelineId)) { throw new ConfigurationException($"Invalid Pipeline ID configured: {pipeline}"); } var response = await _jobsClient.CreateJob(pipelineId, jobName, jobPriority); var job = ConvertResponseToJob(response); _logger.Log(LogLevel.Information, "Clara Job.Create API called successfully, Pipeline={0}, JobId={1}, JobName={2}", pipeline, job.JobId, jobName); return job; }).ConfigureAwait(false)); }