Esempio n. 1
0
        public void GetUnitPlanViewModel_Should_Return_Result()
        {
            DateTimeDbTestExtensions.SetUtcNowToRandomDate();
            var username = DataProvider.Get <string>();

            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var unitReport = new UnitReportBuilder()
                                 .BuildAndPersist(s);
                var unitReportViewModel = TestHelper.ConvertToUnitPlanViewModel(unitReport);

                TestHelper.SetUserAccessAllOrganizationsClaim(username);

                return(unitReportViewModel);
            });

            var result = NsbWebTest.Act(AssemblySetupFixture.WebTestContainer,
                                        c => c.GetInstance <IUnitReportQueryService>()
                                        .GetUnitPlanViewModel(testParams.Id));

            result.Should().NotBeNull();
            //-- after finding the issue it will be removed
            result.BookLibraryStockPlanData  = ValueObjects.LibraryStockData.Default();
            result.VhsLibraryStockPlanData   = ValueObjects.LibraryStockData.Default();
            result.OtherLibraryStockPlanData = ValueObjects.LibraryStockData.Default();
            //---------
            result.Should().BeEquivalentTo(testParams);
        }
Esempio n. 2
0
        public void GetUnitReportViewModel_Should_Return_Result()
        {
            DateTimeDbTestExtensions.SetUtcNowToRandomDate();
            var username   = DataProvider.Get <string>();
            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var unitReport = new UnitReportBuilder()
                                 .Build();
                unitReport.MarkStatusAsSubmitted();
                s.Save(unitReport);

                var submittedUnitReportViewModel = TestHelper.ConvertToUnitReportViewModel(unitReport);

                TestHelper.SetUserAccessAllOrganizationsClaim(username);
                return(submittedUnitReportViewModel);
            });

            var result = NsbWebTest.Act(AssemblySetupFixture.WebTestContainer,
                                        c => c.GetInstance <UnitReportQueryService>()
                                        .GetUnitReportViewModel(testParams.Id));

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(testParams);
        }
        public async Task Handle_SavesUnitReport(ReportingFrequency reportingFrequency)
        {
            DateTimeDbTestExtensions.SetUtcNowToRandomDate();
            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var username      = DataProvider.Get <string>();
                var year          = 2019;
                var reportingTerm = ReportingTerm.One;
                var organization  = new TestObjectBuilder <Organization>()
                                    .SetArgument(o => o.OrganizationType, OrganizationType.Unit)
                                    .SetArgument(o => o.ReportingFrequency, reportingFrequency)
                                    .BuildAndPersist(s);
                var cmd         = new CreateUnitPlanCommand(organization, year, reportingTerm, reportingFrequency);
                var description = cmd.Description;
                var expected    = new UnitReportBuilder()
                                  .SetDescription(description)
                                  .SetOrganization(organization)
                                  .SetReportingPeriod(new ReportingPeriod(reportingFrequency, reportingTerm, year))
                                  .SetReportData(ReportData.Default())
                                  .Build();
                return(new
                {
                    cmd,
                    username,
                    expected
                });
            });

            var context = await Endpoint.Act <CreateUnitPlanCommandHandler>(AssemblySetupFixture.EndpointTestContainer,
                                                                            (h, ctx) =>
            {
                ctx.SetUsernameOnHeader(testParams.username);
                return(h.Handle(testParams.cmd, ctx));
            });

            var evt = context.ExpectPublish <IUnitPlanCreated>();

            Endpoint.AssertOnSqlSessionThat(AssemblySetupFixture.EndpointTestContainer,
                                            s =>
            {
                var report = s.Query <UnitReport>().Single();
                report.Should().NotBeNull();
                report.Should().BeEquivalentTo(testParams.expected, e => e.Excluding(p => p.Id));
                report.ReportingPeriod.Should().BeEquivalentTo(testParams.expected.ReportingPeriod);

                EntityReference reportRef = report;

                var expectedEvt = Test.CreateInstance <IUnitPlanCreated>(e =>
                {
                    e.Organization = testParams.expected.Organization;
                    e.Username     = testParams.username;
                    e.UnitReport   = reportRef;
                });

                evt.Should().BeEquivalentTo(expectedEvt, e => e.Excluding(p => p.SerializedData));
                evt.SerializedData.Should().NotBe(null);
            });
        }
        public void CreateNewUnitPlan_SavesCorrectlyWhenLastYearSubmitted(ReportingFrequency reportingFrequency)
        {
            DateTimeDbTestExtensions.SetUtcNowToRandomDate();

            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var organizationType = OrganizationType.Unit;

                var description   = DataProvider.Get <string>();
                var year          = 2019;
                var reportingTerm = ReportingTerm.One;
                var organization  = new TestObjectBuilder <Organization>()
                                    .SetArgument(o => o.OrganizationType, organizationType)
                                    .SetArgument(o => o.ReportingFrequency, reportingFrequency)
                                    .BuildAndPersist(s);

                OrganizationReference organizationRef = organization;

                var reportingPeriod = new ReportingPeriod(reportingFrequency, reportingTerm, year);


                var expected = new UnitReportBuilder()
                               .SetDescription(description)
                               .SetOrganization(organization)
                               .SetReportingPeriod(new ReportingPeriod(reportingFrequency, reportingTerm, year))
                               .SetReportData(ReportData.Default())
                               .Build();
                return(new
                {
                    description,
                    organizationRef,
                    reportingPeriod,
                    expected
                });
            });
            var result = Endpoint.Act(AssemblySetupFixture.EndpointTestContainer,
                                      c =>
            {
                var unitReport = c.GetInstance <UnitReportFactory>()
                                 .CreateNewUnitPlan(testParams.description,
                                                    testParams.organizationRef,
                                                    testParams.reportingPeriod.ReportingTerm,
                                                    testParams.reportingPeriod.Year,
                                                    reportingFrequency);
                return(new
                {
                    unitReport
                });
            });

            result.unitReport.Should().NotBeNull();

            result.unitReport.Should().BeEquivalentTo(testParams.expected, e =>
                                                      e.Excluding(p => p.Id));
        }
        public async Task Handle_DoNotSavesUnitReport_WhenDuplicate(ReportingFrequency reportingFrequency)
        {
            DateTimeDbTestExtensions.SetUtcNowToRandomDate();

            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var username      = DataProvider.Get <string>();
                var description   = DataProvider.Get <string>();
                var year          = 2019;
                var reportingTerm = ReportingTerm.One;
                var organization  = new TestObjectBuilder <Organization>()
                                    .SetArgument(o => o.OrganizationType, OrganizationType.Unit)
                                    .SetArgument(o => o.ReportingFrequency, reportingFrequency)
                                    .BuildAndPersist(s);

                var copyFrom = new UnitReportBuilder()
                               .SetDescription(description)
                               .SetOrganization(organization)
                               .SetReportingPeriod(new ReportingPeriod(reportingFrequency, reportingTerm, year - 1))
                               .BuildAndPersist(s);

                var duplicate = new UnitReportBuilder()
                                .SetDescription(description)
                                .SetOrganization(organization)
                                .SetReportingPeriod(new ReportingPeriod(reportingFrequency, reportingTerm, year))
                                .BuildAndPersist(s);

                return(new
                {
                    Cmd = new CopyUnitPlanCommand(copyFrom.Id, organization, year, reportingTerm, reportingFrequency),
                    username,
                    duplicate
                });
            });

            var context = await Endpoint.Act <CopyUnitPlanCommandHandler>(AssemblySetupFixture.EndpointTestContainer,
                                                                          (h, ctx) =>
            {
                ctx.SetUsernameOnHeader(testParams.username);
                return(h.Handle(testParams.Cmd, ctx));
            });

            var evt = context.ExpectPublish <IUnitPlanCopyFailed>();

            Endpoint.AssertOnSqlSessionThat(AssemblySetupFixture.EndpointTestContainer,
                                            s =>
            {
                var report = s.Query <UnitReport>().OrderByDescending(o => o.Id).First();
                report.Should().NotBeNull();
                report.Should().BeEquivalentTo(testParams.duplicate);
                evt.Errors[0].Should().Contain(testParams.duplicate.Description);
            });
        }
Esempio n. 6
0
        public async Task Handle_SavesPlan(ReportingFrequency reportingFrequency)
        {
            DateTimeDbTestExtensions.SetUtcNowToRandomDate();

            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var username      = DataProvider.Get <string>();
                var year          = 2019;
                var reportingTerm = ReportingTerm.One;
                var organization  = new OrganizationBuilder()
                                    .SetOrganizationType(OrganizationType.Unit)
                                    .SetReportingFreQuency(reportingFrequency)
                                    .BuildAndPersist(s);

                var report = new UnitReportBuilder()
                             .SetOrganization(organization)
                             .SetReportingPeriod(new ReportingPeriod(reportingFrequency, reportingTerm, year))
                             .BuildAndPersist(s);

                var associateMemberData = new TestObjectBuilder <MemberData>()
                                          .Build();

                var preliminaryMemberData = new TestObjectBuilder <MemberData>()
                                            .Build();

                var workerMeetingProgramData = new TestObjectBuilder <MeetingProgramData>()
                                               .Build();

                var supporterMemberData = new TestObjectBuilder <MemberData>()
                                          .Build();

                var memberMemberData = new TestObjectBuilder <MemberData>()
                                       .Build();

                PlanData planData = new ReportDataBuilder()
                                    .SetAssociateMemberData(associateMemberData)
                                    .SetPreliminaryMemberData(preliminaryMemberData)
                                    .SetWorkerMeetingProgramData(workerMeetingProgramData)
                                    .SetSupporterMemberData(supporterMemberData)
                                    .SetMemberMemberData(memberMemberData)
                                    .Build();

                EntityReference reportRef = report;
                var expectedEvt           = Test.CreateInstance <IUnitPlanUpdated>(e =>
                {
                    e.Organization = organization;
                    e.Username     = username;
                    e.UnitReport   = reportRef;
                });


                return(new
                {
                    Cmd = new UpdateUnitPlanCommand(report.Id,
                                                    planData),
                    Organization = organization,
                    Report = report,
                    username,
                    expectedEvt
                });
            });

            var context = await Endpoint.Act <UpdateUnitPlanCommandHandler>(AssemblySetupFixture.EndpointTestContainer,
                                                                            (h, ctx) =>
            {
                ctx.SetUsernameOnHeader(testParams.username);
                return(h.Handle(testParams.Cmd, ctx));
            });

            var evt = context.ExpectPublish <IUnitPlanUpdated>();

            Endpoint.AssertOnSqlSessionThat(AssemblySetupFixture.EndpointTestContainer,
                                            s =>
            {
                var unitReport = s.Get <UnitReport>(testParams.Cmd.ReportId);
                unitReport.Should().NotBeNull();
                unitReport.Should().BeEquivalentTo(testParams.Report, e =>
                                                   e.Excluding(p => p.AssociateMemberData)
                                                   .Excluding(p => p.PreliminaryMemberData)
                                                   .Excluding(p => p.SupporterMemberData)
                                                   .Excluding(p => p.WorkerMeetingProgramData)
                                                   .Excluding(p => p.DawahMeetingProgramData)
                                                   .Excluding(p => p.StateLeaderMeetingProgramData)
                                                   .Excluding(p => p.StateOutingMeetingProgramData)
                                                   .Excluding(p => p.IftarMeetingProgramData)
                                                   .Excluding(p => p.LearningMeetingProgramData)
                                                   .Excluding(p => p.SocialDawahMeetingProgramData)
                                                   .Excluding(p => p.DawahGroupMeetingProgramData)
                                                   .Excluding(p => p.NextGMeetingProgramData)
                                                   .Excluding(p => p.CmsMeetingProgramData)
                                                   .Excluding(p => p.SmMeetingProgramData)
                                                   .Excluding(p => p.MemberMeetingProgramData)
                                                   .Excluding(p => p.TafsirMeetingProgramData)
                                                   .Excluding(p => p.UnitMeetingProgramData)
                                                   .Excluding(p => p.FamilyVisitMeetingProgramData)
                                                   .Excluding(p => p.EidReunionMeetingProgramData)
                                                   .Excluding(p => p.BbqMeetingProgramData)
                                                   .Excluding(p => p.GatheringMeetingProgramData)
                                                   .Excluding(p => p.OtherMeetingProgramData)
                                                   .Excluding(p => p.MemberMemberData)
                                                   .Excluding(p => p.BaitulMalFinanceData)
                                                   .Excluding(p => p.ADayMasjidProjectFinanceData)
                                                   .Excluding(p => p.MasjidTableBankFinanceData)
                                                   .Excluding(p => p.QardeHasanaSocialWelfareData)
                                                   .Excluding(p => p.PatientVisitSocialWelfareData)
                                                   .Excluding(p => p.SocialVisitSocialWelfareData)
                                                   .Excluding(p => p.TransportSocialWelfareData)
                                                   .Excluding(p => p.ShiftingSocialWelfareData)
                                                   .Excluding(p => p.ShoppingSocialWelfareData)
                                                   .Excluding(p => p.FoodDistributionSocialWelfareData)
                                                   .Excluding(p => p.CleanUpAustraliaSocialWelfareData)
                                                   .Excluding(p => p.OtherSocialWelfareData)
                                                   .Excluding(p => p.BookSaleMaterialData)
                                                   .Excluding(p => p.BookDistributionMaterialData)
                                                   .Excluding(p => p.BookLibraryStockData)

                                                   .Excluding(p => p.OtherSaleMaterialData)
                                                   .Excluding(p => p.OtherDistributionMaterialData)
                                                   .Excluding(p => p.OtherLibraryStockData)

                                                   .Excluding(p => p.VhsSaleMaterialData)
                                                   .Excluding(p => p.VhsDistributionMaterialData)
                                                   .Excluding(p => p.VhsLibraryStockData)
                                                   .Excluding(p => p.EmailDistributionMaterialData)
                                                   .Excluding(p => p.IpdcLeafletDistributionMaterialData)

                                                   .Excluding(p => p.GroupStudyTeachingLearningProgramData)
                                                   .Excluding(p => p.StudyCircleTeachingLearningProgramData)
                                                   .Excluding(p => p.PracticeDarsTeachingLearningProgramData)
                                                   .Excluding(p => p.StateLearningCampTeachingLearningProgramData)
                                                   .Excluding(p => p.QuranStudyTeachingLearningProgramData)
                                                   .Excluding(p => p.QuranClassTeachingLearningProgramData)
                                                   .Excluding(p => p.MemorizingAyatTeachingLearningProgramData)
                                                   .Excluding(p => p.StateLearningSessionTeachingLearningProgramData)
                                                   .Excluding(p => p.StateQiyamulLailTeachingLearningProgramData)
                                                   //
                                                   .Excluding(p => p.StudyCircleForAssociateMemberTeachingLearningProgramData)
                                                   .Excluding(p => p.HadithTeachingLearningProgramData)
                                                   .Excluding(p => p.WeekendIslamicSchoolTeachingLearningProgramData)
                                                   .Excluding(p => p.MemorizingHadithTeachingLearningProgramData)
                                                   .Excluding(p => p.MemorizingDoaTeachingLearningProgramData)
                                                   .Excluding(p => p.OtherTeachingLearningProgramData)
                                                   );

                ReportData reportData = unitReport;
                PlanData planData     = reportData;
                planData.Should().BeEquivalentTo(testParams.Cmd.PlanData);

                evt.Should().BeEquivalentTo(testParams.expectedEvt, e => e.Excluding(p => p.SerializedData));
                evt.SerializedData.Should().NotBe(null);
            });
        }
        public void CreateNewUnitPlanAi_SavesCorrectlyWhenLastYearSubmitted(ReportingFrequency reportingFrequency)
        {
            DateTimeDbTestExtensions.SetUtcNowToRandomDate();

            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var organizationType = OrganizationType.Unit;

                var description   = DataProvider.Get <string>();
                var year          = 2019;
                var reportingTerm = ReportingTerm.One;
                var organization  = new TestObjectBuilder <Organization>()
                                    .SetArgument(o => o.OrganizationType, organizationType)
                                    .SetArgument(o => o.ReportingFrequency, reportingFrequency)
                                    .BuildAndPersist(s);

                OrganizationReference organizationRef = organization;

                var reportingPeriod = new ReportingPeriod(reportingFrequency, reportingTerm, year);

                var lastPeriod1 = reportingPeriod.GetReportingPeriodOfPreviousTerm();
                var lastPeriod1ReportingData = new ReportDataBuilder().Build();
                var lastPeriod1UnitReport    = new UnitReport(description, organization, lastPeriod1, lastPeriod1ReportingData);
                lastPeriod1UnitReport.MarkStatusAsSubmitted();
                s.Save(lastPeriod1UnitReport);

                var lastPeriod2 = lastPeriod1.GetReportingPeriodOfPreviousTerm();
                var lastPeriod2ReportingData = new ReportDataBuilder().Build();
                var lastPeriod2UnitReport    = new UnitReport(description, organization, lastPeriod2, lastPeriod2ReportingData);
                lastPeriod2UnitReport.MarkStatusAsSubmitted();
                s.Save(lastPeriod2UnitReport);

                var expected = new UnitReportBuilder()
                               .SetDescription(description)
                               .SetOrganization(organization)
                               .SetReportingPeriod(new ReportingPeriod(reportingFrequency, reportingTerm, year))
                               .Build();

                return(new
                {
                    description,
                    organizationRef,
                    reportingPeriod,
                    lastPeriod1UnitReport,
                    expected
                });
            });
            var result = Endpoint.Act(AssemblySetupFixture.EndpointTestContainer,
                                      c =>
            {
                var unitReport = c.GetInstance <UnitReportFactory>()
                                 .CreateNewUnitPlanAi(testParams.description,
                                                      testParams.organizationRef,
                                                      testParams.reportingPeriod.ReportingTerm,
                                                      testParams.reportingPeriod.Year,
                                                      reportingFrequency);
                return(new
                {
                    unitReport
                });
            });

            result.unitReport.Should().NotBeNull();

            result.unitReport.Should().BeEquivalentTo(testParams.expected, e =>
                                                      e.Excluding(p => p.Id)
                                                      .Excluding(p => p.AssociateMemberData)
                                                      .Excluding(p => p.PreliminaryMemberData)
                                                      .Excluding(p => p.WorkerMeetingProgramData)
                                                      .Excluding(p => p.SupporterMemberData)
                                                      .Excluding(p => p.DawahMeetingProgramData)
                                                      .Excluding(p => p.MemberMemberData));


            TestHelper.MemberDataForCreateUnitPlanShouldBeEquivalent(result.unitReport.AssociateMemberData, testParams.lastPeriod1UnitReport.AssociateMemberData);
            TestHelper.MemberDataForCreateUnitPlanShouldBeEquivalent(result.unitReport.PreliminaryMemberData, testParams.lastPeriod1UnitReport.PreliminaryMemberData);
            result.unitReport.PreliminaryMemberData.Should().BeEquivalentTo(testParams.lastPeriod1UnitReport.WorkerMeetingProgramData);
        }
        public async Task Handle_SavesPlan(ReportingFrequency reportingFrequency)
        {
            DateTimeDbTestExtensions.SetUtcNowToRandomDate();

            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var username      = DataProvider.Get <string>();
                var year          = 2019;
                var reportingTerm = ReportingTerm.One;
                var organization  = new OrganizationBuilder()
                                    .SetOrganizationType(OrganizationType.Unit)
                                    .SetReportingFreQuency(reportingFrequency)
                                    .BuildAndPersist(s);

                var associateMemberData = new TestObjectBuilder <MemberData>()
                                          .Build();

                var preliminaryMemberData = new TestObjectBuilder <MemberData>()
                                            .Build();

                var supporterMemberData = new TestObjectBuilder <MemberData>()
                                          .Build();

                PlanData planData = new ReportDataBuilder()
                                    .SetAssociateMemberData(associateMemberData)
                                    .SetPreliminaryMemberData(preliminaryMemberData)
                                    .SetSupporterMemberData(supporterMemberData)
                                    .Build();

                var report = new UnitReportBuilder()
                             .SetOrganization(organization)
                             .SetReportingPeriod(new ReportingPeriod(reportingFrequency, reportingTerm, year))
                             .BuildAndPersist(s);
                report.UpdatePlan(planData);
                s.Save(report);

                EntityReference reportRef = report;
                var expectedEvt           = Test.CreateInstance <IUnitPlanPromoted>(e =>
                {
                    e.Organization = organization;
                    e.Username     = username;
                    e.UnitReport   = reportRef;
                });

                return(new
                {
                    Cmd = new PromotePlanToUnitReportCommand(report.Id),
                    Report = report,
                    username,
                    expectedEvt
                });
            });

            var context = await Endpoint.Act <PromotePlanToUnitReportCommandHandler>(AssemblySetupFixture.EndpointTestContainer,
                                                                                     (h, ctx) =>
            {
                ctx.SetUsernameOnHeader(testParams.username);
                return(h.Handle(testParams.Cmd, ctx));
            });

            var evt = context.ExpectPublish <IUnitPlanPromoted>();

            Endpoint.AssertOnSqlSessionThat(AssemblySetupFixture.EndpointTestContainer,
                                            s =>
            {
                var unitReport = s.Get <UnitReport>(testParams.Cmd.PlanId);
                unitReport.Should().NotBeNull();
                unitReport.Should().BeEquivalentTo(testParams.Report, e => e.Excluding(p => p.ReportStatus));
                unitReport.ReportStatus.Should().Be(ReportStatus.PlanPromoted);

                evt.Should().BeEquivalentTo(testParams.expectedEvt, e => e.Excluding(p => p.SerializedData));
                evt.SerializedData.Should().NotBe(null);
            });
        }