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", }); } }
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 }); } }
public async Task If_school_resigned_temporarily__result_has_flag_HasResignedTemporarily_and_ResignationEndDate() { Guid schoolId; var now = NodaTime.SystemClock.Instance.GetZonedDateTime(); var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); 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 result = await engine.Execute(command); result.IsSuccess.Should().BeTrue(); schoolId = result.Value; } using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var command = new RecordResignation.Command() { SchoolId = schoolId, PotentialNextContactDate = now.Plus(NodaTime.Duration.FromDays(7)).Date }; var result = await engine.Execute(command); result.IsSuccess.Should().BeTrue(); } using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var result = await engine.Query(new GetDetails.Query() { SchoolId = schoolId }); result.IsSuccess.Should().BeTrue(); var school = result.Value; school.Should().BeEquivalentTo(new GetDetails.SchoolDetails() { Id = schoolId, Name = "I Liceum Ogólnokształcące", Address = "Wały Piastowskie 6", City = "Gdańsk", HasResignedTemporarily = true, ResignationEndDate = now.Plus(NodaTime.Duration.FromDays(7)).Date }, options => options.Excluding(x => x.Events).Excluding(x => x.ContactData)); } }
public async Task If_school_has_signed_the_agreement__summary_status_is_HasSignedAgreement() { // arrange Guid schoolId; var sp = new ServiceProviderBuilder().BuildServiceProvider(services => { services.AddSingleton(Mock.Of <IUserAccessor>( mock => mock.GetUser() == Task.FromResult(new ApplicationUser() { Id = Guid.NewGuid() }), MockBehavior.Strict)); }); 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 RecordAgreementSigned.Command() { SchoolId = schoolId, ScannedDocument = new byte[] { 0x00 }, ScannedDocumentContentType = "image/jpeg", ScannedDocumentExtension = ".jpg", Duration = RecordAgreementSigned.AgreementDuration.Permanent }); Assert.True(result.IsSuccess); } // act & assert 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.HasSignedAgreement }); } }
public async Task If_school_signed_fixed_term_agreement__result_has_HasSignedFixedTermAgreement_and_AgreementEndDate() { Guid schoolId; var now = NodaTime.SystemClock.Instance.GetZonedDateTime(); var sp = new ServiceProviderBuilder().BuildServiceProvider(ConfigureServices); using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); 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 result = await engine.Execute(command); result.IsSuccess.Should().BeTrue(); schoolId = result.Value; } using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var command = new RecordAgreementSigned.Command() { SchoolId = schoolId, Duration = RecordAgreementSigned.AgreementDuration.FixedTerm, AgreementEndDate = now.Plus(NodaTime.Duration.FromDays(7)).Date, ScannedDocument = new byte[] { 0x00 }, ScannedDocumentContentType = "image/jpeg", ScannedDocumentExtension = ".jpg" }; var result = await engine.Execute(command); result.IsSuccess.Should().BeTrue(); } using (var scope = sp.CreateScope()) { var engine = scope.ServiceProvider.GetRequiredService <ISzlemEngine>(); var result = await engine.Query(new GetDetails.Query() { SchoolId = schoolId }); result.IsSuccess.Should().BeTrue(); var school = result.Value; school.Should().BeEquivalentTo(new GetDetails.SchoolDetails() { Id = schoolId, Name = "I Liceum Ogólnokształcące", Address = "Wały Piastowskie 6", City = "Gdańsk", HasSignedFixedTermAgreement = true, AgreementEndDate = now.Plus(NodaTime.Duration.FromDays(7)).Date }, options => options.Excluding(x => x.Events).Excluding(x => x.ContactData)); } }