public async Task Command_must_be_issued_during_campaign()
        {
            var clock = new NodaTime.Testing.FakeClock(NodaTime.Instant.FromDateTimeUtc(DateTime.UtcNow).Plus(NodaTime.Duration.FromDays(30)));

            var sp = new ServiceProviderBuilder().BuildServiceProvider(services => {
                ConfigureServices(services);
                services.Remove <NodaTime.IClock>();
                services.AddSingleton <NodaTime.IClock>(clock);
            });

            using (var scope = sp.CreateScope())
            {
                var engine  = scope.ServiceProvider.GetRequiredService <ISzlemEngine>();
                var command = new SubmitRecruitmentForm.Command()
                {
                    FirstName                = "Andrzej",
                    LastName                 = "Strzelba",
                    Email                    = EmailAddress.Parse("*****@*****.**"),
                    PhoneNumber              = Consts.FakePhoneNumber,
                    AboutMe                  = "ala ma kota",
                    Region                   = "Wolne Miasto Gdańsk",
                    PreferredTrainingIds     = new[] { 1 },
                    PreferredLecturingCities = new[] { "Wolne Miasto Gdańsk" },
                    GdprConsentGiven         = true
                };

                var result = await engine.Execute(command);

                Assert.True(result.IsFailure);
                var error = Assert.IsType <Domain.Error.DomainError>(result.Error);
                Assert.Equal(SubmitRecruitmentForm_ErrorMessages.SubmissionMustOccurDuringCampaign, error.Message);
            }
        }
        public async Task If_school_has_resigned_but_resignation_time_expired__summary_status_is_Unknown()
        {
            // arrange
            Guid schoolId;
            var  clock = new NodaTime.Testing.FakeClock(NodaTime.SystemClock.Instance.GetCurrentInstant());
            var  sp    = new ServiceProviderBuilder().BuildServiceProvider(services => {
                services.AddSingleton(Mock.Of <IUserAccessor>(
                                          mock => mock.GetUser() == Task.FromResult(new ApplicationUser()
                {
                    Id = Guid.NewGuid()
                }),
                                          MockBehavior.Strict));
                services.AddSingleton <NodaTime.IClock>(clock);
            });

            using (var scope = sp.CreateScope())
            {
                var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>();
                var result = await engine.Execute(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")
                        },
                    }
                });

                schoolId = result.Value;
            }

            using (var scope = sp.CreateScope())
            {
                var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>();
                var result = await engine.Execute(new RecordResignation.Command()
                {
                    SchoolId = schoolId,
                    PotentialNextContactDate = clock.GetTodayDate() + NodaTime.Period.FromDays(1)
                });

                Assert.True(result.IsSuccess);
            }

            // act & assert
            clock.AdvanceDays(3);

            using (var scope = sp.CreateScope())
            {
                var engine  = scope.ServiceProvider.GetRequiredService <ISzlemEngine>();
                var results = await engine.Query(new GetSchools.Query());

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