public void TestAddTenantSubGroupOk() { //SETUP var options = SqliteInMemory.CreateOptions <CompanyDbContext>(); using (var context = new CompanyDbContext(options, new FakeGetClaimsProvider("accessKey"))) { context.Database.EnsureCreated(); var rootCompanies = context.AddCompanyAndChildrenInDatabase(); // - West Coast -- var westCoast = rootCompanies.First().Children.Single(); //ATTEMPT SubGroup.AddTenantToDatabaseWithSaveChanges("Seattle", westCoast, context); //VERIFY var display = context.Tenants.IgnoreQueryFilters().Select(x => x.ToString()).ToList(); foreach (var line in display) { _output.WriteLine($"\"{line}\","); } display.ShouldEqual(new List <string> { "Company: Name = 4U Inc., DataKey = 1|", "SubGroup: Name = West Coast, DataKey = 1|2|", "SubGroup: Name = San Fran, DataKey = 1|2|3|", "RetailOutlet: Name = SF Dress4U, DataKey = 1|2|3|4*", "RetailOutlet: Name = SF Tie4U, DataKey = 1|2|3|5*", "RetailOutlet: Name = SF Shirt4U, DataKey = 1|2|3|6*", "SubGroup: Name = LA, DataKey = 1|2|7|", "RetailOutlet: Name = LA Dress4U, DataKey = 1|2|7|8*", "RetailOutlet: Name = LA Tie4U, DataKey = 1|2|7|9*", "RetailOutlet: Name = LA Shirt4U, DataKey = 1|2|7|a*", "SubGroup: Name = Seattle, DataKey = 1|2|b|", }); } }
public static List <Company> AddCompanyAndChildrenInDatabase(this CompanyDbContext context, params string[] companyDefinitions) { if (!companyDefinitions.Any()) { companyDefinitions = new[] { "4U Inc.|West Coast|San Fran|SF Dress4U, SF Tie4U, SF Shirt4U", "4U Inc.|West Coast|LA|LA Dress4U, LA Tie4U, LA Shirt4U" } } ; var companyDict = new Dictionary <string, Company>(); var subGroupsDict = new Dictionary <int, List <SubGroup> >(); foreach (var companyDefinition in companyDefinitions) { var hierarchyNames = companyDefinition.Split('|'); if (!companyDict.ContainsKey(hierarchyNames[0])) { companyDict[hierarchyNames[0]] = Company.AddTenantToDatabaseWithSaveChanges( hierarchyNames[0], PaidForModules.None, context); subGroupsDict.Clear(); } TenantBase parent = companyDict[hierarchyNames[0]]; for (int i = 1; i < hierarchyNames.Length; i++) { if (!subGroupsDict.ContainsKey(i)) { subGroupsDict[i] = new List <SubGroup>(); } if (i + 1 == hierarchyNames.Length) { //End, which are shops var shopNames = hierarchyNames[i].Split(',').Select(x => x.Trim()); foreach (var shopName in shopNames) { RetailOutlet.AddTenantToDatabaseWithSaveChanges(shopName, parent, context); } } else { //Groups SubGroup subGroup = null; if (subGroupsDict[i].Any(x => x.Name == hierarchyNames[i])) { subGroup = subGroupsDict[i].Single(x => x.Name == hierarchyNames[i]); } else { subGroup = SubGroup.AddTenantToDatabaseWithSaveChanges(hierarchyNames[i], parent, context); subGroupsDict[i].Add(subGroup); } parent = subGroup; } } } return(new List <Company>(companyDict.Values)); } }