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
                });
            }
        }
Exemplo n.º 3
0
        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
                });
            }
        }
Exemplo n.º 5
0
        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));
            }
        }