public async Task InsertAdviceService()
        {
            var options = TestHelper.GetDbContext("InsertAdviceService");

            //Given
            var model = new AdviceService()
            {
                Name         = "1",
                DisplayOrder = 1
            };

            using (var context = new DataContext(options))
            {
                var service = new DirectoryLookupService(context);

                //When
                var result = await service.InsertAdviceService(model);

                //Then
                Assert.True(result.Success);

                var actual = await context.AdviceService.FindAsync(((AdviceService)result.Tag).Id);

                Assert.Equal(model.Name, actual.Name);
                Assert.Equal(model.DisplayOrder, actual.DisplayOrder);
            }
        }
Exemple #2
0
        public async Task ImportClient_Insert_WithAlternateIdNumber()
        {
            var options = TestHelper.GetDbContext("ImportClient_Insert_WithAlternateIdNumber");

            var user1 = TestHelper.InsertUserDetailed(options);

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, null, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber = "123456" //Not a valid id number so should be treated as a passport number
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Client.FirstOrDefaultAsync(m => m.AlternateIdNumber == data.IdNumber);

                Assert.Null(actual.IdNumber);
            }
        }
        public async Task InsertCompany()
        {
            var options = TestHelper.GetDbContext("InsertCompany");

            //Given
            var model = new Company()
            {
                Name = "1",
                CommissionPolicyNumberPrefixes = new List <string>()
                {
                    "pre_1"
                }
            };

            using (var context = new DataContext(options))
            {
                var service = new DirectoryLookupService(context);

                //When
                var result = await service.InsertCompany(model);

                //Then
                Assert.True(result.Success);

                var actual = await context.Company.FindAsync(((Company)result.Tag).Id);

                Assert.Equal(model.Name, actual.Name);
                Assert.Equal(model.CommissionPolicyNumberPrefixes, actual.CommissionPolicyNumberPrefixes);
            }
        }
Exemple #4
0
        public async Task ImportClient_Update_LastNameAndDateOfBirth()
        {
            var options = TestHelper.GetDbContext("ImportClient_Update_LastNameAndDateOfBirth");

            var user1 = TestHelper.InsertUserDetailed(options);

            var mem1 = new ClientEntity
            {
                Id             = Guid.NewGuid(),
                ClientTypeId   = ClientType.CLIENT_TYPE_INDIVIDUAL,
                OrganisationId = user1.Organisation.Id
            };

            var mem2 = new ClientEntity
            {
                Id             = Guid.NewGuid(),
                ClientTypeId   = ClientType.CLIENT_TYPE_INDIVIDUAL,
                FirstName      = "FN 1",
                LastName       = "van Jones",
                IdNumber       = "8210035032082",
                DateOfBirth    = new DateTime(1982, 10, 3),
                OrganisationId = user1.Organisation.Id
            };

            using (var context = new DataContext(options))
            {
                context.Client.Add(mem1);
                context.Client.Add(mem2);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, null, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    FirstName   = "FN 1 Updated",
                    LastName    = mem2.LastName,
                    DateOfBirth = mem2.DateOfBirth
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Client.FirstOrDefaultAsync(m => m.IdNumber == mem2.IdNumber);

                Assert.Equal(data.FirstName, actual.FirstName);
            }
        }
        public async Task InsertLicenseCategory()
        {
            var options = TestHelper.GetDbContext("InsertLicenseCategory");

            //Given
            var model = new LicenseCategory()
            {
                Name = "1",
                Code = "A",
            };

            using (var context = new DataContext(options))
            {
                var service = new DirectoryLookupService(context);

                //When
                var result = await service.InsertLicenseCategory(model);

                //Then
                Assert.True(result.Success);

                var actual = await context.LicenseCategory.FindAsync(((LicenseCategory)result.Tag).Id);

                Assert.Equal(model.Name, actual.Name);
                Assert.Equal(model.Code, actual.Code);
            }
        }
Exemple #6
0
        public async Task ImportClient_Insert_With3MissingZeroOnIdNumber()
        {
            var options = TestHelper.GetDbContext("ImportClient_Insert_With3MissingZeroOnIdNumber");

            var user1 = TestHelper.InsertUserDetailed(options);

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, null, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber = "7287372085" //missing leading zero
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Client.FirstOrDefaultAsync(m => m.IdNumber == "0007287372085");

                Assert.NotNull(actual);
            }
        }
        public async Task GetCompanies()
        {
            var options = TestHelper.GetDbContext("GetCompanies");

            //Given
            var lkp1 = new CompanyEntity {
                Id = Guid.NewGuid(), Name = "A", CommissionPolicyNumberPrefixes = new List <string>()
                {
                    "pre_1"
                }
            };
            var lkp2 = new CompanyEntity {
                Id = Guid.NewGuid(), Name = "B", CommissionPolicyNumberPrefixes = new List <string>()
                {
                    "pre_2"
                }
            };
            var lkp3 = new CompanyEntity {
                Id = Guid.NewGuid(), Name = "C", CommissionPolicyNumberPrefixes = new List <string>()
                {
                    "pre_3"
                }
            };

            using (var context = new DataContext(options))
            {
                //Jumbled order
                context.Company.Add(lkp2);
                context.Company.Add(lkp1);
                context.Company.Add(lkp3);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var service = new DirectoryLookupService(context);

                //When
                var actual = await service.GetCompanies();

                //Then
                Assert.Equal(3, actual.Count);

                var actual1 = actual[0];
                Assert.Equal(lkp1.Id, actual1.Id);
                Assert.Equal(lkp1.Name, actual1.Name);
                Assert.Equal(lkp1.CommissionPolicyNumberPrefixes, actual1.CommissionPolicyNumberPrefixes);

                var actual2 = actual[1];
                Assert.Equal(lkp2.Id, actual2.Id);

                var actual3 = actual[2];
                Assert.Equal(lkp3.Id, actual3.Id);
            }
        }
Exemple #8
0
        public async Task ImportClient_InsertPolicy_CheckUserAlias()
        {
            var options = TestHelper.GetDbContext("ImportClient_InsertPolicy_CheckUserAlias");

            var organisation = TestHelper.InsertOrganisation(options);

            var user = new UserEdit
            {
                Id        = Guid.NewGuid(),
                FirstName = "Dean",
                LastName  = "van Niekerk",
                Aliases   = new List <string>()
                {
                    "DJVANNiekerk"
                }
            };

            var user1 = TestHelper.InsertUserDetailed(options, organisation, user);

            var company = TestHelper.InsertCompany(options);

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var policyService          = new PolicyService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, policyService, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber           = "12345",
                    LastName           = "LN",
                    PolicyNumber       = "987654",
                    PolicyCompanyId    = company.Id,
                    PolicyUserFullName = "DjvanNiekerk"
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Policy.FirstOrDefaultAsync(m => m.Number == data.PolicyNumber);

                Assert.Equal(data.PolicyCompanyId, actual.CompanyId);
                Assert.Equal(user1.User.Id, actual.UserId);
            }
        }
Exemple #9
0
        public async Task ImportClient_Update_MatchOnShortIdNumber()
        {
            var options = TestHelper.GetDbContext("ImportClient_Update_MatchOnShortIdNumber");

            var user1 = TestHelper.InsertUserDetailed(options);
            var user2 = TestHelper.InsertUserDetailed(options, user1.Organisation);

            var mem = new ClientEntity
            {
                Id             = Guid.NewGuid(),
                ClientTypeId   = ClientType.CLIENT_TYPE_INDIVIDUAL,
                LastName       = "LN 1",
                IdNumber       = "8201015800184",
                OrganisationId = user1.Organisation.Id
            };

            using (var context = new DataContext(options))
            {
                context.Client.Add(mem);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, null, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber = "8201015800085",
                    LastName = "LN updated",
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Client.FirstOrDefaultAsync(m => m.Id == mem.Id);

                Assert.Equal(user1.Organisation.Id, actual.OrganisationId);
                Assert.Equal(data.LastName, actual.LastName);
            }
        }
Exemple #10
0
        public async Task ImportClient_InsertPolicy()
        {
            var options = TestHelper.GetDbContext("ImportClient_InsertPolicy");

            var user1 = TestHelper.InsertUserDetailed(options);

            var policyType1 = TestHelper.InsertPolicyType(options);
            var policyType2 = TestHelper.InsertPolicyType(options);

            var company = TestHelper.InsertCompany(options);

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var policyService          = new PolicyService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, policyService, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber           = "12345",
                    LastName           = "LN",
                    PolicyNumber       = "987654",
                    PolicyCompanyId    = company.Id,
                    PolicyTypeCode     = policyType2.Code,
                    PolicyPremium      = 5000,
                    PolicyStartDate    = DateTime.Now,
                    PolicyUserFullName = $"{user1.User.FirstName} {user1.User.LastName}"
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Policy.FirstOrDefaultAsync(m => m.Number == data.PolicyNumber);

                Assert.Equal(data.PolicyCompanyId, actual.CompanyId);
                Assert.Equal(user1.User.Id, actual.UserId);
                Assert.Equal(data.PolicyPremium, actual.Premium);
                Assert.Equal(data.PolicyStartDate, actual.StartDate);
                Assert.Equal(policyType2.Id, actual.PolicyTypeId);
            }
        }
Exemple #11
0
        public async Task ImportClient_Update_WithAlternateIdNumber()
        {
            var options = TestHelper.GetDbContext("ImportClient_Update_WithAlternateIdNumber");

            var user1 = TestHelper.InsertUserDetailed(options);

            var mem = new ClientEntity
            {
                Id                = Guid.NewGuid(),
                FirstName         = "FN 1",
                LastName          = "LN 1",
                AlternateIdNumber = "123456",
                OrganisationId    = user1.Organisation.Id
            };

            using (var context = new DataContext(options))
            {
                context.Client.Add(mem);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, null, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber = "123456", //Not a valid id number so should be treated as a passport number
                    LastName = "LN updated"
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Client.FirstOrDefaultAsync(m => m.AlternateIdNumber == data.IdNumber);

                Assert.Equal(data.LastName, actual.LastName);
            }
        }
Exemple #12
0
        public async Task ImportClient_Update_MatchOnPolicyNumber()
        {
            var options = TestHelper.GetDbContext("ImportClient_Update_MatchOnPolicyNumber");

            var user1 = TestHelper.InsertUserDetailed(options);
            var user2 = TestHelper.InsertUserDetailed(options, user1.Organisation);

            var client2 = TestHelper.InsertClient(options, user1.Organisation);
            var client1 = TestHelper.InsertClient(options, user1.Organisation, "8210035032082");

            var company = TestHelper.InsertCompany(options);

            var policy2 = TestHelper.InsertPolicy(options, client2, user1, company.Id);
            var policy1 = TestHelper.InsertPolicy(options, client1, user1, company.Id);

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var policyService          = new PolicyService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, policyService, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber           = "",
                    LastName           = "LN updated",
                    PolicyNumber       = policy1.Number,
                    PolicyCompanyId    = company.Id,
                    PolicyUserFullName = user1.User.FirstName + " " + user1.User.LastName
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Client.FirstOrDefaultAsync(m => m.Id == client1.Client.Id);

                Assert.Equal(user1.Organisation.Id, actual.OrganisationId);
                Assert.Equal(data.LastName, actual.LastName);
            }
        }
        public async Task GetUserTypes()
        {
            var options = TestHelper.GetDbContext("GetUserTypes");

            //Given
            var lkp1 = new UserTypeEntity {
                Id = Guid.NewGuid(), Name = "A", DisplayOrder = 1
            };
            var lkp2 = new UserTypeEntity {
                Id = Guid.NewGuid(), Name = "B", DisplayOrder = 2
            };
            var lkp3 = new UserTypeEntity {
                Id = Guid.NewGuid(), Name = "C", DisplayOrder = 3
            };

            using (var context = new DataContext(options))
            {
                //Jumbled order
                context.UserType.Add(lkp2);
                context.UserType.Add(lkp1);
                context.UserType.Add(lkp3);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var service = new DirectoryLookupService(context);

                //When
                var actual = await service.GetUserTypes();

                //Then
                Assert.Equal(3, actual.Count);

                var actual1 = actual[0];
                Assert.Equal(lkp1.Id, actual1.Id);
                Assert.Equal(lkp1.Name, actual1.Name);
                Assert.Equal(lkp1.DisplayOrder, actual1.DisplayOrder);

                var actual2 = actual[1];
                Assert.Equal(lkp2.Id, actual2.Id);

                var actual3 = actual[2];
                Assert.Equal(lkp3.Id, actual3.Id);
            }
        }
        public async Task GetLicenseCategories()
        {
            var options = TestHelper.GetDbContext("GetLicenseCategories");

            //Given
            var lkp1 = new LicenseCategoryEntity {
                Id = Guid.NewGuid(), Name = "A", Code = "1.0"
            };
            var lkp2 = new LicenseCategoryEntity {
                Id = Guid.NewGuid(), Name = "B", Code = "2.0"
            };
            var lkp3 = new LicenseCategoryEntity {
                Id = Guid.NewGuid(), Name = "C", Code = "3.0"
            };

            using (var context = new DataContext(options))
            {
                //Jumbled order
                context.LicenseCategory.Add(lkp2);
                context.LicenseCategory.Add(lkp1);
                context.LicenseCategory.Add(lkp3);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var service = new DirectoryLookupService(context);

                //When
                var actual = await service.GetLicenseCategories();

                //Then
                Assert.Equal(3, actual.Count);

                var actual1 = actual[0];
                Assert.Equal(lkp1.Id, actual1.Id);
                Assert.Equal(lkp1.Name, actual1.Name);
                Assert.Equal(lkp1.Code, actual1.Code);

                var actual2 = actual[1];
                Assert.Equal(lkp2.Id, actual2.Id);

                var actual3 = actual[2];
                Assert.Equal(lkp3.Id, actual3.Id);
            }
        }
        public async Task UpdateCompany()
        {
            var options = TestHelper.GetDbContext("UpdateCompany");

            //Given
            var lkp1 = new CompanyEntity {
                Id = Guid.NewGuid(), Name = "1", CommissionPolicyNumberPrefixes = new List <string>()
                {
                    "pre_1"
                }
            };

            using (var context = new DataContext(options))
            {
                context.Company.Add(lkp1);

                context.SaveChanges();
            }

            var model = new Company()
            {
                Id   = lkp1.Id,
                Name = "1 Updated",
                CommissionPolicyNumberPrefixes = new List <string>()
                {
                    "pre_1", "pre_new"
                }
            };

            using (var context = new DataContext(options))
            {
                var service = new DirectoryLookupService(context);

                //When
                var result = await service.UpdateCompany(model);

                //Then
                Assert.True(result.Success);

                var actual = await context.Company.FindAsync(model.Id);

                Assert.Equal(model.Name, actual.Name);
                Assert.Equal(model.CommissionPolicyNumberPrefixes, actual.CommissionPolicyNumberPrefixes);
            }
        }
Exemple #16
0
        public async Task ImportClient_Insert()
        {
            var options = TestHelper.GetDbContext("ImportClient_Insert");

            var user1 = TestHelper.InsertUserDetailed(options);

            var clientType = TestHelper.InsertClientTypeIndividual(options);

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, null, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber       = "821003 5032 082",
                    FirstName      = "FN",
                    LastName       = "LN",
                    TaxNumber      = "987654",
                    DateOfBirth    = DateTime.Now,
                    ClientTypeCode = clientType.Code
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Client.FirstOrDefaultAsync(m => m.IdNumber == "8210035032082");

                Assert.Null(actual.AlternateIdNumber);
                Assert.Equal(clientType.Id, actual.ClientTypeId);
                Assert.Equal(user1.Organisation.Id, actual.OrganisationId);
                Assert.Equal(data.LastName, actual.LastName);
                Assert.Equal(data.FirstName, actual.FirstName);
                Assert.Equal(data.TaxNumber, actual.TaxNumber);
                Assert.Equal(data.DateOfBirth, actual.DateOfBirth);
            }
        }
Exemple #17
0
        public async Task ImportClient_Insert_NoIdButHasPolicyNumber_UnknowClientType()
        {
            var options = TestHelper.GetDbContext("ImportClient_Insert_NoIdButHasPolicyNumber_UnknowClientType");

            var user1 = TestHelper.InsertUserDetailed(options);

            var company = TestHelper.InsertCompany(options);

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var policyService          = new PolicyService(context, auditService);
                var contactService         = new ContactService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, policyService, contactService, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber           = "",
                    PolicyNumber       = "123456798",
                    LastName           = "Some Business",
                    PolicyCompanyId    = company.Id,
                    PolicyUserFullName = user1.User.FirstName + " " + user1.User.LastName
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Client.FirstOrDefaultAsync();

                Assert.Null(actual.IdNumber);
                Assert.Equal(data.LastName, actual.LastName);
                Assert.Equal(ClientType.CLIENT_TYPE_UNKNOWN_ENTITY, actual.ClientTypeId);
            }
        }
        public async Task UpdateLicenseCategory()
        {
            var options = TestHelper.GetDbContext("UpdateLicenseCategory");

            //Given
            var lkp1 = new LicenseCategoryEntity {
                Id = Guid.NewGuid(), Name = "1", Code = "A"
            };

            using (var context = new DataContext(options))
            {
                context.LicenseCategory.Add(lkp1);

                context.SaveChanges();
            }

            var model = new LicenseCategory()
            {
                Id   = lkp1.Id,
                Name = "1 Updated",
                Code = "A Updated",
            };

            using (var context = new DataContext(options))
            {
                var service = new DirectoryLookupService(context);

                //When
                var result = await service.UpdateLicenseCategory(model);

                //Then
                Assert.True(result.Success);

                var actual = await context.LicenseCategory.FindAsync(model.Id);

                Assert.Equal(model.Name, actual.Name);
                Assert.Equal(model.Code, actual.Code);
            }
        }
Exemple #19
0
        public async Task ImportClient_InsertUnknownEntity()
        {
            var options = TestHelper.GetDbContext("ImportClient_InsertUnknownEntity");

            var user1 = TestHelper.InsertUserDetailed(options);

            var clientType = TestHelper.InsertClientTypeUnknown(options);

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, null, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    LastName       = "Unknown Here",
                    ClientTypeCode = clientType.Code
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Client.FirstOrDefaultAsync();

                Assert.Null(actual.AlternateIdNumber);
                Assert.Null(actual.FirstName);
                Assert.Equal(clientType.Id, actual.ClientTypeId);
                Assert.Equal(user1.Organisation.Id, actual.OrganisationId);
                Assert.Equal(data.LastName, actual.LastName);
            }
        }
        public async Task UpdateAdviceService()
        {
            var options = TestHelper.GetDbContext("UpdateAdviceService");

            //Given
            var lkp1 = new AdviceServiceEntity {
                Id = Guid.NewGuid(), Name = "1", DisplayOrder = 1
            };

            using (var context = new DataContext(options))
            {
                context.AdviceService.Add(lkp1);

                context.SaveChanges();
            }

            var model = new AdviceService()
            {
                Id           = lkp1.Id,
                Name         = "1 Updated",
                DisplayOrder = 2
            };

            using (var context = new DataContext(options))
            {
                var service = new DirectoryLookupService(context);

                //When
                var result = await service.UpdateAdviceService(model);

                //Then
                Assert.True(result.Success);

                var actual = await context.AdviceService.FindAsync(model.Id);

                Assert.Equal(model.Name, actual.Name);
                Assert.Equal(model.DisplayOrder, actual.DisplayOrder);
            }
        }
        public async Task GetVATRate()
        {
            var options = TestHelper.GetDbContext("GetVATRate");

            //Given
            var lkp1 = new VATRateEntity {
                Id = Guid.NewGuid(), Rate = 14m, EndDate = new DateTime(2018, 4, 1).AddSeconds(-1)
            };
            var lkp2 = new VATRateEntity {
                Id = Guid.NewGuid(), Rate = 15m, StartDate = new DateTime(2018, 4, 1)
            };

            using (var context = new DataContext(options))
            {
                //Jumbled order
                context.VATRate.Add(lkp2);
                context.VATRate.Add(lkp1);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var service = new DirectoryLookupService(context);

                //When
                var actual = await service.GetVATRate(new DateTime(2018, 4, 1));

                //Then
                Assert.Equal(15m, actual);

                //When
                actual = await service.GetVATRate(new DateTime(2018, 3, 31));

                //Then
                Assert.Equal(14m, actual);
            }
        }
Exemple #22
0
        public async Task ImportClient_Insert_WithCellphone()
        {
            var options = TestHelper.GetDbContext("ImportClient_Insert_WithCellphone");

            var user1 = TestHelper.InsertUserDetailed(options);

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var contactService         = new ContactService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, null, contactService, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber  = "8210035032082",
                    Cellphone = "082-572 8997"
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var client = await context.Client.FirstOrDefaultAsync(m => m.IdNumber == data.IdNumber);

                var actual = await context.Contact.SingleOrDefaultAsync(c => c.ClientId == client.Id);

                Assert.Equal("0825728997", actual.Value);
                Assert.Equal(ContactType.CONTACT_TYPE_CELLPHONE, actual.ContactTypeId);
            }
        }
Exemple #23
0
        public async Task ImportCommission_InsertCommission_Split_Specific()
        {
            var options = TestHelper.GetDbContext("ImportCommission_InsertCommission_Split_Specific");

            var user1   = TestHelper.InsertUserDetailed(options);
            var client1 = TestHelper.InsertClient(options, user1.Organisation);
            var user2   = TestHelper.InsertUserDetailed(options, user1.Organisation);
            var user3   = TestHelper.InsertUserDetailed(options, user1.Organisation);

            var company   = TestHelper.InsertCompany(options);
            var statement = TestHelper.InsertCommissionStatement(options, user1.Organisation, company.Id);

            var commissionType = new CommissionTypeEntity
            {
                Id   = Guid.NewGuid(),
                Code = "gap_cover"
            };

            var policy1 = new PolicyEntity
            {
                Id            = Guid.NewGuid(),
                Number        = Guid.NewGuid().ToString(),
                CompanyId     = company.Id,
                ClientId      = client1.Client.Id,
                UserId        = user1.User.Id,
                NumberAliases = new List <string>(),
            };

            var csr1 = new CommissionSplitRuleEntity
            {
                Id        = Guid.NewGuid(),
                UserId    = user1.User.Id,
                Name      = "75/25 split",
                IsDefault = true, //Default
                Split     = new List <CommissionSplit>()
                {
                    new CommissionSplit()
                    {
                        UserId     = user2.User.Id,
                        Percentage = 75
                    },
                    new CommissionSplit()
                    {
                        UserId     = user3.User.Id,
                        Percentage = 25
                    }
                }
            };

            var csr2 = new CommissionSplitRuleEntity
            {
                Id        = Guid.NewGuid(),
                UserId    = user1.User.Id,
                Name      = "50/50 split",
                IsDefault = false, //Not Default
                Split     = new List <CommissionSplit>()
                {
                    new CommissionSplit()
                    {
                        UserId     = user2.User.Id,
                        Percentage = 50
                    },
                    new CommissionSplit()
                    {
                        UserId     = user3.User.Id,
                        Percentage = 50
                    }
                }
            };

            var csrp1 = new CommissionSplitRulePolicyEntity
            {
                Id       = Guid.NewGuid(),
                PolicyId = policy1.Id,
                CommissionSplitRuleId = csr2.Id
            };

            using (var context = new DataContext(options))
            {
                context.CommissionType.Add(commissionType);

                context.Policy.Add(policy1);

                context.CommissionSplitRule.Add(csr1);
                context.CommissionSplitRule.Add(csr2);

                context.CommissionSplitRulePolicy.Add(csrp1);

                context.SaveChanges();

                var auditService                     = new AuditServiceMock();
                var statementService                 = new CommissionStatementService(context, null, auditService);
                var lookupService                    = new DirectoryLookupService(context);
                var commissionLookupService          = new CommissionLookupService(context);
                var policyService                    = new PolicyService(context, auditService);
                var commissionSplitService           = new CommissionSplitService(context, auditService);
                var commissionSplitRulePolicyService = new CommissionSplitRulePolicyService(context, commissionSplitService, auditService);
                var commissionService                = new CommissionService(context, auditService);

                var bulkActions         = new Mock <IBulkActions>(MockBehavior.Strict);
                var insertedCommissions = new List <CommissionEntity>();
                bulkActions.Setup(c => c.BulkInsertCommissionsAsync(It.IsAny <DataContext>(), It.IsAny <IList <CommissionEntity> >()))
                .Callback((DataContext c, IList <CommissionEntity> l) => insertedCommissions = l.ToList())
                .Returns(Task.CompletedTask);

                var service = new CommissionImportService(
                    context,
                    bulkActions.Object,
                    statementService,
                    policyService,
                    lookupService,
                    commissionLookupService,
                    commissionSplitService,
                    commissionSplitRulePolicyService,
                    auditService);

                //When
                var import1 = new ImportCommission
                {
                    PolicyNumber       = policy1.Number,
                    CommissionTypeCode = commissionType.Code,
                    AmountIncludingVAT = "120",
                    VAT = "12"
                };

                var scope        = TestHelper.GetScopeOptions(user1);
                var importResult = (await service.ImportCommissions(scope, statement.Id, new List <ImportCommission>()
                {
                    import1
                }));

                var result = importResult.Results.Single();

                //Then
                Assert.True(result.Success);

                Assert.Equal(2, insertedCommissions.Count);

                var actual = insertedCommissions[0];
                Assert.Equal(policy1.Id, actual.PolicyId);
                Assert.Equal(commissionType.Id, actual.CommissionTypeId);
                Assert.Equal(60, actual.AmountIncludingVAT);
                Assert.Equal(6, actual.VAT);
                Assert.Equal(statement.Id, actual.CommissionStatementId);
                Assert.Equal(import1, actual.SourceData);

                actual = insertedCommissions[1];
                Assert.Equal(policy1.Id, actual.PolicyId);
                Assert.Equal(commissionType.Id, actual.CommissionTypeId);
                Assert.Equal(60, actual.AmountIncludingVAT);
                Assert.Equal(6, actual.VAT);
                Assert.Equal(statement.Id, actual.CommissionStatementId);
                Assert.Equal(import1, actual.SourceData);
            }
        }
Exemple #24
0
        public async Task ImportClient_Update_WithContacts()
        {
            var options = TestHelper.GetDbContext("ImportClient_Update_WithContacts");

            var user1 = TestHelper.InsertUserDetailed(options);

            var mem = new ClientEntity
            {
                Id             = Guid.NewGuid(),
                ClientTypeId   = ClientType.CLIENT_TYPE_INDIVIDUAL,
                IdNumber       = "8210035032082",
                OrganisationId = user1.Organisation.Id
            };

            var contact1 = new ContactEntity
            {
                ClientId      = mem.Id,
                ContactTypeId = ContactType.CONTACT_TYPE_EMAIL,
                Value         = "*****@*****.**"
            };

            var contact2 = new ContactEntity
            {
                ClientId      = mem.Id,
                ContactTypeId = ContactType.CONTACT_TYPE_CELLPHONE,
                Value         = "0825728997"
            };

            using (var context = new DataContext(options))
            {
                context.Client.Add(mem);
                context.Contact.Add(contact1);
                context.Contact.Add(contact2);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var contactService         = new ContactService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, null, contactService, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber  = "8210035032082",
                    Email     = contact1.Value,
                    Cellphone = "082 572-8997"
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var client = await context.Client.FirstOrDefaultAsync(m => m.IdNumber == data.IdNumber);

                var contacts = await context.Contact.Where(c => c.ClientId == client.Id).ToListAsync();

                Assert.Equal(2, contacts.Count);
                var actual = contacts.First();
                Assert.Equal(data.Email, actual.Value);
                Assert.Equal(ContactType.CONTACT_TYPE_EMAIL, actual.ContactTypeId);

                actual = contacts.Last();
                Assert.Equal(contact2.Value, actual.Value);
                Assert.Equal(ContactType.CONTACT_TYPE_CELLPHONE, actual.ContactTypeId);
            }
        }
Exemple #25
0
        public async Task ImportCommission_InsertCommission_NegitiveAmmount()
        {
            var options = TestHelper.GetDbContext("ImportCommission_InsertCommission_NegitiveAmmount");

            var user1   = TestHelper.InsertUserDetailed(options);
            var client1 = TestHelper.InsertClient(options, user1.Organisation);

            var company   = TestHelper.InsertCompany(options);
            var statement = TestHelper.InsertCommissionStatement(options, user1.Organisation, company.Id);

            var commissionType = new CommissionTypeEntity
            {
                Id   = Guid.NewGuid(),
                Code = "gap_cover"
            };

            var policy1 = new PolicyEntity
            {
                Id            = Guid.NewGuid(),
                Number        = Guid.NewGuid().ToString(),
                CompanyId     = company.Id,
                ClientId      = client1.Client.Id,
                UserId        = user1.User.Id,
                NumberAliases = new List <string>(),
            };

            using (var context = new DataContext(options))
            {
                context.CommissionType.Add(commissionType);
                context.Policy.Add(policy1);
                context.SaveChanges();

                var auditService                     = new AuditServiceMock();
                var statementService                 = new CommissionStatementService(context, null, auditService);
                var lookupService                    = new DirectoryLookupService(context);
                var commissionLookupService          = new CommissionLookupService(context);
                var policyService                    = new PolicyService(context, auditService);
                var commissionSplitService           = new CommissionSplitService(context, auditService);
                var commissionSplitRulePolicyService = new CommissionSplitRulePolicyService(context, commissionSplitService, auditService);
                var commissionService                = new CommissionService(context, auditService);

                var bulkActions         = new Mock <IBulkActions>(MockBehavior.Strict);
                var insertedCommissions = new List <CommissionEntity>();
                bulkActions.Setup(c => c.BulkInsertCommissionsAsync(It.IsAny <DataContext>(), It.IsAny <IList <CommissionEntity> >()))
                .Callback((DataContext c, IList <CommissionEntity> l) => insertedCommissions = l.ToList())
                .Returns(Task.CompletedTask);

                var service = new CommissionImportService(
                    context,
                    bulkActions.Object,
                    statementService,
                    policyService,
                    lookupService,
                    commissionLookupService,
                    commissionSplitService,
                    commissionSplitRulePolicyService,
                    auditService);

                //When
                var import1 = new ImportCommission
                {
                    PolicyNumber       = policy1.Number,
                    CommissionTypeCode = commissionType.Code,
                    AmountIncludingVAT = "-100",
                    VAT = "-14"
                };

                var scope        = TestHelper.GetScopeOptions(user1);
                var importResult = (await service.ImportCommissions(scope, statement.Id, new List <ImportCommission>()
                {
                    import1
                }));

                var result = importResult.Results.Single();

                //Then
                Assert.True(result.Success);

                var actual = insertedCommissions.Single();
                Assert.Equal(policy1.Id, actual.PolicyId);
                Assert.Equal(commissionType.Id, actual.CommissionTypeId);
                Assert.Equal(-100, actual.AmountIncludingVAT);
                Assert.Equal(-14, actual.VAT);
                Assert.Equal(statement.Id, actual.CommissionStatementId);
                Assert.Equal(import1, actual.SourceData);
                Assert.Equal(policy1.UserId, actual.UserId);
                Assert.Null(actual.SplitGroupId);
            }
        }
Exemple #26
0
        public async Task ImportCommission_NoMapping_SetCommisionType()
        {
            var options = TestHelper.GetDbContext("ImportCommission_SetCommisionType");

            var user1     = TestHelper.InsertUserDetailed(options);
            var statement = TestHelper.InsertCommissionStatement(options, user1.Organisation);

            var commissionType = new CommissionTypeEntity
            {
                Id   = Guid.NewGuid(),
                Code = "gap_cover"
            };

            using (var context = new DataContext(options))
            {
                context.CommissionType.Add(commissionType);
                context.SaveChanges();

                var auditService                     = new AuditServiceMock();
                var statementService                 = new CommissionStatementService(context, null, auditService);
                var lookupService                    = new DirectoryLookupService(context);
                var commissionLookupService          = new CommissionLookupService(context);
                var commissionSplitService           = new CommissionSplitService(context, auditService);
                var commissionSplitRulePolicyService = new CommissionSplitRulePolicyService(context, commissionSplitService, auditService);
                var policyService                    = new PolicyService(context, auditService);

                var bulkActions    = new Mock <IBulkActions>(MockBehavior.Strict);
                var insertedErrors = new List <CommissionErrorEntity>();
                bulkActions.Setup(c => c.BulkInsertCommissionErrorsAsync(It.IsAny <DataContext>(), It.IsAny <IList <CommissionErrorEntity> >()))
                .Callback((DataContext c, IList <CommissionErrorEntity> l) => insertedErrors = l.ToList())
                .Returns(Task.CompletedTask);

                var service = new CommissionImportService(
                    context,
                    bulkActions.Object,
                    statementService,
                    policyService,
                    lookupService,
                    commissionLookupService,
                    commissionSplitService,
                    commissionSplitRulePolicyService,
                    auditService);

                //When
                var import1 = new ImportCommission
                {
                    PolicyNumber       = "123  456",  // has spaces, should be removed
                    CommissionTypeCode = "gap_cover", //existing cover
                    AmountIncludingVAT = "100",
                    VAT = "14"
                };

                var scope        = TestHelper.GetScopeOptions(user1);
                var importResult = (await service.ImportCommissions(scope, statement.Id, new List <ImportCommission>()
                {
                    import1
                }));

                var result = importResult.Results.Single();

                //Then
                Assert.True(result.Success);
                Assert.Empty(result.ValidationFailures);

                //Check error record
                var actual = insertedErrors.Single();

                Assert.Null(actual.ClientId);
                Assert.Null(actual.PolicyId);
                Assert.Equal(commissionType.Id, actual.CommissionTypeId);

                Assert.Equal(statement.Id, actual.CommissionStatementId);

                import1.PolicyNumber = import1.PolicyNumber.TrimWhiteSpace();
                Assert.Equal(import1, actual.Data);
            }
        }
Exemple #27
0
        public async Task ImportClient_Update()
        {
            var options = TestHelper.GetDbContext("ImportClient_Update");

            var user1 = TestHelper.InsertUserDetailed(options);
            var user2 = TestHelper.InsertUserDetailed(options, user1.Organisation);

            var mem = new ClientEntity
            {
                Id             = Guid.NewGuid(),
                ClientTypeId   = ClientType.CLIENT_TYPE_INDIVIDUAL,
                FirstName      = "FN 1",
                LastName       = "LN 1",
                TaxNumber      = "987654",
                DateOfBirth    = DateTime.Now,
                IdNumber       = "8210035032082",
                OrganisationId = user1.Organisation.Id
            };

            using (var context = new DataContext(options))
            {
                context.Client.Add(mem);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, null, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber    = mem.IdNumber,
                    FirstName   = "FN updated",
                    LastName    = "LN updated",
                    TaxNumber   = "456789",
                    DateOfBirth = DateTime.Now.AddDays(-20),
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Client.FirstOrDefaultAsync(m => m.IdNumber == data.IdNumber);

                Assert.Equal(user1.Organisation.Id, actual.OrganisationId);
                Assert.Equal(mem.ClientTypeId, actual.ClientTypeId); //Should not have changed
                Assert.Equal(data.FirstName, actual.FirstName);
                Assert.Equal(data.LastName, actual.LastName);
                Assert.Equal(data.TaxNumber, actual.TaxNumber);
                Assert.Equal(data.DateOfBirth, actual.DateOfBirth);
            }
        }
Exemple #28
0
        public async Task ImportClient_UpdatePolicy()
        {
            var options = TestHelper.GetDbContext("ImportClient_UpdatePolicy");

            var user1   = TestHelper.InsertUserDetailed(options);
            var client1 = TestHelper.InsertClient(options, user1.Organisation, "8210035032082");

            var user2 = TestHelper.InsertUserDetailed(options, user1.Organisation);

            var policyType1 = TestHelper.InsertPolicyType(options);
            var policyType2 = TestHelper.InsertPolicyType(options);

            var company = TestHelper.InsertCompany(options);

            //Given
            var policyEntity1 = new PolicyEntity
            {
                Id           = Guid.NewGuid(),
                CompanyId    = company.Id,
                ClientId     = client1.Client.Id,
                UserId       = user2.User.Id,
                PolicyTypeId = policyType2.Id,
                Premium      = 2000,
                StartDate    = DateTime.Now,
                Number       = "123465"
            };

            using (var context = new DataContext(options))
            {
                context.Policy.Add(policyEntity1);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var auditService           = new AuditServiceMock();
                var clientService          = new ClientService(context, auditService);
                var policyService          = new PolicyService(context, auditService);
                var lookupService          = new ClientLookupService(context);
                var directoryLookupService = new DirectoryLookupService(context);
                var service = new ClientImportService(context, clientService, policyService, null, lookupService, directoryLookupService);

                //When
                var data = new ImportClient()
                {
                    IdNumber           = client1.Client.IdNumber,
                    LastName           = "LN",
                    PolicyNumber       = policyEntity1.Number,
                    PolicyCompanyId    = policyEntity1.CompanyId,
                    PolicyTypeCode     = policyType1.Code,
                    PolicyPremium      = 6000,
                    PolicyStartDate    = DateTime.Now.AddDays(-100),
                    PolicyUserFullName = $"{user1.User.FirstName} {user1.User.LastName}"
                };

                var scope = TestHelper.GetScopeOptions(user1);

                var result = await service.ImportClient(scope, data);

                //Then
                Assert.True(result.Success);

                var actual = await context.Policy.FirstOrDefaultAsync(m => m.Number == data.PolicyNumber);

                Assert.Equal(data.PolicyCompanyId, actual.CompanyId);
                Assert.Equal(user1.User.Id, actual.UserId);
                Assert.Equal(data.PolicyPremium, actual.Premium);
                Assert.Equal(data.PolicyStartDate, actual.StartDate);
                Assert.Equal(policyType1.Id, actual.PolicyTypeId);
            }
        }
Exemple #29
0
        public async Task ImportCommissions_ScopeCheck()
        {
            var options = TestHelper.GetDbContext("ImportCommissions_ScopeCheck");

            var user1     = TestHelper.InsertUserDetailed(options);
            var statement = TestHelper.InsertCommissionStatement(options, user1.Organisation);

            var user2 = TestHelper.InsertUserDetailed(options);

            using (var context = new DataContext(options))
            {
                var auditService                     = new AuditServiceMock();
                var lookupService                    = new DirectoryLookupService(context);
                var commissionLookupService          = new CommissionLookupService(context);
                var policyService                    = new PolicyService(context, auditService);
                var commissionSplitService           = new CommissionSplitService(context, auditService);
                var commissionSplitRulePolicyService = new CommissionSplitRulePolicyService(context, commissionSplitService, auditService);
                var statementService                 = new CommissionStatementService(context, null, auditService);

                var bulkActions = new Mock <IBulkActions>(MockBehavior.Strict);
                bulkActions.Setup(c => c.BulkInsertCommissionErrorsAsync(It.IsAny <DataContext>(), It.IsAny <IList <CommissionErrorEntity> >()))
                .Returns(Task.CompletedTask);

                var service = new CommissionImportService(
                    context,
                    bulkActions.Object,
                    statementService,
                    policyService,
                    lookupService,
                    commissionLookupService,
                    commissionSplitService,
                    commissionSplitRulePolicyService,
                    auditService);

                //When
                var import1 = new ImportCommission
                {
                    PolicyNumber       = "123456",
                    CommissionTypeCode = "gap_cover",
                    AmountIncludingVAT = "abc",
                    VAT = "zzz"
                };

                var imports = new List <ImportCommission>()
                {
                    import1
                };

                var scope  = TestHelper.GetScopeOptions(user2);
                var result = await service.ImportCommissions(scope, statement.Id, imports);

                //Then
                Assert.Equal(0, result.ImportCount);
                Assert.Equal(0, result.ErrorCount);
                Assert.Empty(result.Results);

                scope  = TestHelper.GetScopeOptions(user1);
                result = await service.ImportCommissions(scope, statement.Id, imports);

                //Then
                Assert.Equal(0, result.ImportCount);
                Assert.Equal(1, result.ErrorCount);
                Assert.Single(result.Results);
            }
        }