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);
        }