public async Task <GetOrCreateUserResponse> Response(GetOrCreateUserRequest @request) { using (var scope = _serviceScopeFactory.CreateScope()) { var user = await scope.ServiceProvider.GetRequiredService <IUserService>().GetOrCreateAsync(@request.Email); return(new GetOrCreateUserResponse() { Id = user.Id }); } }
public async Task Response_CallsGetOrCreateAsync() { // Arrange var userId = Guid.NewGuid(); var email = "*****@*****.**"; var stubRequest = new GetOrCreateUserRequest() { Email = email }; var mockBus = new Mock <IBus>(); var mockUserService = new Mock <IUserService>(); mockUserService.Setup(x => x.GetOrCreateAsync(email)).ReturnsAsync(new Models.User() { Id = userId, Email = email }); var mockServiceProvider = new Mock <IServiceProvider>(); mockServiceProvider.Setup(x => x.GetService(typeof(IUserService))).Returns(mockUserService.Object); var mockServiceScope = new Mock <IServiceScope>(); mockServiceScope.SetupGet(x => x.ServiceProvider).Returns(mockServiceProvider.Object); var mockServiceScopeFactory = new Mock <IServiceScopeFactory>(); mockServiceScopeFactory.Setup(x => x.CreateScope()).Returns(mockServiceScope.Object); // Act var responder = new GetOrCreateUserResponder(mockBus.Object, mockServiceScopeFactory.Object); var response = await responder.Response(stubRequest); // Assert mockUserService.Verify(x => x.GetOrCreateAsync(email), Times.Once); Assert.NotNull(response); Assert.Equal(userId, response.Id); }