public void ThenIReceiveTheWelcomeKitEmail() { var host = TestSetup.TestAccountImapHost; var port = TestSetup.TestAccountImapPort; var email = TestSetup.TestAccountEmail; var password = TestSetup.TestAccountEmailPassword; var imis = Context <IMIS>(ContextKeys.IMIS); var pc = Ctx.PrimaryContact; var coId = PollUtils.Poll <IEnumerable <Name> >( $"Query name entry by company and primary: {pc.CompanyName} {pc.FirstName} {pc.LastName}", TestSetup.DbTimeout, TestSetup.DbPollInterval, () => imis.NamesByCompanyAndUser(pc.CompanyName, pc.FirstName, pc.LastName), x => x.Where(o => o.LAST_UPDATED > ImisStartTime).Count() > 0 ).First().CO_ID; PollUtils.Poll <bool>( $"Search Welcome Kit in inbox for CO_ID={coId}", 180, 30, () => { var mail = new Mail.MailClient(host, port, email, password); var r = mail.ReceivedWelcomeKit(Ctx.StartTime, coId, pc.CompanyName); mail.Disconnect(); return(r); }, x => x == true ).ShouldBeTrue(); }
public void ThenSubscriptionEntriesAreCreatedAsFollows(Table table) { var imis = Context <IMIS>(IMIS); var pc = Ctx.PrimaryContact; var coId = imis.NamesByCompanyAndUser(pc.CompanyName, pc.FirstName, pc.LastName).First().CO_ID; Console.WriteLine($"CO_ID={coId}"); var expectedCount = Ctx.NewAccount ? 1 : Ctx.Capacities.Count(); PollUtils.Poll <IEnumerable <Subscription> >( $"Querying subscriptions table for CO_ID={coId}", DB_TIMEOUT, DB_INTERVAL, () => imis.SubscriptionsForCompany(coId), x => table.Rows.All(row => x.Where(o => o.DATE_ADDED > ImisStartTime && o.PRODUCT_CODE == row["ProductCode"]) .Count() == Int32.Parse(row["Count"]) ) ); // Wait 10 more seconds just in case database changes further. System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10)); var subs = imis.SubscriptionsForCompany(coId).Where(o => o.DATE_ADDED >= ImisStartTime); var expectedTotal = table.Rows.Sum(o => Int32.Parse(o["Count"])); var extra = Ctx.NewAccount ? 0 : subs.Where(o => o.PRODUCT_CODE == "PC_AN_CAP").Count(); subs.Count().ShouldBe(expectedTotal + extra); foreach (var row in table.Rows) { subs.Where(o => o.PRODUCT_CODE == row["ProductCode"]) .Count().ShouldBe(Int32.Parse(row["Count"])); } }
public void ThenInNameTableFollowingEntriesAreCreated(Table table) { var imis = Context <IMIS>(IMIS); var pc = Ctx.PrimaryContact; var account = PollUtils.Poll <Account>( $"Get initial name entries since {ImisStartTime}", DB_TIMEOUT, DB_INTERVAL, () => new Account(imis, pc.CompanyName, pc.FirstName, pc.LastName), (acct) => table.Rows.All(row => { var n = Int32.Parse(row["Count"]); return(acct[row["MemberType"]] .Where(o => o.LAST_UPDATED >= ImisStartTime) .Count() >= n); }) ); account.ShouldNotBeNull(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10)); var coId = account["CM"].First().ID; account = new Account(imis, coId); foreach (var row in table.Rows) { var t = row["MemberType"]; var n = Int32.Parse(row["Count"]); account[t].Where(o => o.LAST_UPDATED >= ImisStartTime).Count().ShouldBe(n); } }
public void WhenICheckThisIdentifierAvailableInCompanyPrefixHoldTable() { var prefix = Setup.TestSetup.UiisContext.PrefixToVendOrHold; PollUtils.Poll( $"Querying held prefix {prefix}", 60, 5, () => Setup.TestSetup.UiisDb.GetHeldPrefixByValue(prefix), o => o.Count() > 0 ).First().Value.ShouldBe(prefix); }
public void ThenICheckThisPrefixIsNotInCompanyPrefixTable() { var prefix = Setup.TestSetup.UiisContext.PrefixToVendOrHold; PollUtils.Poll( $"Querying prefix {prefix}", 60, 5, () => Setup.TestSetup.UiisDb.GetPrefixByValue(prefix), o => o.Count() == 0 ).ShouldBeEmpty(); }
public void ThenICheckThisPrefixIsNotAvailableInCompanyPrefixHoldTable() { var prefix = Setup.TestSetup.UiisContext.PrefixToVendOrHold; Console.WriteLine($"prefix {prefix}"); PollUtils.Poll( $"Querying held prefix {prefix}", 60, 5, () => Setup.TestSetup.UiisDb.GetHeldPrefixByValue(prefix), o => o.Count() == 0 ).ShouldBeEmpty(); }
public void ThenISeeThisRangeInCompanyPrefixAvailableRangeTable() { var range = Setup.TestSetup.UiisContext.Range; var ars = PollUtils.Poll( $"Query available range for {range}", 60, 5, () => Setup.TestSetup.UiisDb.AvailableRangeByPredicate(range), xs => xs.Count() > 0 ); ars.Count().ShouldBe(1); }
public void ThenTheRangePredicateGetsRemovedFromCompanyPrefixRangeTable() { var range = Setup.TestSetup.UiisContext.Range; var ars = PollUtils.Poll( $"Query open range for {range}", 60, 5, () => Setup.TestSetup.UiisDb.OpenRangeByPredicate(range), xs => xs.Count() == 0 ); ars.Count().ShouldBe(0); }
public void ThenISeeInCompanyPrefixRangeTableAutoAssignIs1(int autoAssign) { var range = Setup.TestSetup.UiisContext.Range; var prs = PollUtils.Poll( $"Query open range for {range}", 60, 5, () => Setup.TestSetup.UiisDb.OpenRangeByPredicate(range), xs => xs.Count() > 0 ); prs.All(o => o.AutoAssign); }
public void ThenRelationshipEntriesAreCreatedCorrectly() { var imis = Context <IMIS>(IMIS); var pc = Ctx.PrimaryContact; PollUtils.Poll( $"Query relationships for company {pc.CompanyName}", DB_TIMEOUT, DB_INTERVAL, () => { var coId = imis.NamesByCompanyAndUser(pc.CompanyName, pc.FirstName, pc.LastName).First().CO_ID; return(imis.RelationshipsByCoId(coId)); }, (e) => { try { return(f(e)); } catch { return(false); }; } ); bool f(IEnumerable <Relationship> entries) { var keyRel = entries.Where((o) => o.RELATION_TYPE == "KEY").First(); var billRel = entries.Where((o) => o.RELATION_TYPE == "BILL").First(); var ceoRel = entries.Where((o) => o.RELATION_TYPE == "CEO").First(); var result = true; var coId = imis.NamesByCompanyAndUser(pc.CompanyName, pc.FirstName, pc.LastName).First().CO_ID; var names = imis.NamesByCoId(coId); var pName = names.Where(o => o.ID == keyRel.TARGET_ID).First(); result = result && pName.FIRST_NAME == pc.FirstName; result = result && pName.LAST_NAME == pc.LastName; result = keyRel.TARGET_ID == billRel.TARGET_ID; if (result == false) { return(false); } var ec = Ctx.ExecutiveContact; var eName = names.Where(o => o.ID == ceoRel.TARGET_ID).First(); result = result && eName.FIRST_NAME == ec.FirstName; result = result && eName.LAST_NAME == ec.LastName; return(result); } }
public void ThenTheRangePredicateGetAddedToCompanyPrefixRangeTable() { var range = Setup.TestSetup.UiisContext.Range; var ranges = PollUtils.Poll( $"Query open range for {range}", 60, 5, () => Setup.TestSetup.UiisDb.OpenRangeByPredicate(range), xs => xs.Count() > 0 ); ranges.Count().ShouldBe(1); }
public void ThenICheckThisPrefixInCompanyPrefixTable() { var page = new Pages.Confirmation(Setup.TestSetup.Driver); var prefix = page.GetVendedPrefix(); Console.WriteLine($"prefix = {prefix}"); PollUtils.Poll( $"Querying prefix {prefix}", 60, 5, () => Setup.TestSetup.UiisDb.GetPrefixByValue(prefix), o => o.Count() > 0 ).First().Value.ShouldBe(prefix); }
public void ThenInSubscriptionsTableBillingAmountsAreCorrect() { var imis = Context <IMIS>(IMIS); var pc = Ctx.PrimaryContact; var coId = imis.NamesByCompanyAndUser(pc.CompanyName, pc.FirstName, pc.LastName).First().CO_ID; Console.WriteLine($"CO_ID={coId}"); int expectedCount; if (Ctx.NewAccount) { expectedCount = 2; } else { var cm = imis.NamesByCoId(coId).Where(o => o.MEMBER_TYPE == "CM").First(); var multiplier = cm.PAID_THRU.Month == DateTime.Now.Month ? 2 : 3; expectedCount = multiplier * Ctx.Capacities.Count(); } var subs = PollUtils.Poll <IEnumerable <Subscription> >( $"Querying subscriptions table for CO_ID={coId}", DB_TIMEOUT, DB_INTERVAL, () => imis.SubscriptionsForCompany(coId), x => { var list = x.Where(o => o.DATE_ADDED >= ImisStartTime); if (!Ctx.NewAccount) { list = list.Where(o => o.PRODUCT_CODE != "PC_AN_CAP"); } return(list.Count() == expectedCount); } ).Where(o => o.DATE_ADDED >= ImisStartTime); var(fee1, fee2, fee3) = Ctx.BillingAmounts(); subs.Where(o => o.PRODUCT_CODE == "PC_AN_CAP" || o.PRODUCT_CODE == "PC_AN_CAP_A") .Select(o => o.BILL_AMOUNT) .Sum() .ShouldBeInRange(fee1 - 0.1, fee1 + 0.1); subs.Where(o => o.PRODUCT_CODE == "PC_AN_CAP1" || o.PRODUCT_CODE == "PC_AN_CAP_A1") .Select(o => o.BILL_AMOUNT) .Sum() .ShouldBeInRange(fee2 - 0.1, fee2 + 0.1); subs.Where(o => o.PRODUCT_CODE == "PC_AN_CAP_A2") .Select(o => o.BILL_AMOUNT) .Sum() .ShouldBeInRange(fee3 - 0.1, fee3 + 0.1); }
public void ThenInTransTableThePaymentIsAddedToABatch() { var imis = Context <IMIS>(IMIS); var pc = Ctx.PrimaryContact; var coId = imis.NamesByCompanyAndUser(pc.CompanyName, pc.FirstName, pc.LastName).First().CO_ID; var account = new Account(imis, coId); var n = Ctx.NewAccount ? 1 : Ctx.Capacities.Count(); var currentMonth = DateTime.Now.Month; var paidThruMonth = Ctx.NewAccount ? currentMonth : account.Company.PAID_THRU.Month; var m = currentMonth == paidThruMonth ? 2 : 3; var subs = PollUtils.Poll <IEnumerable <Subscription> >( $"Querying subscriptions table for CO_ID={coId} n={n * m}", DB_TIMEOUT, DB_INTERVAL, () => { var x = imis.SubscriptionsForCompany(coId).Where(o => o.DATE_ADDED > ImisStartTime); if (!Ctx.NewAccount) { x = x.Where(o => o.PRODUCT_CODE != "PC_AN_CAP"); } return(x); }, x => x.Count() == n * m ); var btIds = subs.Where(o => o.BT_ID != "").Select(o => o.BT_ID).Distinct(); btIds.Count().ShouldBe(n); foreach (var btId in btIds) { var trans = PollUtils.Poll <IEnumerable <Trans> >( $"Querying transactions table for BT_ID={btId}", DB_TIMEOUT, DB_INTERVAL, () => imis.TransactionForBtId(btId), (x) => x.Count() >= m + 1 ); foreach (var tran in trans.Where(o => o.PRODUCT_CODE != "")) { subs.Where(o => o.BT_ID == btId && o.PRODUCT_CODE == tran.PRODUCT_CODE) .Count() .ShouldBe(1); } trans.Where(o => o.PRODUCT_CODE == "").Count().ShouldBe(1); } }
public void ThenICheckThatVendedIdentifierMatchesMajorKeyInNameTable(string removeLeading0) { var page = new Pages.Confirmation(Setup.TestSetup.Driver); var account = Setup.TestSetup.UiisContext.TestAccount; var prefix = page.GetVendedPrefix(); if (!String.IsNullOrEmpty(removeLeading0)) { prefix = prefix.TrimStart('0'); } Console.WriteLine($"Vended Prefix = {prefix}"); var names = PollUtils.Poll( $"Querying account by ID {account.ID}", 60, 5, () => Setup.TestSetup.Imis.NamesByCoId(account.ID), xs => xs.Where(x => x.MAJOR_KEY == prefix).Count() > 0 ); names.Where(o => o.MAJOR_KEY == prefix).ShouldNotBeEmpty(); }
public void ThenIfCaseIsNewICheckThatEntityGLNIsNotCreatedInDemog_All_WTable(string case1) { if (case1 == "New") { var account = Setup.TestSetup.UiisContext.TestAccount; try { var gln = PollUtils.Poll( $"Querying entity GLN for coid={account.ID}", 60, 5, () => Setup.TestSetup.Imis.EntityGlnByCoId(account.ID), o => !String.IsNullOrEmpty(o) ); Assert.Fail($"entity GLN found: {gln}"); } catch (TimeoutException) { // success } } }
public void ThenIfCaseICheckThatDisplayedGLNWithDemog_All_WTable(string case1, string caseVal, string negation) { if (case1 == caseVal) { var page = new Pages.Confirmation(Setup.TestSetup.Driver); var displayedEntityGln = page.GetVendedEntityGLN(); var account = Setup.TestSetup.UiisContext.TestAccount; var entityGln = PollUtils.Poll( $"Querying entity GLN for coid={account.ID}", 60, 5, () => Setup.TestSetup.Imis.EntityGlnByCoId(account.ID), o => !String.IsNullOrEmpty(o) ); if (String.IsNullOrEmpty(negation)) { entityGln.ShouldBe(displayedEntityGln); } else { entityGln.ShouldNotBe(displayedEntityGln); } } }
public void ThenIfProratedIShouldSeePC_AN_CAP_AEntries(int n) { var imis = Context <IMIS>(IMIS); var pc = Ctx.PrimaryContact; var coId = imis.NamesByCompanyAndUser(pc.CompanyName, pc.FirstName, pc.LastName).First().CO_ID; var account = new Account(imis, coId); var subs = PollUtils.Poll <IEnumerable <Subscription> >( $"Getting a new subscription for CO_ID={coId}", DB_TIMEOUT, DB_INTERVAL, () => imis.SubscriptionsForCompany(coId).Where(o => o.DATE_ADDED > ImisStartTime), x => x.Count() > 0 ); var paidThruMonth = subs.First().BILL_THRU.Month; var currentMonth = DateTime.Now.Month; var prorated = currentMonth == paidThruMonth; if (prorated) { var table = new Table("ProductCode", "Count"); table.AddRow("PC_AN_CAP_A2", $"{n}"); ThenSubscriptionEntriesAreCreatedAsFollows(table); } }
public void ThenInIDMDatabaseCompanyUserAndClaimsAreCreatedCorrectly() { var pc = Ctx.PrimaryContact; var coId = Context <IMIS>(IMIS) .NamesByCompanyAndUser(pc.CompanyName, pc.FirstName, pc.LastName) .First() .CO_ID; var idm = Context <IDM>(IDM); var claims = PollUtils.Poll <IEnumerable <Claim> >( $"Querying IDM database with CO_ID={coId}", DB_TIMEOUT, DB_INTERVAL, () => idm.ClaimsByCoId(coId), x => x.Count() == 6 ); HashSet <string> expectedClaims = new HashSet <string> { "User Administrator", "CLAIM_DHGTN_ADMIN", "CLAIM_DHGLN_ADMIN", "CLAIM_DHGTN_C_01", "CLAIM_DHGLN_C_01" }; var createdClaims = new HashSet <string>(claims.Select(o => o.ClaimName)); expectedClaims.All(o => createdClaims.Contains(o)).ShouldBeTrue(); claims.All(o => o.CompanyName == pc.CompanyName).ShouldBeTrue(); // The following is not true in general. // Suppose someone created 2 company. If the user used the same primary email // but different first and/or last name, the IDM records retains the names // used for the first company. //claims.All(o => o.FirstName == pc.FirstName).ShouldBeTrue(); //claims.All(o => o.LastName == pc.LastName).ShouldBeTrue(); }