public When_OpportunityService_Is_Called_To_Create_Opportunity() { var httpContextAccessor = Substitute.For <IHttpContextAccessor>(); httpContextAccessor.HttpContext.Returns(new DefaultHttpContext { User = new ClaimsPrincipal(new ClaimsIdentity(new[] { new Claim(ClaimTypes.GivenName, "adminUserName") })) }); var config = new MapperConfiguration(c => { c.AddMaps(typeof(OpportunityMapper).Assembly); c.ConstructServicesUsing(type => type.Name.Contains("LoggedInUserEmailResolver") ? new LoggedInUserEmailResolver <OpportunityDto, Domain.Models.Opportunity>(httpContextAccessor) : type.Name.Contains("LoggedInUserNameResolver") ? (object)new LoggedInUserNameResolver <OpportunityDto, Domain.Models.Opportunity>(httpContextAccessor) : type.Name.Contains("UtcNowResolver") ? new UtcNowResolver <OpportunityDto, Domain.Models.Opportunity>(new DateTimeProvider()) : null); }); var mapper = new Mapper(config); _opportunityRepository = Substitute.For <IOpportunityRepository>(); var opportunityItemRepository = Substitute.For <IRepository <OpportunityItem> >(); var provisionGapRepository = Substitute.For <IRepository <ProvisionGap> >(); var referralRepository = Substitute.For <IRepository <Domain.Models.Referral> >(); var googleMapApiClient = Substitute.For <IGoogleMapApiClient>(); var opportunityPipelineReportWriter = Substitute.For <IFileWriter <OpportunityReportDto> >(); var dateTimeProvider = Substitute.For <IDateTimeProvider>(); _opportunityRepository.CreateAsync(Arg.Any <Domain.Models.Opportunity>()) .Returns(OpportunityId); var opportunityService = new OpportunityService(mapper, _opportunityRepository, opportunityItemRepository, provisionGapRepository, referralRepository, googleMapApiClient, opportunityPipelineReportWriter, dateTimeProvider); var dto = new OpportunityDto { EmployerCrmId = new Guid("11111111-1111-1111-1111-111111111111"), PrimaryContact = "Employer contact", Email = "*****@*****.**", Phone = "020 123 4567" }; _result = opportunityService.CreateOpportunityAsync(dto).GetAwaiter().GetResult(); }