public async Task After_submission__handler_returns_school_Id()
        {
            var command = new RegisterSchool.Command()
            {
                Name        = "I Liceum Ogólnokształcące",
                City        = "Gdańsk",
                Address     = "Wały Piastowskie 6",
                ContactData = new[] {
                    new ContactData()
                    {
                        Name         = "sekretariat",
                        EmailAddress = EmailAddress.Parse("*****@*****.**"),
                        PhoneNumber  = PhoneNumber.Parse("58 301-67-34")
                    },
                }
            };

            var sp = new ServiceProviderBuilder().BuildServiceProvider();

            using (var scope = sp.CreateScope())
            {
                var aggregateStore = scope.ServiceProvider.GetRequiredService <IAggregateStore>();
                var userAccessor   = Mock.Of <IUserAccessor>(
                    mock => mock.GetUser() == Task.FromResult(new ApplicationUser()
                {
                    Id = Guid.NewGuid()
                }),
                    MockBehavior.Strict);
                var handler = new RegisterSchoolHandler(NodaTime.SystemClock.Instance, userAccessor, aggregateStore);
                var result  = await handler.Handle(command, CancellationToken.None);

                Assert.True(result.IsSuccess);
                Assert.IsType <Guid>(result.Value);
            }
        }
        public async Task Handler_can_search_school_by_city()
        {
            Guid guid;
            var  sp = new ServiceProviderBuilder().BuildServiceProvider();

            using (var scope = sp.CreateScope())
            {
                var userAccessor = Mock.Of <IUserAccessor>(
                    mock => mock.GetUser() == Task.FromResult(new ApplicationUser()
                {
                    Id = Guid.NewGuid()
                }),
                    MockBehavior.Strict);
                var aggregateStore = scope.ServiceProvider.GetRequiredService <IAggregateStore>();
                var handler        = new RegisterSchoolHandler(NodaTime.SystemClock.Instance, userAccessor, aggregateStore);

                var command1 = new RegisterSchool.Command()
                {
                    Name        = "I Liceum Ogólnokształcące",
                    City        = "Gdańsk",
                    Address     = "Wały Piastowskie 6",
                    ContactData = new[] {
                        new ContactData()
                        {
                            Name         = "sekretariat",
                            EmailAddress = EmailAddress.Parse("*****@*****.**"),
                            PhoneNumber  = PhoneNumber.Parse("58 301-67-34")
                        },
                    }
                };
                var command2 = new RegisterSchool.Command()
                {
                    Name        = "III Liceum Ogólnokształcące",
                    City        = "Gdynia",
                    Address     = "Legionów 27",
                    ContactData = new[] {
                        new ContactData()
                        {
                            Name         = "sekretariat",
                            EmailAddress = EmailAddress.Parse("*****@*****.**"),
                            PhoneNumber  = PhoneNumber.Parse("(58) 622 18 33")
                        },
                    }
                };
                var result = await handler.Handle(command1, CancellationToken.None);

                var result2 = await handler.Handle(command2, CancellationToken.None);

                Assert.True(result.IsSuccess);
                Assert.True(result2.IsSuccess);
                Assert.IsType <Guid>(result.Value);
                guid = result.Value;
            }

            using (var scope = sp.CreateScope())
            {
                var handler = scope.ServiceProvider.GetRequiredService <IRequestHandler <GetSchools.Query, IPagedList <GetSchools.Summary> > >();
                var results = await handler.Handle(new GetSchools.Query()
                {
                    SearchPattern = "gdańsk"
                }, CancellationToken.None);

                results.Should().ContainSingle()
                .Which.Should().BeEquivalentTo(new GetSchools.Summary()
                {
                    Id      = guid,
                    Name    = "I Liceum Ogólnokształcące",
                    City    = "Gdańsk",
                    Address = "Wały Piastowskie 6",
                });
            }
        }