public void ShouldRecalculateFirmHavingTerritory()
        {
            SourceDb.Has(new Facts::Firm {
                Id = 1
            })
            .Has(new Facts::FirmAddress {
                FirmId = 1, TerritoryId = 2
            });

            TargetDb.Has(new CI::Firm {
                Id = 1
            })
            .Has(new CI::FirmTerritory {
                FirmId = 1, TerritoryId = 3
            });

            Transformation.Create(Query)
            .Recalculate <CI::Firm>(1)
            .Verify <CI::FirmTerritory>(m => m.Add(It.Is(Predicate.Match(new CI::FirmTerritory {
                FirmId = 1, TerritoryId = 2
            }))))
            .Verify <CI::FirmTerritory>(m => m.Delete(It.Is(Predicate.Match(new CI::FirmTerritory {
                FirmId = 1, TerritoryId = 3
            }))));
        }
        public void ShouldRecalculateFirmHavingClient()
        {
            SourceDb.Has(new Facts::Category {
                Id = 1, Level = 3
            })
            .Has(new Facts::Project {
                OrganizationUnitId = 1
            })
            .Has(new Facts::Client {
                Id = 1
            })
            .Has(new Facts::Firm {
                Id = 1, ClientId = 1, OrganizationUnitId = 1
            });

            TargetDb.Has(new CI::Firm {
                Id = 1
            })
            .Has(new CI::Client {
                Id = 1
            });

            Transformation.Create(Query)
            .Recalculate <CI::Firm>(1)
            .Verify <CI::Firm>(m => m.Update(It.Is(Predicate.Match(new CI::Firm {
                Id = 1, ClientId = 1
            }))))
            .Verify <CI::Client>(m => m.Update(It.Is(Predicate.Match(new CI::Client {
                Id = 1
            }))), Times.Never);
        }
        public void ShouldDestroyFirmHavingCategory()
        {
            TargetDb.Has(new CI::Firm {
                Id = 1
            })
            .Has(new CI::FirmCategory1 {
                FirmId = 1, CategoryId = 1
            })
            .Has(new CI::FirmCategory2 {
                FirmId = 1, CategoryId = 2
            })
            ;

            Transformation.Create(Query)
            .Destroy <CI::Firm>(1)
            .Verify <CI::Firm>(m => m.Delete(It.Is(Predicate.Match(new CI::Firm {
                Id = 1
            }))))
            .Verify <CI::FirmCategory1>(m => m.Delete(It.Is(Predicate.Match(new CI::FirmCategory1 {
                FirmId = 1, CategoryId = 1
            }))))
            .Verify <CI::FirmCategory2>(m => m.Delete(It.Is(Predicate.Match(new CI::FirmCategory2 {
                FirmId = 1, CategoryId = 2
            }))))
            ;
        }
Exemple #4
0
        public void ShouldRecalculateDependentAggregatesIfProjectUpdated()
        {
            SourceDb.Has(new Erm::Project {
                Id = 1, OrganizationUnitId = 2
            });

            TargetDb.Has(new Facts::Project {
                Id = 1, OrganizationUnitId = 1
            })
            .Has(new Facts::Territory {
                Id = 1, OrganizationUnitId = 1
            })
            .Has(new Facts::Territory {
                Id = 2, OrganizationUnitId = 2
            })
            .Has(new Facts::Firm {
                Id = 1, OrganizationUnitId = 1
            })
            .Has(new Facts::Firm {
                Id = 2, OrganizationUnitId = 2
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::Project>(1)
            .VerifyDistinct(Statistics.Operation(1),
                            Aggregate.Recalculate <CI::Territory>(1),
                            Aggregate.Recalculate <CI::Firm>(1),
                            Aggregate.Recalculate <CI::Project>(1),
                            Aggregate.Recalculate <CI::Territory>(2),
                            Aggregate.Recalculate <CI::Firm>(2));
        }
Exemple #5
0
        public void ShouldRecalculateFirmIfBranchOfficeOrganizationUnitUpdated()
        {
            SourceDb.Has(new Erm::BranchOfficeOrganizationUnit {
                Id = 1, OrganizationUnitId = 2
            });

            TargetDb.Has(new Facts::Firm {
                Id = 1, ClientId = 1, OrganizationUnitId = 1
            })
            .Has(new Facts::Firm {
                Id = 2, ClientId = 1, OrganizationUnitId = 2
            })
            .Has(new Facts::Client {
                Id = 1
            })
            .Has(new Facts::BranchOfficeOrganizationUnit {
                Id = 1, OrganizationUnitId = 1
            })
            .Has(new Facts::LegalPerson {
                Id = 1, ClientId = 1
            })
            .Has(new Facts::Account {
                Id = 1, LegalPersonId = 1, BranchOfficeOrganizationUnitId = 1
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::BranchOfficeOrganizationUnit>(1)
            .VerifyDistinct(Aggregate.Recalculate <CI.Firm>(1), Aggregate.Recalculate <CI.Firm>(2));
        }
        public void ShouldRecalculateClientAndFirmIfCategoryFirmAddressUpdated()
        {
            SourceDb.Has(new Erm::CategoryFirmAddress {
                Id = 1, FirmAddressId = 1, CategoryId = 1
            })
            .Has(new Erm::FirmAddress {
                Id = 1, FirmId = 1
            })
            .Has(new Erm::Firm {
                Id = 1, OrganizationUnitId = 1, ClientId = 1
            })
            .Has(new Erm::Client {
                Id = 1
            });

            TargetDb.Has(new Facts::CategoryFirmAddress {
                Id = 1, FirmAddressId = 1, CategoryId = 1
            });
            TargetDb.Has(new Facts::FirmAddress {
                Id = 1, FirmId = 1
            });
            TargetDb.Has(new Facts::Firm {
                Id = 1, OrganizationUnitId = 1, ClientId = 1
            });
            TargetDb.Has(new Facts::Client {
                Id = 1
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::CategoryFirmAddress>(1)
            .VerifyDistinct(Aggregate.Recalculate <CI::Firm>(1),
                            Aggregate.Recalculate <CI::Client>(1));
        }
        public void ShouldRecalculateFirmHavingCategory()
        {
            SourceDb.Has(new Facts::Category { Id = 1, Level = 3 },
                         new Facts::Category { Id = 2, Level = 3 });
            SourceDb.Has(new Facts::CategoryOrganizationUnit { Id = 1, CategoryId = 1, OrganizationUnitId = 1 },
                         new Facts::CategoryOrganizationUnit { Id = 2, CategoryId = 2, OrganizationUnitId = 1 });
            SourceDb.Has(new Facts::Project { OrganizationUnitId = 1 });
            SourceDb.Has(new Facts::FirmAddress { Id = 1, FirmId = 1 },
                         new Facts::FirmAddress { Id = 2, FirmId = 2 });
            SourceDb.Has(new Facts::CategoryFirmAddress { Id = 1, FirmAddressId = 1, CategoryId = 1 },
                         new Facts::CategoryFirmAddress { Id = 2, FirmAddressId = 2, CategoryId = 2 });
            SourceDb.Has(new Facts::Firm { Id = 1, OrganizationUnitId = 1 },
                 new Facts::Firm { Id = 2, OrganizationUnitId = 1 },
                 new Facts::Firm { Id = 3, OrganizationUnitId = 1 });

            TargetDb.Has(new CI::Firm { Id = 1 },
                         new CI::Firm { Id = 2 },
                         new CI::Firm { Id = 3 })
                    .Has(new CI::FirmCategory { FirmId = 2, CategoryId = 1 },
                         new CI::FirmCategory { FirmId = 3, CategoryId = 1 });

            Transformation.Create(Query)
                          .Recalculate<CI::Firm>(1)
                          .Recalculate<CI::Firm>(2)
                          .Recalculate<CI::Firm>(3)
                          .Verify<CI::Firm>(m => m.Update(It.Is(Predicate.Match(new CI::Firm { Id = 1, AddressCount = 1 }))))
                          .Verify<CI::Firm>(m => m.Update(It.Is(Predicate.Match(new CI::Firm { Id = 2, AddressCount = 1 }))))
                          .Verify<CI::Firm>(m => m.Update(It.Is(Predicate.Match(new CI::Firm { Id = 3 }))))
                          .Verify<CI::FirmCategory>(m => m.Add(It.Is(Predicate.Match(new CI::FirmCategory { FirmId = 1, CategoryId = 1 }))))
                          .Verify<CI::FirmCategory>(m => m.Add(It.Is(Predicate.Match(new CI::FirmCategory { FirmId = 2, CategoryId = 2 }))))
                          .Verify<CI::FirmCategory>(m => m.Delete(It.Is(Predicate.Match(new CI::FirmCategory { FirmId = 2, CategoryId = 1 }))))
                          .Verify<CI::FirmCategory>(m => m.Delete(It.Is(Predicate.Match(new CI::FirmCategory { FirmId = 3, CategoryId = 1 }))));
        }
Exemple #8
0
        public void ShouldRecalculateFirmIfContactUpdated()
        {
            SourceDb.Has(new Erm::Contact {
                Id = 1, ClientId = 2
            });

            TargetDb.Has(new Facts::Client {
                Id = 1
            })
            .Has(new Facts::Client {
                Id = 2
            })
            .Has(new Facts::Firm {
                Id = 1, ClientId = 1
            })
            .Has(new Facts::Firm {
                Id = 2, ClientId = 2
            })
            .Has(new Facts::Contact {
                Id = 1, ClientId = 1
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::Contact>(1)
            .VerifyDistinct(Aggregate.Recalculate <CI.Client>(1), Aggregate.Recalculate <CI.Firm>(1), Aggregate.Recalculate <CI.Client>(2), Aggregate.Recalculate <CI.Firm>(2));
        }
Exemple #9
0
        public void ShouldRecalculateFirmsIfActivityCreated()
        {
            SourceDb.Has(new Appointment {
                Id = 1, ModifiedOn = DateTimeOffset.Now, IsActive = true, Status = ActivityStatusCompleted
            })
            .Has(new AppointmentReference {
                ActivityId = 1, Reference = RegardingObjectReference, ReferencedObjectId = 2, ReferencedType = EntityTypeIds.Client
            },
                 new AppointmentReference {
                ActivityId = 1, Reference = RegardingObjectReference, ReferencedObjectId = 3, ReferencedType = EntityTypeIds.Firm
            });

            TargetDb.Has(new Facts::Client {
                Id = 2
            });
            TargetDb.Has(new Facts::Firm {
                Id = 3
            });
            TargetDb.Has(new Facts::Firm {
                Id = 4, ClientId = 2
            });
            TargetDb.Has(new Facts::Firm {
                Id = 5
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::Activity>(1)
            .VerifyDistinct(Aggregate.Recalculate <CI::Firm>(3),
                            Aggregate.Recalculate <CI::Firm>(4));
        }
        public void ShouldRecalculateFirmHavingBalance()
        {
            SourceDb.Has(new Facts::Project { Id = 1, OrganizationUnitId = 1 })
                    .Has(new Facts::Client { Id = 1 },
                         new Facts::Client { Id = 2 })
                    .Has(new Facts::BranchOfficeOrganizationUnit { Id = 1, OrganizationUnitId = 1 })
                    .Has(new Facts::LegalPerson { Id = 1, ClientId = 1 },
                         new Facts::LegalPerson { Id = 2, ClientId = 2 })
                    .Has(new Facts::Account { Id = 1, LegalPersonId = 1, BranchOfficeOrganizationUnitId = 1, Balance = 123 },
                         new Facts::Account { Id = 2, LegalPersonId = 2, BranchOfficeOrganizationUnitId = 1, Balance = 456 })
                    .Has(new Facts::Firm { Id = 1, ClientId = 1, OrganizationUnitId = 1 },
                         new Facts::Firm { Id = 2, ClientId = 2, OrganizationUnitId = 1 },
                         new Facts::Firm { Id = 3, OrganizationUnitId = 1 });

            TargetDb.Has(new CI::Firm { Id = 1 },
                         new CI::Firm { Id = 2 },
                         new CI::Firm { Id = 3 })
                    .Has(new CI::FirmBalance { FirmId = 2, AccountId = 2, ProjectId = 1, Balance = 123 },
                         new CI::FirmBalance { FirmId = 3, ProjectId = 1, Balance = 123 });

            Transformation.Create(Query)
                          .Recalculate<CI::Firm>(1, 2, 3)
                          .Verify<CI::Firm>(m => m.Update(It.Is(Predicate.Match(new CI::Firm { Id = 1, ClientId = 1, ProjectId = 1 }))))
                          .Verify<CI::Firm>(m => m.Update(It.Is(Predicate.Match(new CI::Firm { Id = 2, ClientId = 2, ProjectId = 1 }))))
                          .Verify<CI::Firm>(m => m.Update(It.Is(Predicate.Match(new CI::Firm { Id = 3, ProjectId = 1 }))))
                          .Verify<CI::FirmBalance>(m => m.Add(It.Is(Predicate.Match(new CI::FirmBalance { FirmId = 1, AccountId = 1, ProjectId = 1, Balance = 123 }))))
                          .Verify<CI::FirmBalance>(m => m.Update(It.Is(Predicate.Match(new CI::FirmBalance { FirmId = 2, AccountId = 2, ProjectId = 1, Balance = 456 }))))
                          .Verify<CI::FirmBalance>(m => m.Delete(It.Is(Predicate.Match(new CI::FirmBalance { FirmId = 3, ProjectId = 1, Balance = 123 }))));
        }
Exemple #11
0
        public void ShouldRecalculateFirmIfCategoryOfLevel1Deleted()
        {
            TargetDb.Has(new Facts::Firm {
                Id = 1
            })
            .Has(new Facts::FirmAddress {
                Id = 1, FirmId = 1
            })
            .Has(new Facts::CategoryFirmAddress {
                Id = 1, FirmAddressId = 1, CategoryId = 3
            })
            .Has(new Facts::Category {
                Id = 1, Level = 1
            })
            .Has(new Facts::Category {
                Id = 2, Level = 2, ParentId = 1
            })
            .Has(new Facts::Category {
                Id = 3, Level = 3, ParentId = 2
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::Category>(1)
            .VerifyDistinct(Aggregate.Recalculate <CI.Firm>(1));
        }
        public void ShouldDestroyClient()
        {
            TargetDb.Has(new CI::Client { Id = 1 });

            Transformation.Create(Query)
                          .Destroy<CI::Client>(1)
                          .Verify<CI::Client>(m => m.Delete(It.Is(Predicate.Match(new CI::Client { Id = 1 }))));
        }
        public void ShouldDestroyCategoryGroup()
        {
            TargetDb.Has(new CI::CategoryGroup { Id = 1 });

            Transformation.Create(Query)
                          .Destroy<CI::CategoryGroup>(1)
                          .Verify<CI::CategoryGroup>(x => x.Delete(It.Is(Predicate.Match(new CI::CategoryGroup { Id = 1 }))));
        }
        public void ShouldRecalculateClient()
        {
            SourceDb.Has(new Facts::Client { Id = 1, Name = "new name" });
            TargetDb.Has(new CI::Client { Id = 1, Name = "old name" });

            Transformation.Create(Query)
                          .Recalculate<CI::Client>(1)
                          .Verify<CI::Client>(m => m.Update(It.Is(Predicate.Match(new CI::Client { Id = 1, Name = "new name" }))));
        }
Exemple #15
0
        public void ShouldDestroyTerritoryIfTerritoryDeleted()
        {
            TargetDb.Has(new Facts::Territory {
                Id = 1, OrganizationUnitId = 2
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::Territory>(1)
            .VerifyDistinct(Aggregate.Destroy <CI::Territory>(1));
        }
        public void ShouldDestroyFirmHavingClient()
        {
            TargetDb.Has(new CI::Firm { Id = 1, ClientId = 1 })
                    .Has(new CI::Client { Id = 1 });

            Transformation.Create(Query)
                          .Destroy<CI::Firm>(1)
                          .Verify<CI::Firm>(m => m.Delete(It.Is(Predicate.Match(new CI::Firm { Id = 1, ClientId = 1 }))))
                          .Verify<CI::Client>(m => m.Delete(It.Is(Predicate.Match(new CI::Client { Id = 1 }))), Times.Never);
        }
        public void ShouldDestroyFirmHavingBalance()
        {
            TargetDb.Has(new CI::Firm { Id = 1 })
                    .Has(new CI::FirmBalance { FirmId = 1, Balance = 123 });

            Transformation.Create(Query)
                          .Destroy<CI::Firm>(1)
                          .Verify<CI::Firm>(m => m.Delete(It.Is(Predicate.Match(new CI::Firm { Id = 1 }))))
                          .Verify<CI::FirmBalance>(m => m.Delete(It.Is(Predicate.Match(new CI::FirmBalance { FirmId = 1, Balance = 123 }))));
        }
Exemple #18
0
        public void ShouldDestroyClientIfClientDeleted()
        {
            TargetDb.Has(new Facts::Client {
                Id = 1
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::Client>(1)
            .VerifyDistinct(Aggregate.Destroy <CI.Client>(1));
        }
Exemple #19
0
        public void ShouldProcessFactAccordingToPriority()
        {
            //arrange
            var factProcessor = new Mock <IFactProcessor>();

            factProcessor.Setup(x => x.ApplyChanges(It.IsAny <IReadOnlyCollection <long> >()))
            .Returns(new IOperation[0]);

            var provider = new MetadataProvider(new[] { new FactsReplicationMetadataSource() }, new IMetadataProcessor[0]);

            var factoryInvocationOrder = new List <Type>();
            var factProcessorFactory   = new Mock <IFactProcessorFactory>();

            factProcessorFactory.Setup(x => x.Create(It.IsAny <IMetadataElement>()))
            .Callback <IMetadataElement>(element =>
            {
                var type = element.GetType().GenericTypeArguments[0];
                factoryInvocationOrder.Add(type);
            })
            .Returns(factProcessor.Object);

            var transformation = new FactsReplicator(Mock.Of <ITracer>(),
                                                     Mock.Of <IReplicationSettings>(),
                                                     provider,
                                                     factProcessorFactory.Object,
                                                     new CustomerIntelligenceFactTypePriorityComparer());

            SourceDb.Has(new Erm::Firm {
                Id = 2
            })
            .Has(new Erm::FirmAddress {
                Id = 1, FirmId = 1
            }, new Erm::FirmAddress {
                Id = 2, FirmId = 2
            });

            TargetDb.Has(new Facts::Firm {
                Id = 1
            });

            var inputOperations = new[]
            {
                new FactOperation(typeof(Facts::FirmAddress), 1),
                new FactOperation(typeof(Facts::Firm), 2),
                new FactOperation(typeof(Facts::FirmAddress), 2),
            };

            //act
            transformation.Replicate(inputOperations);

            //assert
            Assert.That(factoryInvocationOrder.Count, Is.EqualTo(2));
            Assert.That(factoryInvocationOrder[0], Is.EqualTo(typeof(Facts::Firm)));
            Assert.That(factoryInvocationOrder[1], Is.EqualTo(typeof(Facts::FirmAddress)));
        }
        public void ShouldRecalculateFirm()
        {
            SourceDb.Has(new Facts::Project { OrganizationUnitId = 1 })
                    .Has(new Facts::Firm { Id = 1, OrganizationUnitId = 1 });

            TargetDb.Has(new CI::Firm { Id = 1 });

            Transformation.Create(Query)
                          .Recalculate<CI::Firm>(1)
                          .Verify<CI::Firm>(m => m.Update(It.Is(Predicate.Match(new CI::Firm { Id = 1 }))));
        }
Exemple #21
0
        public void ShouldDestroyProjectIfProjectDeleted()
        {
            TargetDb.Has(new Facts::Project {
                Id = 1, OrganizationUnitId = 2
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::Project>(1)
            .VerifyDistinct(Statistics.Operation(1),
                            Aggregate.Destroy <CI::Project>(1));
        }
        public void ShouldRecalculateTerritory()
        {
            SourceDb.Has(new Facts::Project { Id = 1, OrganizationUnitId = 1 })
                    .Has(new Facts::Territory { Id = 1, OrganizationUnitId = 1, Name = "new name" });

            TargetDb.Has(new CI::Territory { Id = 1, Name = "old name" });

            Transformation.Create(Query)
                .Recalculate<CI::Territory>(1)
                .Verify<CI::Territory>(m => m.Update(It.Is(Predicate.Match(new CI::Territory { Id = 1, ProjectId = 1, Name = "new name" }))));
        }
        public void ShouldDestroyCategoryGroupIfCategoryGroupDeleted()
        {
            TargetDb.Has(
                new Facts::CategoryGroup {
                Id = 1, Name = "Name", Rate = 1
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::CategoryGroup>(1)
            .VerifyDistinct(Aggregate.Destroy <CI::CategoryGroup>(1));
        }
        public void ShouldRecalculateClientHavingContact()
        {
            SourceDb.Has(new Facts::Client {
                Id = 1
            },
                         new Facts::Client {
                Id = 2
            },
                         new Facts::Client {
                Id = 3
            })
            .Has(new Facts::Contact {
                Id = 1, ClientId = 1
            },
                 new Facts::Contact {
                Id = 2, ClientId = 2
            });
            TargetDb.Has(new CI::Client {
                Id = 1
            },
                         new CI::Client {
                Id = 2
            },
                         new CI::Client {
                Id = 3
            })
            .Has(new CI::ClientContact {
                ClientId = 2, ContactId = 2
            },
                 new CI::ClientContact {
                ClientId = 3, ContactId = 3
            });

            Transformation.Create(Query)
            .Recalculate <CI::Client>(1)
            .Recalculate <CI::Client>(2)
            .Recalculate <CI::Client>(3)
            .Verify <CI::Client>(m => m.Update(It.Is(Predicate.Match(new CI::Client {
                Id = 1
            }))))
            .Verify <CI::Client>(m => m.Update(It.Is(Predicate.Match(new CI::Client {
                Id = 2
            }))))
            .Verify <CI::Client>(m => m.Update(It.Is(Predicate.Match(new CI::Client {
                Id = 3
            }))))
            .Verify <CI::ClientContact>(m => m.Add(It.Is(Predicate.Match(new CI::ClientContact {
                ClientId = 1, ContactId = 1
            }))))
            .Verify <CI::ClientContact>(m => m.Delete(It.Is(Predicate.Match(new CI::ClientContact {
                ClientId = 3, ContactId = 3
            }))));
        }
Exemple #25
0
        public void ShouldRecalculateFirmIfOrderCreated()
        {
            SourceDb.Has(new Erm::Order {
                Id = 2, FirmId = 1, WorkflowStepId = 4
            });
            TargetDb.Has(new Facts::Firm {
                Id = 1
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::Order>(2)
            .VerifyDistinct(Aggregate.Recalculate <CI.Firm>(1));
        }
Exemple #26
0
        public void ShouldRecalculateDetachedFirmIfBranchOfficeOrganizationUnitDeleted()
        {
            TargetDb.Has(new Facts::Firm {
                Id = 1, ClientId = 2, OrganizationUnitId = 1
            })
            .Has(new Facts::BranchOfficeOrganizationUnit {
                Id = 3, OrganizationUnitId = 1
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::BranchOfficeOrganizationUnit>(3)
            .VerifyDistinct(Aggregate.Recalculate <CI.Firm>(1));
        }
Exemple #27
0
        public void ShouldRecalculateTerritoryIfTerritoryUpdated()
        {
            SourceDb.Has(new Erm::Territory {
                Id = 1, OrganizationUnitId = 2
            });
            TargetDb.Has(new Facts::Territory {
                Id = 1, OrganizationUnitId = 1
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::Territory>(1)
            .VerifyDistinct(Aggregate.Recalculate <CI::Territory>(1));
        }
Exemple #28
0
        public void ShouldRecalculateFirmIfFirmAddressDeleted()
        {
            TargetDb.Has(new Facts::Firm {
                Id = 1
            })
            .Has(new Facts::FirmAddress {
                Id = 2, FirmId = 1
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::FirmAddress>(2)
            .VerifyDistinct(Aggregate.Recalculate <CI.Firm>(1));
        }
Exemple #29
0
        public void ShouldRecalculateClientIfClientUpdated()
        {
            SourceDb.Has(new Erm::Client {
                Id = 1
            });
            TargetDb.Has(new Facts::Client {
                Id = 1
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::Client>(1)
            .VerifyDistinct(Aggregate.Recalculate <CI.Client>(1));
        }
Exemple #30
0
        public void ShouldRecalculateFirmIfClientDeleted()
        {
            TargetDb.Has(new Facts::Client {
                Id = 1
            })
            .Has(new Facts::Firm {
                Id = 2, ClientId = 1
            });

            Transformation.Create(Query, RepositoryFactory)
            .ApplyChanges <Facts::Client>(1)
            .VerifyDistinct(op => op is RecalculateAggregate, Aggregate.Recalculate <CI.Firm>(2));
        }
Exemple #31
0
        /// <summary>
        /// DataPack�� �Ķ���ͷ� �޾Ƽ� Insert ���� ����� ����.
        /// </summary>
        /// <param name="dataPack">�Ķ���͸� ������ �ִ� Pack</param>
        /// <param name="dataTable">Insert�� DB ���̺� ��</param>
        /// <param name="skipNullProperty">DataPack ������ Null �� ��� Skip</param>
        /// <param name="targetDb">Sql, Oracle, OleDb �߿� ����</param>
        /// <returns>SQL Insert��</returns>
        public static string BuildInsertQuery(DataPack dataPack, string dataTable, bool skipNullProperty, TargetDb targetDb)
        {
            StringBuilder sb1 = new StringBuilder();
             StringBuilder sb2 = new StringBuilder();
             sb1.Append("INSERT INTO ").Append(dataTable).Append(" (\r\n");

             ITypedList itl = dataPack as ITypedList;
             foreach( PropertyDescriptor pd in itl.GetItemProperties(null) )
             {
            object pdValue = pd.GetValue( dataPack );

            if ( skipNullProperty == true )
            {
               switch ( pd.PropertyType.Name )
               {
                  case "DateTime":
                     DateTime dt = Convert.ToDateTime( pdValue );
                     if ( dt == DateTime.MinValue )
                     {
                        continue;
                     }
                     break;

                  default:
                     if ( pdValue.ToString() == string.Empty )
                     {
                        continue;
                     }
                     break;
               }
            }

            sb1.Append(pd.Name).Append(", \r\n");

            switch (targetDb)
            {
               case TargetDb.SqlServer:
                  sb2.AppendFormat("@{0}", pd.Name);
                  break;
               case TargetDb.OleDb:
                  sb2.Append("?");
                  break;
               case TargetDb.Oracle:
                  sb2.AppendFormat(":{0}", pd.Name);
                  break;
            }

            sb2.Append(", \r\n");
             }

             sb1.Remove(sb1.Length - 4, 2);
             sb1.Append(") VALUES (\r\n");

             sb2.Remove(sb2.Length - 4, 2);
             sb2.Append(")");

             return sb1.ToString() + sb2.ToString();
        }
Exemple #32
0
 /// <summary>
 /// DataPack�� �Ķ���ͷ� �޾Ƽ� Insert ���� ����� ����.
 /// DataPack ������ Null �� ��� Skip�ؼ� �����.
 /// </summary>
 /// <param name="dataPack">�Ķ���͸� ������ �ִ� Pack</param>
 /// <param name="dataTable">Insert�� DB ���̺� ��</param>
 /// <param name="targetDb">Sql, Oracle, OleDb �߿� ����</param>
 /// <returns>SQL Insert��</returns>
 public static string BuildInsertQuery(DataPack dataPack, string dataTable, TargetDb targetDb)
 {
     return BuildInsertQuery(dataPack, dataTable, true, targetDb);
 }
Exemple #33
0
        /// <summary>
        /// DataPack�� �Ķ���ͷ� �޾Ƽ� Update ���� ����� ����.
        /// </summary>
        /// <param name="dataPack">�Ķ���͸� ������ �ִ� Pack</param>
        /// <param name="dataTable">Update�� DB ���̺� ��</param>
        /// <param name="whereCondition">Update�� ����� Where ������</param>
        /// <param name="skipNullProperty">DataPack ������ Null �� ��� Skip</param>
        /// <param name="targetDb">Sql, Oracle, OleDb �߿� ����</param>
        /// <returns>SQL Update��</returns>
        public static string BuildUpdateQuery(DataPack dataPack, string dataTable, string whereCondition, bool skipNullProperty, TargetDb targetDb)
        {
            StringBuilder sb = new StringBuilder();
             sb.Append("UPDATE ").Append(dataTable).Append(" SET\r\n");

             ITypedList itl = dataPack as ITypedList;
             foreach( PropertyDescriptor pd in itl.GetItemProperties(null) )
             {
            object pdValue = pd.GetValue( dataPack );

            if ( skipNullProperty == true )
            {
               switch ( pd.PropertyType.Name )
               {
                  case "DateTime":
                     DateTime dt = Convert.ToDateTime( pdValue );
                     if ( dt == DateTime.MinValue )
                     {
                        continue;
                     }
                     break;

                  default:
                     if ( pdValue.ToString() == string.Empty )
                     {
                        continue;
                     }
                     break;
               }
            }

            switch (targetDb)
            {
               case TargetDb.SqlServer:
                  sb.AppendFormat("{0} = @{1}", pd.Name, pd.Name);
                  break;
               case TargetDb.OleDb:
                  sb.AppendFormat("{0} = ?", pd.Name);
                  break;
               case TargetDb.Oracle:
                  sb.AppendFormat("{0} = :{1}", pd.Name, pd.Name);
                  break;
            }

            sb.Append(", \r\n");
             }
             sb.Remove(sb.Length - 4, 2);

             sb.Append("WHERE ").Append(whereCondition);

             return sb.ToString();
        }
Exemple #34
0
 /// <summary>
 /// DataPack�� �Ķ���ͷ� �޾Ƽ� Update ���� ����� ����.
 /// DataPack ������ Null �� ��� Skip�ؼ� �����.
 /// </summary>
 /// <param name="dataPack">�Ķ���͸� ������ �ִ� Pack</param>
 /// <param name="dataTable">Update�� DB ���̺� ��</param>
 /// <param name="whereCondition">Update�� ����� Where ������</param>
 /// <param name="targetDb">Sql, Oracle, OleDb �߿� ����</param>
 /// <returns>SQL Update��</returns>
 public static string BuildUpdateQuery(DataPack dataPack, string dataTable, string whereCondition, TargetDb targetDb)
 {
     return BuildUpdateQuery(dataPack, dataTable, whereCondition, true, targetDb);
 }
Exemple #35
0
        /// <summary>
        /// DataPack�� �Ķ���ͷ� �޾Ƽ� Select ���� ����� ����.
        /// DataPack(conditionPack)�� ���� '%' �� �ִ� ��� Select ������ Like �˻�, �׿ܴ� '=' �˻��� �����Ѵ�. 
        /// </summary>
        /// <param name="selectQuery">Select ������</param>
        /// <param name="conditionPack">������ ���� DataPack</param>
        /// <param name="skipNullProperty">DataPack ������ Null �� ��� Skip</param>
        /// <param name="targetDb">Sql, Oracle, OleDb �߿� ����</param>
        /// <returns>SQL Select��</returns>
        public static string BuildSelectQuery(string selectQuery, DataPack conditionPack, bool skipNullProperty, TargetDb targetDb)
        {
            StringBuilder sb = new StringBuilder();
             sb.Append(selectQuery);

             bool whereClauseAdded = false;

             ITypedList itl = conditionPack as ITypedList;
             foreach( PropertyDescriptor pd in itl.GetItemProperties(null) )
             {
            object pdValue = pd.GetValue(conditionPack);

            if ( skipNullProperty == true )
            {
               switch ( pd.PropertyType.Name )
               {
                  case "DateTime":
                     DateTime dt = Convert.ToDateTime( pdValue );
                     if ( dt == DateTime.MinValue )
                     {
                        continue;
                     }
                     break;

                  default:
                     if ( pdValue.ToString() == string.Empty )
                     {
                        continue;
                     }
                     break;
               }
            }

            if (!whereClauseAdded)
            {
               sb.Append(" WHERE ");
               whereClauseAdded = true;
            }

            string conditionOperator = (pdValue.ToString().IndexOf("%") < 0) ? " = " : " LIKE ";

            switch (targetDb)
            {
               case TargetDb.SqlServer:
                  sb.AppendFormat("{0} {1} @{2} AND ", pd.Name, conditionOperator, pd.Name);
                  break;
               case TargetDb.OleDb:
                  sb.AppendFormat("{0} {1} ? AND ", pd.Name, conditionOperator);
                  break;
               case TargetDb.Oracle:
                  sb.AppendFormat("{0} {1} :{2} AND ", pd.Name, conditionOperator, pd.Name);
                  break;
            }
             }

             if (whereClauseAdded)
             {
            sb.Remove(sb.Length - 5, 4);
             }

             return sb.ToString();
        }
Exemple #36
0
 /// <summary>
 /// DataPack(conditionPack)�� �Ķ���ͷ� �޾Ƽ� Select ���� ����� ����.
 /// DataPack(conditionPack)�� ���� '%' �� �ִ� ��� Select ������ Like �˻�, �׿ܴ� '=' �˻��� �����Ѵ�. 
 /// DataPack(conditionPack) ������ Null �� ��� Skip
 /// </summary>
 /// <param name="selectQuery">Select ������</param>
 /// <param name="conditionPack">������ ���� DataPack</param>
 /// <param name="targetDb">Sql, Oracle, OleDb �߿� ����</param>
 /// <returns>SQL Select��</returns>
 public static string BuildSelectQuery(string selectQuery, DataPack conditionPack, TargetDb targetDb)
 {
     return BuildSelectQuery(selectQuery, conditionPack, true, targetDb);
 }