public void Has_Central_Should_Return_CorrectResult(bool isCentralUser)
        {
            var username = DataProvider.Get <string>();

            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var reportingFrequency = ReportingFrequency.Monthly;

                var organizations = IntegrationTestOrganizationHelper.SetupOrzanizations(
                    stateReportingFrequency: reportingFrequency,
                    zoneReportingFrequency: ReportingFrequency.Monthly);
                var central = organizations.First(o => o.Key == IntegrationTestOrganizationHelper.Central).Value;
                var nsw     = organizations.First(o => o.Key == IntegrationTestOrganizationHelper.NswState).Value;

                var organizationUser1 = new TestObjectBuilder <OrganizationUser>()
                                        .SetArgument(o => o.Username, username)
                                        .SetArgument(o => o.Organization, isCentralUser?central: nsw)
                                        .BuildAndPersist(s);


                new UserContextBuilder()
                .SetUsername(username)
                .AddClaims(TestHelper.GetOrganizationClaims(username, new[] { organizationUser1 }))
                .SetCurrentPrincipal();

                return(new { organizationUser1 });
            });

            var result = NsbWebTest.Act(AssemblySetupFixture.WebTestContainer,
                                        c => c.GetInstance <OrganizationUserQueryService>()
                                        .HasCentralAccess(testParams.organizationUser1.Username));

            result.Should().Be(isCentralUser);
        }
        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));
        }
Exemple #4
0
        public void GetRecent_Returns_Result_AsExpected(OrganizationType organizationType, ReportingFrequency reportingFrequency)
        {
            var org1 = new TestObjectBuilder <OrganizationReference>()
                       .SetArgument(o => o.OrganizationType, organizationType)
                       .Build();

            var org2 = new TestObjectBuilder <OrganizationReference>()
                       .SetArgument(o => o.OrganizationType, organizationType)
                       .Build();


            var excelReportData1 = new ExcelReportDataBuilder().Build();

            excelReportData1.Organization    = org1;
            excelReportData1.ReportingPeriod = new ReportingPeriod(ReportingFrequency.Monthly, ReportingTerm.One, 2019);
            var excelReportData2 = new ExcelReportDataBuilder().Build();

            excelReportData2.Organization    = org1;
            excelReportData2.ReportingPeriod = new ReportingPeriod(ReportingFrequency.Monthly, ReportingTerm.Four, 2019);

            var excelReportData3 = new ExcelReportDataBuilder().Build();

            excelReportData3.Organization    = org1;
            excelReportData3.ReportingPeriod = new ReportingPeriod(ReportingFrequency.Monthly, ReportingTerm.Three, 2019);

            var excelReportData4 = new ExcelReportDataBuilder().Build();

            excelReportData4.Organization    = org2;
            excelReportData4.ReportingPeriod = new ReportingPeriod(ReportingFrequency.Monthly, ReportingTerm.One, 2019);

            var excelReportData5 = new ExcelReportDataBuilder().Build();

            excelReportData5.Organization    = org2;
            excelReportData5.ReportingPeriod = new ReportingPeriod(ReportingFrequency.Monthly, ReportingTerm.Three, 2019);

            var excelReportData6 = new ExcelReportDataBuilder().Build();

            excelReportData6.Organization    = org2;
            excelReportData6.ReportingPeriod = new ReportingPeriod(ReportingFrequency.Monthly, ReportingTerm.Two, 2019);

            var excelReportDatas = new[] {
                excelReportData1,
                excelReportData2,
                excelReportData3,
                excelReportData4,
                excelReportData5,
                excelReportData6
            };

            var data = new SearchResult <ExcelReportData>(excelReportDatas, new PagingData(1, 100, 1000));
            var recentExcelReportDatas = ExcelReportFactory.GetRecentExcelReportDatas(data.Items, organizationType);
            var expected = new[] { excelReportData2, excelReportData5 };

            // ReSharper disable once CoVariantArrayConversion
            recentExcelReportDatas.Should().BeEquivalentTo(expected);
        }
Exemple #5
0
        public async Task Handle_DoNotSavesCentralReport_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.Central)
                                    .SetArgument(o => o.ReportingFrequency, reportingFrequency)
                                    .BuildAndPersist(s);

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

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

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



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

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

            Endpoint.AssertOnSqlSessionThat(AssemblySetupFixture.EndpointTestContainer,
                                            s =>
            {
                var report = s.Query <CentralReport>().OrderByDescending(o => o.Id).First();
                report.Should().NotBeNull();
                report.Should().BeEquivalentTo(testParams.duplicate);
                evt.Errors[0].Should().Contain(testParams.duplicate.Description);
            });
        }
        public UnitReport Build()
        {
            var report = new TestObjectBuilder <UnitReport>()
                         .SetArgument(o => o.Description, _description)
                         .SetArgument(o => o.Organization, _organization)
                         .SetArgument(o => o.ReportingPeriod, _reportingPeriod)
                         .SetArgument("reportData", _reportData)
                         .Build();

            return(report);
        }
Exemple #7
0
        public ZoneReport Build()
        {
            var report = new TestObjectBuilder <ZoneReport>()
                         .SetArgument(o => o.Description, _description)
                         .SetArgument(o => o.Organization, _organization)
                         .SetArgument(o => o.ReportingPeriod, _reportingPeriod)
                         .SetArgument("reportData", _reportData)
                         .Build();

            report.UpdateGeneratedData(_reportDataGenerated);
            return(report);
        }
Exemple #8
0
        public Organization Build()
        {
            var organization = new TestObjectBuilder <Organization>()
                               .SetArgument(o => o.Description, _description)
                               .SetArgument(o => o.Details, _details)
                               .SetArgument(o => o.ReportingFrequency, _reportFrequency)
                               .SetArgument(o => o.OrganizationType, _organizationType)
                               .SetArgument(o => o.Parent, _parent)
                               .Build();

            return(organization);
        }
        public void CreateRooms_WhenNothingGetOnTheWay_RoomsCreated()
        {
            //a
            var newRoom = TestObjectBuilder.CreateMany <Room>(3).ToArray();
            //a
            var createdRooms = _roomRepository.CreateRooms(newRoom).ToList();
            //a
            var receivedRooms = _roomRepository.ReadRooms(createdRooms.Select(x => x.Id).ToArray()).ToList();

            _roomRepository.DeleteRooms(createdRooms.Select(x => new Room {
                Id = x.Id
            }).ToArray());
            Xunit.Assert.Equal(createdRooms, receivedRooms);
        }
        public void DeleteRooms_WhenRoomsExist_RoomsDeleted()
        {
            //a
            var newRoom      = TestObjectBuilder.CreateMany <Room>(3).ToArray();
            var createdRooms = _roomRepository.CreateRooms(newRoom).ToList();

            //a
            _roomRepository.DeleteRooms(createdRooms.Select(x => new Room {
                Id = x.Id
            }).ToArray());
            //a
            var receivedRooms = _roomRepository.ReadRooms(createdRooms.Select(x => x.Id).ToArray()).ToList();

            Xunit.Assert.Empty(receivedRooms);
        }
        public void PromotePlanToUnitReport_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);

                var period1 = new ReportingPeriod(reportingFrequency, reportingTerm, year);
                var period1ReportingData = new ReportDataBuilder().Build();
                var period1UnitReport    =
                    new UnitReport(description, organization, period1, period1ReportingData);
                s.Save(period1UnitReport);


                return(new
                {
                    period1UnitReport,
                });
            });
            var result = Endpoint.Act(AssemblySetupFixture.EndpointTestContainer,
                                      c =>
            {
                var unitReport = c.GetInstance <UnitReportService>()
                                 .PromotePlanToUnitReport(testParams.period1UnitReport.Id);
                return(new
                {
                    unitReport
                });
            });

            result.unitReport.Should().NotBeNull();
            result.unitReport.Should().BeEquivalentTo(testParams.period1UnitReport, e =>
                                                      e.Excluding(p => p.ReportStatus));
            result.unitReport.ReportStatus.Should().Be(ReportStatus.PlanPromoted);
        }
Exemple #12
0
        public void SearchReportEventLog_Should_Return_NoResult_ForOrganizationId_Null()
        {
            var username1 = DataProvider.Get <string>();
            var username2 = DataProvider.Get <string>();

            Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                         s =>
            {
                EntityReference organization1 = new OrganizationBuilder().BuildAndPersist(s);
                EntityReference organization2 = new OrganizationBuilder().BuildAndPersist(s);

                var organizationUser1 = new TestObjectBuilder <OrganizationUser>()
                                        .SetArgument(o => o.Username, username1)
                                        .SetArgument(o => o.Organization, organization1)
                                        .BuildAndPersist(s);

                new TestObjectBuilder <ReportEventLog>()
                .SetArgument(o => o.CreatedByUsername, username1)
                .SetArgument(o => o.OrganizationId, null)
                .BuildAndPersist(s);

                new TestObjectBuilder <ReportEventLog>()
                .SetArgument(o => o.CreatedByUsername, username1)
                .SetArgument(o => o.OrganizationId, organization2.Id)
                .BuildAndPersist(s);

                new TestObjectBuilder <ReportEventLog>()
                .SetArgument(o => o.CreatedByUsername, username2)
                .SetArgument(o => o.OrganizationId, organization2.Id)
                .BuildAndPersist(s);

                new UserContextBuilder()
                .SetUsername(username1)
                .AddClaims(TestHelper.GetOrganizationClaims(username1, new[] { organizationUser1 }))
                .SetCurrentPrincipal();
            });

            var result = NsbWebTest.Act(AssemblySetupFixture.WebTestContainer,
                                        c => c.GetInstance <IReportEventLogQueryService>()
                                        .SearchReportEventLog(new ReportEventLogSearchTerms()));

            result.Should().NotBeNull();
            result.Items.Length.Should().Be(0);
        }
        public void GetMyOrganizations_For_User_Should_Return_CorrectResult(OrganizationType organizationType)
        {
            var username   = DataProvider.Get <string>();
            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var reportingFrequency = ReportingFrequency.Monthly;

                var organizations = IntegrationTestOrganizationHelper.SetupOrzanizations(
                    stateReportingFrequency: reportingFrequency,
                    zoneReportingFrequency: ReportingFrequency.Monthly);

                var state = organizations.First(o => o.Key == IntegrationTestOrganizationHelper.NswState).Value;
                var unit  = organizations.First(o => o.Key == IntegrationTestOrganizationHelper.Footscray).Value;



                var organizationUser1 = new TestObjectBuilder <OrganizationUser>()
                                        .SetArgument(o => o.Username, username)
                                        .SetArgument(o => o.Organization, organizationType == OrganizationType.State? state : unit)
                                        .BuildAndPersist(s);

                new UserContextBuilder()
                .SetUsername(username)
                .AddClaims(TestHelper.GetOrganizationClaims(username, new[] { organizationUser1 }))
                .SetCurrentPrincipal();
                return(new
                {
                    state,
                    unit
                });
            });

            var result = NsbWebTest.Act(AssemblySetupFixture.WebTestContainer,
                                        c => c.GetInstance <OrganizationQueryService>()
                                        .GetMyOrganizations());

            var organizationId = organizationType == OrganizationType.State ? testParams.state.Id : testParams.unit.Id;

            result.Should().NotBeNull();
            result.Where(o => o.Id == organizationId).Should().NotBeNull();
        }
        public ReportLastPeriodUpdateData Build()
        {
            var reportData = new TestObjectBuilder <ReportLastPeriodUpdateData>()
                             .SetArgument(o => o.AssociateMemberReportData, _associateMemberReportData)
                             .SetArgument(o => o.PreliminaryMemberReportData, _preliminaryMemberReportData)
                             .SetArgument(o => o.SupporterMemberReportData, _supporterMemberReportData)
                             .SetArgument(o => o.MemberMemberReportData, _memberMemberReportData)

                             .SetArgument(o => o.BaitulMalFinanceReportData, _baitulMalFinanceReportData)
                             .SetArgument(o => o.ADayMasjidProjectFinanceReportData, _aDayMasjidProjectFinanceReportData)
                             .SetArgument(o => o.BaitulMalFinanceReportData, _baitulMalFinanceReportData)
                             .SetArgument(o => o.ADayMasjidProjectFinanceReportData, _aDayMasjidProjectFinanceReportData)
                             .SetArgument(o => o.MasjidTableBankFinanceReportData, _masjidTableBankFinanceReportData)

                             .SetArgument(o => o.BookLibraryStockReportData, _bookLibraryStockReportData)
                             .SetArgument(o => o.OtherLibraryStockReportData, _otherLibraryStockReportData)
                             .SetArgument(o => o.VhsLibraryStockReportData, _vhsLibraryStockReportData)
                             .Build();

            return(reportData);
        }
Exemple #15
0
        public async Task Handle_UnitPlanCreated(ReportingFrequency reportingFrequency)
        {
            var now = DateTimeDbTestExtensions.SetUtcNowToRandomDate();

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

                var evt = Test.CreateInstance <IUnitPlanCreated>(x =>
                {
                    x.Username       = username;
                    x.Organization   = organization;
                    x.UnitReport     = DataProvider.Get <EntityReference>();
                    x.SerializedData = DataProvider.Get <string>();
                });
                return(new
                {
                    evt
                });
            });


            await Endpoint.Act <LogWhenReportEventReceived>(AssemblySetupFixture.EndpointTestContainer,
                                                            (h, ctx) => h.Handle(testParams.evt, ctx));

            Endpoint.AssertOnSqlSessionThat(AssemblySetupFixture.EndpointTestContainer,
                                            s =>
            {
                var reportEventLog = s.Query <ReportEventLog>().Single();
                reportEventLog.Should().NotBeNull();
                reportEventLog.OrganizationId.Should().Be(testParams.evt.Organization.Id);
                reportEventLog.Timestamp.Should().Be(now);
            });
        }
Exemple #16
0
        public FinanceData Build()
        {
            var financeData = new TestObjectBuilder <FinanceData>()
                              .SetArgument(o => o.Action, _action)
                              .SetArgument(o => o.WorkerPromiseIncreaseTarget, _workerPromiseIncreaseTarget)
                              .SetArgument(o => o.OtherSourceAction, _otherSourceAction)
                              .SetArgument(o => o.OtherSourceIncreaseTarget, _otherSourceIncreaseTarget)

                              .SetArgument(o => o.LastPeriod, _lastPeriod)
                              .SetArgument(o => o.Collection, _collection)
                              .SetArgument(o => o.Expense, _expense)
                              .SetArgument(o => o.NisabPaidToCentral, _nisabPaidToCentral)

                              .SetArgument(o => o.WorkerPromiseLastPeriod, _workerPromiseLastPeriod)

                              .SetArgument(o => o.WorkerPromiseIncreased, _workerPromiseIncreased)
                              .SetArgument(o => o.WorkerPromiseDecreased, _workerPromiseDecreased)
                              .SetArgument(o => o.Comment, _comment)
                              .Build();

            return(financeData);
        }
Exemple #17
0
        public async Task Handle_DeletesOrganizationUser()
        {
            var deletedByusername = DataProvider.Get <string>();
            var username          = DataProvider.Get <string>();
            var role = DataProvider.Get <string>();

            DateTimeDbTestExtensions.SetUtcNowToRandomDate();

            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var org = new OrganizationBuilder().BuildAndPersist(s);
                var organizationUser = new TestObjectBuilder <OrganizationUser>()
                                       .SetArgument(o => o.Username, username)
                                       .SetArgument(o => o.Role, role)
                                       .SetArgument(o => o.Organization, org)
                                       .BuildAndPersist(s);
                return(new
                {
                    deletedByusername,
                    cmd = new DeleteOrganizationUserCommand(organizationUser.Id)
                });
            });


            await Endpoint.Act <DeleteOrganizationUserCommandHandler>(AssemblySetupFixture.EndpointTestContainer,
                                                                      (h, ctx) =>
            {
                ctx.SetUsernameOnHeader(testParams.deletedByusername);
                return(h.Handle(testParams.cmd, ctx));
            });

            Endpoint.AssertOnSqlSessionThat(AssemblySetupFixture.EndpointTestContainer,
                                            s =>
            {
                var report = s.Get <OrganizationUser>(testParams.cmd.OrganizationUserId);
                report.Should().BeNull();
            });
        }
        public void UpdateRooms_WhenRoomsExist_RoomsUpdated()
        {
            //a
            var newRoom = TestObjectBuilder.CreateMany <Room>(3).ToArray();
            //var t1 = _roomRepository.Context.ChangeTracker.Entries().Count();
            var createdRooms = _roomRepository.CreateRooms(newRoom).ToArray();
            //var t2 = _roomRepository.Context.ChangeTracker.Entries().Count();
            var updatedRooms = TestObjectBuilder.UpdateMany <Room>(100, createdRooms).ToArray();

            //a
            //var t3 = _roomRepository.Context.ChangeTracker.Entries().Count();
            _roomRepository.UpdateRooms(updatedRooms);
            //var t4 = _roomRepository.Context.ChangeTracker.Entries().Count();
            //a
            //var t5 = _roomRepository.Context.ChangeTracker.Entries().Count();
            var receivedRooms = _roomRepository.ReadRooms(createdRooms.Select(x => x.Id).ToArray()).ToArray();

            //var t6 = _roomRepository.Context.ChangeTracker.Entries().Count();
            _roomRepository.DeleteRooms(createdRooms.Select(x => new Room {
                Id = x.Id
            }).ToArray());
            Xunit.Assert.Equal(updatedRooms, receivedRooms);
        }
        public void SearchOrganizationUser_Should_Return_Result()
        {
            var username   = DataProvider.Get <string>();
            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                EntityReference organization1 = new OrganizationBuilder().BuildAndPersist(s);
                EntityReference organization2 = new OrganizationBuilder().BuildAndPersist(s);

                var organizationUser1 = new TestObjectBuilder <OrganizationUser>()
                                        .SetArgument(o => o.Username, username)
                                        .SetArgument(o => o.Organization, organization1)
                                        .BuildAndPersist(s);

                new TestObjectBuilder <OrganizationUser>()
                .SetArgument(o => o.Username, username)
                .SetArgument(o => o.Organization, organization2)
                .BuildAndPersist(s);

                new UserContextBuilder()
                .SetUsername(username)
                .AddClaims(TestHelper.GetOrganizationClaims(username, new [] { organizationUser1 }))
                .SetCurrentPrincipal();

                return(new { organizationUser1 });
            });

            var result = NsbWebTest.Act(AssemblySetupFixture.WebTestContainer,
                                        c => c.GetInstance <IOrganizationUserQueryService>()
                                        .SearchOrganizationUser(new OrganizationUserSearchTerms()));

            result.Should().NotBeNull();
            result.Items.Length.Should().Be(1);
            result.Items[0].Role.Should().Be(testParams.organizationUser1.Role);
            result.Items[0].Organization.Should().Be(testParams.organizationUser1.Organization);
        }
Exemple #20
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 GetReportingPeriodsToCreatePlan_For_User_Should_Return_CorrectResult(OrganizationType organizationType)
        {
            DateTimeDbTestExtensions.SetLocalNowToRandomDate();
            var username   = DataProvider.Get <string>();
            var testParams = Endpoint.ArrangeOnSqlSession(AssemblySetupFixture.EndpointTestContainer,
                                                          s =>
            {
                var organizations = IntegrationTestOrganizationHelper.SetupOrzanizations();

                var central = organizations.First(o => o.Key == IntegrationTestOrganizationHelper.Central).Value;
                var state   = organizations.First(o => o.Key == IntegrationTestOrganizationHelper.NswState).Value;
                var zone    = organizations.First(o => o.Key == IntegrationTestOrganizationHelper.NswZoneOne).Value;
                var unit    = organizations.First(o => o.Key == IntegrationTestOrganizationHelper.Footscray).Value;

                EntityReference sut = null;
                switch (organizationType)
                {
                case OrganizationType.Central:
                    sut = central;
                    break;

                case OrganizationType.State:
                    sut = state;
                    break;

                case OrganizationType.Zone:
                    sut = zone;
                    break;

                default:
                    sut = unit;
                    break;
                }

                var organizationUser1 = new TestObjectBuilder <OrganizationUser>()
                                        .SetArgument(o => o.Username, username)
                                        .SetArgument(o => o.Organization, sut)
                                        .BuildAndPersist(s);

                new UserContextBuilder()
                .SetUsername(username)
                .AddClaims(TestHelper.GetOrganizationClaims(username, new[] { organizationUser1 }))
                .SetCurrentPrincipal();


                return(new
                {
                    sut
                });
            });

            var result = NsbWebTest.Act(AssemblySetupFixture.WebTestContainer,
                                        c =>
            {
                return(c.GetInstance <OrganizationQueryService>()
                       .GetReportingPeriods(testParams.sut.Id));
            });

            if (organizationType == OrganizationType.Unit)
            {
                result.Length.Should().Be(36);
                var activeReportPeriod = result.Single(o => o.IsActive);
                activeReportPeriod.Should().NotBeNull();
            }
            else
            {
                result.Length.Should().Be(20);
                var activeAnnualReportPeriod = result.Single(o => o.IsActive && o.ReportingFrequency == ReportingFrequency.Yearly);
                activeAnnualReportPeriod.Should().NotBeNull();

                var activeQuarterlyReportPeriod = result.Single(o => o.IsActive && o.ReportingFrequency == ReportingFrequency.Quarterly);
                activeQuarterlyReportPeriod.Should().NotBeNull();
            }
        }
        public void PromotePlanToUnitReportAi_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);

                var period1 = new ReportingPeriod(reportingFrequency, reportingTerm, year);
                var period1ReportingData = new ReportDataBuilder().Build();
                var period1UnitReport    =
                    new UnitReport(description, organization, period1, period1ReportingData);
                s.Save(period1UnitReport);

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

                return(new
                {
                    period1UnitReport,
                    lastPeriod2UnitReport
                });
            });
            var result = Endpoint.Act(AssemblySetupFixture.EndpointTestContainer,
                                      c =>
            {
                var unitReport = c.GetInstance <UnitReportService>()
                                 .PromotePlanToUnitReportAi(testParams.period1UnitReport.Id);
                return(new
                {
                    unitReport
                });
            });

            result.unitReport.Should().NotBeNull();
            result.unitReport.Should().BeEquivalentTo(testParams.period1UnitReport, e =>
                                                      e.Excluding(p => p.ReportStatus)
                                                      .Excluding(p => p.AssociateMemberData)
                                                      .Excluding(p => p.PreliminaryMemberData)
                                                      .Excluding(p => p.WorkerMeetingProgramData));

            result.unitReport.ReportStatus.Should().Be(ReportStatus.PlanPromoted);

            result.unitReport.AssociateMemberData.UpgradeTarget.Should()
            .Be(testParams.period1UnitReport.AssociateMemberData.UpgradeTarget);
            result.unitReport.AssociateMemberData.LastPeriod.Should()
            .Be(testParams.period1UnitReport.AssociateMemberData.LastPeriod);
            result.unitReport.AssociateMemberData.ThisPeriod.Should()
            .Be(testParams.lastPeriod2UnitReport.AssociateMemberData.ThisPeriod);

            result.unitReport.PreliminaryMemberData.UpgradeTarget.Should()
            .Be(testParams.period1UnitReport.PreliminaryMemberData.UpgradeTarget);
            result.unitReport.PreliminaryMemberData.LastPeriod.Should()
            .Be(testParams.period1UnitReport.PreliminaryMemberData.LastPeriod);
            result.unitReport.PreliminaryMemberData.ThisPeriod.Should()
            .Be(testParams.lastPeriod2UnitReport.PreliminaryMemberData.ThisPeriod);

            //Worker meeting values should be initial values. Should not set last period values (as that will be irrelevant)
            result.unitReport.WorkerMeetingProgramData.Target.Should()
            .Be(testParams.period1UnitReport.WorkerMeetingProgramData.Target);
            result.unitReport.WorkerMeetingProgramData.Actual.Should()
            .Be(testParams.period1UnitReport.WorkerMeetingProgramData.Actual);
            result.unitReport.WorkerMeetingProgramData.AverageAttendance.Should()
            .Be(testParams.period1UnitReport.WorkerMeetingProgramData.AverageAttendance);
        }
        public ReportData Build()
        {
            var reportData = new TestObjectBuilder <ReportData>()
                             .SetArgument(o => o.MemberMemberData, _memberMemberData)
                             .SetArgument(o => o.AssociateMemberData, _associateMemberData)
                             .SetArgument(o => o.PreliminaryMemberData, _preliminaryMemberData)
                             .SetArgument(o => o.WorkerMeetingProgramData, _workerMeetingProgramData)
                             .SetArgument(o => o.SupporterMemberData, _supporterMemberData)
                             .SetArgument(o => o.DawahMeetingProgramData, _dawahMeetingProgramData)
                             .SetArgument(o => o.StateLeaderMeetingProgramData, _stateLeaderMeetingProgramData)
                             .SetArgument(o => o.StateOutingMeetingProgramData, _stateOutingMeetingProgramData)
                             .SetArgument(o => o.IftarMeetingProgramData, _iftarMeetingProgramData)
                             .SetArgument(o => o.LearningMeetingProgramData, _learningMeetingProgramData)
                             .SetArgument(o => o.SocialDawahMeetingProgramData, _socialDawahMeetingProgramData)
                             .SetArgument(o => o.DawahGroupMeetingProgramData, _dawahGroupMeetingProgramData)
                             .SetArgument(o => o.NextGMeetingProgramData, _nextGMeetingProgramData)

                             .SetArgument(o => o.CmsMeetingProgramData, _cmsMeetingProgramData)
                             .SetArgument(o => o.SmMeetingProgramData, _smMeetingProgramData)
                             .SetArgument(o => o.MemberMeetingProgramData, _memberMeetingProgramData)
                             .SetArgument(o => o.TafsirMeetingProgramData, _tafsirMeetingProgramData)
                             .SetArgument(o => o.UnitMeetingProgramData, _unitMeetingProgramData)
                             .SetArgument(o => o.FamilyVisitMeetingProgramData, _familyVisitMeetingProgramData)
                             .SetArgument(o => o.EidReunionMeetingProgramData, _eidReunionMeetingProgramData)
                             .SetArgument(o => o.BbqMeetingProgramData, _bbqMeetingProgramData)
                             .SetArgument(o => o.GatheringMeetingProgramData, _gatheringMeetingProgramData)
                             .SetArgument(o => o.OtherMeetingProgramData, _otherMeetingProgramData)


                             .SetArgument(o => o.BaitulMalFinanceData, _baitulMalFinanceData)
                             .SetArgument(o => o.ADayMasjidProjectFinanceData, _aDayMasjidProjectFinanceData)
                             .SetArgument(o => o.MasjidTableBankFinanceData, _masjidTableBankFinanceData)
                             .SetArgument(o => o.QardeHasanaSocialWelfareData, _qardeHasanaSocialWelfareData)
                             .SetArgument(o => o.PatientVisitSocialWelfareData, _patientVisitSocialWelfareData)
                             .SetArgument(o => o.SocialVisitSocialWelfareData, _socialVisitSocialWelfareData)
                             .SetArgument(o => o.TransportSocialWelfareData, _transportSocialWelfareData)
                             .SetArgument(o => o.ShiftingSocialWelfareData, _shiftingSocialWelfareData)
                             .SetArgument(o => o.ShoppingSocialWelfareData, _shoppingSocialWelfareData)
                             .SetArgument(o => o.FoodDistributionSocialWelfareData, _foodDistributionSocialWelfareData)
                             .SetArgument(o => o.CleanUpAustraliaSocialWelfareData, _cleanUpAustraliaSocialWelfareData)
                             .SetArgument(o => o.OtherSocialWelfareData, _otherSocialWelfareData)
                             .SetArgument(o => o.BookSaleMaterialData, _bookSaleMaterialData)
                             .SetArgument(o => o.BookDistributionMaterialData, _bookDistributionMaterialData)
                             .SetArgument(o => o.BookLibraryStockData, _bookLibraryStockData)
                             .SetArgument(o => o.OtherSaleMaterialData, _otherSaleMaterialData)
                             .SetArgument(o => o.OtherDistributionMaterialData, _otherDistributionMaterialData)
                             .SetArgument(o => o.OtherLibraryStockData, _otherLibraryStockData)
                             .SetArgument(o => o.VhsSaleMaterialData, _vhsSaleMaterialData)
                             .SetArgument(o => o.VhsDistributionMaterialData, _vhsDistributionMaterialData)
                             .SetArgument(o => o.VhsLibraryStockData, _vhsLibraryStockData)
                             .SetArgument(o => o.EmailDistributionMaterialData, _emailDistributionMaterialData)
                             .SetArgument(o => o.IpdcLeafletDistributionMaterialData, _ipdcLeafletDistributionMaterialData)
                             .SetArgument(o => o.GroupStudyTeachingLearningProgramData, _groupStudyTeachingLearningProgramData)
                             .SetArgument(o => o.StudyCircleTeachingLearningProgramData, _studyCircleTeachingLearningProgramData)
                             .SetArgument(o => o.PracticeDarsTeachingLearningProgramData, _practiceDarsTeachingLearningProgramData)
                             .SetArgument(o => o.StateLearningCampTeachingLearningProgramData, _stateLearningCampTeachingLearningProgramData)
                             .SetArgument(o => o.QuranStudyTeachingLearningProgramData, _quranStudyTeachingLearningProgramData)
                             .SetArgument(o => o.QuranClassTeachingLearningProgramData, _quranClassTeachingLearningProgramData)
                             .SetArgument(o => o.MemorizingAyatTeachingLearningProgramData, _memorizingAyatTeachingLearningProgramData)
                             .SetArgument(o => o.StateLearningSessionTeachingLearningProgramData, _stateLearningSessionTeachingLearningProgramData)
                             .SetArgument(o => o.StateQiyamulLailTeachingLearningProgramData, _stateQiyamulLailTeachingLearningProgramData)
                             .SetArgument(o => o.StudyCircleForAssociateMemberTeachingLearningProgramData, _studyCircleForAssociateMemberTeachingLearningProgramData)
                             .SetArgument(o => o.HadithTeachingLearningProgramData, _hadithTeachingLearningProgramData)
                             .SetArgument(o => o.WeekendIslamicSchoolTeachingLearningProgramData, _weekendIslamicSchoolTeachingLearningProgramData)
                             .SetArgument(o => o.MemorizingHadithTeachingLearningProgramData, _memorizingHadithTeachingLearningProgramData)
                             .SetArgument(o => o.MemorizingDoaTeachingLearningProgramData, _memorizingDoaTeachingLearningProgramData)
                             .SetArgument(o => o.OtherTeachingLearningProgramData, _otherTeachingLearningProgramData)

                             .SetArgument(o => o.Comment, _comment)
                             .Build();

            return(reportData);
        }
Exemple #24
0
        public async Task Handle_SavesReport(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.Central)
                                    .SetReportingFreQuency(reportingFrequency)
                                    .BuildAndPersist(s);

                var report = new CentralReportBuilder()
                             .SetOrganization(organization)
                             .SetReportingPeriod(new ReportingPeriod(reportingFrequency, reportingTerm, year))
                             .Build();
                report.MarkStatusAsPlanPromoted();
                s.Save(report);
                var memberMemberData = new TestObjectBuilder <MemberData>()
                                       .Build();
                var associateMemberData = new TestObjectBuilder <MemberData>()
                                          .Build();

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

                //Todo pass random data once supporterMember is added to the CentralReport
                var supporterMemberData = new TestObjectBuilder <MemberData>()
                                          .Build();

                var workerMeetingProgramData      = new TestObjectBuilder <MeetingProgramData>().Build();
                var dawahMeetingProgramData       = new TestObjectBuilder <MeetingProgramData>().Build();
                var stateLeaderMeetingProgramData = new TestObjectBuilder <MeetingProgramData>().Build();
                var stateOutingMeetingProgramData = new TestObjectBuilder <MeetingProgramData>().Build();
                var iftarMeetingProgramData       = new TestObjectBuilder <MeetingProgramData>().Build();
                var learningMeetingProgramData    = new TestObjectBuilder <MeetingProgramData>().Build();
                var socialDawahMeetingProgramData = new TestObjectBuilder <MeetingProgramData>().Build();
                var dawahGroupMeetingProgramData  = new TestObjectBuilder <MeetingProgramData>().Build();
                var nextGMeetingProgramData       = new TestObjectBuilder <MeetingProgramData>().Build();

                var cmsMeetingProgramData         = new TestObjectBuilder <MeetingProgramData>().Build();
                var smMeetingProgramData          = new TestObjectBuilder <MeetingProgramData>().Build();
                var memberMeetingProgramData      = new TestObjectBuilder <MeetingProgramData>().Build();
                var tafsirMeetingProgramData      = new TestObjectBuilder <MeetingProgramData>().Build();
                var unitMeetingProgramData        = new TestObjectBuilder <MeetingProgramData>().Build();
                var familyVisitMeetingProgramData = new TestObjectBuilder <MeetingProgramData>().Build();
                var eidReunionMeetingProgramData  = new TestObjectBuilder <MeetingProgramData>().Build();
                var bbqMeetingProgramData         = new TestObjectBuilder <MeetingProgramData>().Build();
                var gatheringMeetingProgramData   = new TestObjectBuilder <MeetingProgramData>().Build();
                var otherMeetingProgramData       = new TestObjectBuilder <MeetingProgramData>().Build();

                var groupStudyTeachingLearningProgramData                    = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var studyCircleTeachingLearningProgramData                   = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var practiceDarsTeachingLearningProgramData                  = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var stateLearningCampTeachingLearningProgramData             = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var quranStudyTeachingLearningProgramData                    = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var quranClassTeachingLearningProgramData                    = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var memorizingAyatTeachingLearningProgramData                = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var stateLearningSessionTeachingLearningProgramData          = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var stateQiyamulLailTeachingLearningProgramData              = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var studyCircleForAssociateMemberTeachingLearningProgramData = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var hadithTeachingLearningProgramData = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var weekendIslamicSchoolTeachingLearningProgramData = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var memorizingHadithTeachingLearningProgramData     = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var memorizingDoaTeachingLearningProgramData        = new TestObjectBuilder <TeachingLearningProgramData>().Build();
                var otherTeachingLearningProgramData = new TestObjectBuilder <TeachingLearningProgramData>().Build();


                var baitulMalFinanceData         = FinanceData.Default();
                var aDayMasjidProjectFinanceData = FinanceData.Default();
                var masjidTableBankFinanceData   = FinanceData.Default();

                var qardeHasanaSocialWelfareData  = SocialWelfareData.Default();
                var patientVisitSocialWelfareData = SocialWelfareData.Default();
                var socialVisitSocialWelfareData  = SocialWelfareData.Default();

                var transportSocialWelfareData        = SocialWelfareData.Default();
                var shiftingSocialWelfareData         = SocialWelfareData.Default();
                var shoppingSocialWelfareData         = SocialWelfareData.Default();
                var foodDistributionSocialWelfareData = SocialWelfareData.Default();
                var cleanUpAustraliaSocialWelfareData = SocialWelfareData.Default();
                var otherSocialWelfareData            = SocialWelfareData.Default();

                var bookSaleMaterialData                = MaterialData.Default();
                var bookDistributionMaterialData        = MaterialData.Default();
                var bookLibraryStockData                = LibraryStockData.Default();
                var otherSaleMaterialData               = MaterialData.Default();
                var otherDistributionMaterialData       = MaterialData.Default();
                var otherLibraryStockData               = LibraryStockData.Default();
                var vhsSaleMaterialData                 = MaterialData.Default();
                var vhsDistributionMaterialData         = MaterialData.Default();
                var vhsLibraryStockData                 = LibraryStockData.Default();
                var emailDistributionMaterialData       = MaterialData.Default();
                var ipdcLeafletDistributionMaterialData = MaterialData.Default();

                //var bookLibraryStockData = LibraryStockData.Default();
                //var vhsLibraryStockData = LibraryStockData.Default();

                var comment = DataProvider.Get <string>();


                ReportUpdateData centralReportUpdateData = new ReportDataBuilder()
                                                           .SetMemberMemberData(memberMemberData)
                                                           .SetAssociateMemberData(associateMemberData)
                                                           .SetPreliminaryMemberData(preliminaryMemberData)
                                                           .SetSupporterMemberData(supporterMemberData)

                                                           .SetWorkerMeetingProgramData(workerMeetingProgramData)
                                                           .SetDawahMeetingProgramData(dawahMeetingProgramData)
                                                           .SetStateLeaderMeetingProgramData(stateLeaderMeetingProgramData)
                                                           .SetStateOutingMeetingProgramData(stateOutingMeetingProgramData)
                                                           .SetIftarMeetingProgramData(iftarMeetingProgramData)
                                                           .SetLearningMeetingProgramData(learningMeetingProgramData)
                                                           .SetSocialDawahMeetingProgramData(socialDawahMeetingProgramData)
                                                           .SetDawahGroupMeetingProgramData(dawahGroupMeetingProgramData)
                                                           .SetNextGMeetingProgramData(nextGMeetingProgramData)

                                                           .SetCmsMeetingProgramData(cmsMeetingProgramData)
                                                           .SetSmMeetingProgramData(smMeetingProgramData)
                                                           .SetMemberMeetingProgramData(memberMeetingProgramData)
                                                           .SetTafsirMeetingProgramData(tafsirMeetingProgramData)
                                                           .SetUnitMeetingProgramData(unitMeetingProgramData)
                                                           .SetFamilyVisitMeetingProgramData(familyVisitMeetingProgramData)
                                                           .SetEidReunionMeetingProgramData(eidReunionMeetingProgramData)
                                                           .SetBbqMeetingProgramData(bbqMeetingProgramData)
                                                           .SetGatheringMeetingProgramData(gatheringMeetingProgramData)
                                                           .SetOtherMeetingProgramData(otherMeetingProgramData)

                                                           .SetGroupStudyTeachingLearningProgramData(groupStudyTeachingLearningProgramData)
                                                           .SetStudyCircleTeachingLearningProgramData(studyCircleTeachingLearningProgramData)
                                                           .SetPracticeDarsTeachingLearningProgramData(practiceDarsTeachingLearningProgramData)
                                                           .SetStateLearningCampTeachingLearningProgramData(stateLearningCampTeachingLearningProgramData)
                                                           .SetQuranStudyTeachingLearningProgramData(quranStudyTeachingLearningProgramData)
                                                           .SetQuranClassTeachingLearningProgramData(quranClassTeachingLearningProgramData)
                                                           .SetMemorizingAyatTeachingLearningProgramData(memorizingAyatTeachingLearningProgramData)
                                                           .SetStateLearningSessionTeachingLearningProgramData(stateLearningSessionTeachingLearningProgramData)
                                                           .SetStateQiyamulLailTeachingLearningProgramData(stateQiyamulLailTeachingLearningProgramData)

                                                           .SetBaitulMalFinanceData(baitulMalFinanceData)
                                                           .SetADayMasjidProjectFinanceData(aDayMasjidProjectFinanceData)
                                                           .SetMasjidTableBankFinanceData(masjidTableBankFinanceData)

                                                           .SetQardeHasanaSocialWelfareData(qardeHasanaSocialWelfareData)
                                                           .SetPatientVisitSocialWelfareData(patientVisitSocialWelfareData)
                                                           .SetSocialVisitSocialWelfareData(socialVisitSocialWelfareData)
                                                           .SetTransportSocialWelfareData(transportSocialWelfareData)
                                                           .SetShiftingSocialWelfareData(shiftingSocialWelfareData)
                                                           .SetShoppingSocialWelfareData(shoppingSocialWelfareData)

                                                           .SetFoodDistributionSocialWelfareData(foodDistributionSocialWelfareData)
                                                           .SetCleanUpAustraliaSocialWelfareData(cleanUpAustraliaSocialWelfareData)
                                                           .SetOtherSocialWelfareData(otherSocialWelfareData)

                                                           .SetBookSaleMaterialData(bookSaleMaterialData)
                                                           .SetBookDistributionMaterialData(bookDistributionMaterialData)
                                                           .SetBookLibraryStockData(bookLibraryStockData)

                                                           .SetOtherSaleMaterialData(otherSaleMaterialData)
                                                           .SetOtherDistributionMaterialData(otherDistributionMaterialData)
                                                           .SetOtherLibraryStockData(otherLibraryStockData)

                                                           .SetVhsSaleMaterialData(vhsSaleMaterialData)
                                                           .SetVhsDistributionMaterialData(vhsDistributionMaterialData)
                                                           .SetVhsLibraryStockData(vhsLibraryStockData)

                                                           .SetEmailDistributionMaterialData(emailDistributionMaterialData)
                                                           .SetIpdcLeafletDistributionMaterialData(ipdcLeafletDistributionMaterialData)

                                                           .SetGroupStudyTeachingLearningProgramData(groupStudyTeachingLearningProgramData)
                                                           .SetStudyCircleTeachingLearningProgramData(studyCircleTeachingLearningProgramData)
                                                           .SetPracticeDarsTeachingLearningProgramData(practiceDarsTeachingLearningProgramData)
                                                           .SetStateLearningCampTeachingLearningProgramData(stateLearningCampTeachingLearningProgramData)
                                                           .SetQuranStudyTeachingLearningProgramData(quranStudyTeachingLearningProgramData)
                                                           .SetQuranClassTeachingLearningProgramData(quranClassTeachingLearningProgramData)
                                                           .SetMemorizingAyatTeachingLearningProgramData(memorizingAyatTeachingLearningProgramData)
                                                           .SetStateLearningSessionTeachingLearningProgramData(stateLearningSessionTeachingLearningProgramData)
                                                           .SetStateQiyamulLailTeachingLearningProgramData(stateQiyamulLailTeachingLearningProgramData)

                                                           .SetStudyCircleForAssociateMemberTeachingLearningProgramData(studyCircleForAssociateMemberTeachingLearningProgramData)
                                                           .SetHadithTeachingLearningProgramData(hadithTeachingLearningProgramData)
                                                           .SetWeekendIslamicSchoolTeachingLearningProgramData(weekendIslamicSchoolTeachingLearningProgramData)
                                                           .SetMemorizingHadithTeachingLearningProgramData(memorizingHadithTeachingLearningProgramData)
                                                           .SetMemorizingDoaTeachingLearningProgramData(memorizingDoaTeachingLearningProgramData)
                                                           .SetOtherTeachingLearningProgramData(otherTeachingLearningProgramData)

                                                           .SetComment(comment)

                                                           .Build();

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

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

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

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

            Endpoint.AssertOnSqlSessionThat(AssemblySetupFixture.EndpointTestContainer,
                                            s =>
            {
                var centralReport = s.Get <CentralReport>(testParams.Cmd.ReportId);
                centralReport.Should().NotBeNull();

                centralReport.Should().BeEquivalentTo(testParams.Report, e =>
                                                      e.Excluding(p => p.MemberMemberData)
                                                      .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.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)

                                                      .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.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.Comment)
                                                      );

                ReportData reportData             = centralReport;
                ReportUpdateData reportUpdateData = reportData;
                reportUpdateData.Should().BeEquivalentTo(testParams.Cmd.ReportUpdateData);

                evt.Should().BeEquivalentTo(testParams.expectedEvt, e => e.Excluding(p => p.SerializedData));
                evt.SerializedData.Should().NotBe(null);
            });
        }
        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.State)
                                    .SetReportingFreQuency(reportingFrequency)
                                    .BuildAndPersist(s);

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

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

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

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

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

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

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

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

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

                evt.Should().BeEquivalentTo(testParams.expectedEvt, e => e.Excluding(p => p.SerializedData));
                evt.SerializedData.Should().NotBe(null);
            });
        }
        public async Task Handle_SavesZoneReport(ReportingFrequency reportingFrequency, ReportingFrequency differentFrequency)
        {
            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.Zone)
                                    .SetArgument(o => o.ReportingFrequency, reportingFrequency)
                                    .BuildAndPersist(s);

                var existing = new ZoneReportBuilder()
                               .SetDescription(DataProvider.Get <string>())
                               .SetOrganization(organization)
                               .SetReportingPeriod(new ReportingPeriod(reportingFrequency, reportingTerm, year))
                               .BuildAndPersist(s);
                var newReportYear = year + 1;

                new ZoneReportBuilder()
                .SetDescription(DataProvider.Get <string>())
                .SetOrganization(organization)
                .SetReportingPeriod(new ReportingPeriod(differentFrequency, reportingTerm, newReportYear))
                .BuildAndPersist(s);

                var cmd            = new CopyZonePlanCommand(existing.Id, organization, newReportYear, reportingTerm, reportingFrequency);
                var description    = cmd.Description;
                var lastPeriodData = Calculator.GetLastPeriodUpdateData(existing);

                var expected = new ZoneReportBuilder()
                               .SetDescription(description)
                               .SetOrganization(organization)
                               .SetReportingPeriod(new ReportingPeriod(reportingFrequency, reportingTerm, newReportYear))
                               .SetReportData(existing)
                               .Build();
                expected.Update(lastPeriodData);
                return(new
                {
                    cmd,
                    username,
                    expected
                });
            });

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

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

            Endpoint.AssertOnSqlSessionThat(AssemblySetupFixture.EndpointTestContainer,
                                            s =>
            {
                var report = s.Query <ZoneReport>().OrderByDescending(o => o.Id).First();
                report.Should().NotBeNull();
                report.Should().BeEquivalentTo(testParams.expected, e =>
                                               e.Excluding(p => p.Id)
                                               .Excluding(p => p.ReportingPeriod)
                                               .Excluding(p => p.ReportStatus));

                EntityReference reportRef = report;

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

                evt.Should().BeEquivalentTo(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);
        }