public AddAttributeSetResponseModel AddAttributeSet(VirtualCardModel virtualCard, AuctionHeaderModel auctionHeader) { AddAttributeSetResponseModel addAttributeSetResponse = default; using (ConsoleCapture capture = new ConsoleCapture()) { try { string loyaltyId = virtualCard?.LOYALTYIDNUMBER ?? string.Empty; AuctionHeader attributeSet = null; if (auctionHeader != null) { attributeSet = new AuctionHeader() { AuctionEventName = auctionHeader.AuctionEventName, AuctionPointType = auctionHeader.AuctionPointType, AuctionTxnType = auctionHeader.AuctionTxnType, CDRewardID = auctionHeader.CDRewardID, HeaderGPRpts = auctionHeader.HeaderGPRpts }; if (virtualCard != null) { attributeSet.AddTransientProperty("VcKey", virtualCard.VCKEY); } } var lwAddAttributeSet = lwSvc.AddAttributeSet(loyaltyId, attributeSet, String.Empty, out double time); if (lwAddAttributeSet != null) { addAttributeSetResponse = new AddAttributeSetResponseModel() { EarnedPoints = lwAddAttributeSet .EarnedPoints .Select(x => new EarnedPointResponseModel() { PointType = x.PointType, PointValue = (decimal)(x.PointValue ?? 0) }) .ToList() }; } } catch (LWClientException ex) { throw new LWServiceException(ex.Message, ex.ErrorCode); } catch (Exception ex) { throw new LWServiceException(ex.Message, -1); } finally { stepContext.AddAttachment(new Attachment("AddAttributeSet", capture.Output, Attachment.Type.Text)); } } return(addAttributeSetResponse); }
public static List <TxnHeaderModel> GenerateRandomTransactions(VirtualCardModel vc, IHertzProgram htzProgram, int numTransactions = 1, decimal amount = 100M) { List <TxnHeaderModel> output = new List <TxnHeaderModel>(); for (int i = 0; i < numTransactions; i++) { output.Add(GenerateTransaction(vc.LOYALTYIDNUMBER, checkInDate: DateTime.Now, checkOutDate: DateTime.Now.AddDays(-1), program: htzProgram, rentalCharges: amount)); } return(output); }
public static VirtualCardModel GenerateVirtualCard(MemberModel member) { VirtualCardModel vc = StrongRandom.GenerateRandom <VirtualCardModel>(); vc.IPCODE = member.IPCODE; vc.ISPRIMARY = 1; vc.STATUS = VirtualCardModel.Status.Active; return(vc); }
public void AddAttributeSet_Negative(MemberModel member, AuctionHeaderModel auctionHeaderRequestModel, int errorCode, string errorMessage) { MemberController memController = new MemberController(Database, TestStep); try { //Generate unique LIDs for each virtual card in the member member = memController.AssignUniqueLIDs(member); TestStep.Start($"Make AddMember Call", "Source Member should be added successfully"); MemberModel memberOut = memController.AddMember(member); AssertModels.AreEqualOnly(member, memberOut, MemberModel.BaseVerify); TestStep.Pass("Source Member was added successfully and member object was returned", memberOut.ReportDetail()); VirtualCardModel vc = memberOut.VirtualCards.First(); TestStep.Start($"Make AddAttributeSet Call", "AddAttributeSet call should return AddAttributeSet object"); LWServiceException exception = Assert.Throws <LWServiceException>(() => memController.AddAttributeSet(vc, auctionHeaderRequestModel), "Expected LWServiceException, exception was not thrown."); Assert.AreEqual(errorCode, exception.ErrorCode); Assert.IsTrue(exception.Message.Contains(errorMessage)); TestStep.Pass("AddAttributeSet call threw expected exception", exception.ReportDetail()); } catch (AssertModelEqualityException ex) { TestStep.Fail(ex.Message, ex.ComparisonFailures); Assert.Fail(); } catch (Exception ex) { TestStep.Abort(ex.Message); Assert.Fail(); } }
public static MemberModel GenerateRandomMember(IHertzTier tier = null) { if (tier == null) { tier = HertzLoyalty.GoldPointsRewards.RegularGold; } MemberModel member = StrongRandom.GenerateRandom <MemberModel>(); member.MEMBERSTATUS = MemberModel.Status.Active; member.ISEMPLOYEE = 0; member.MemberDetails = GenerateMemberDetails(member, tier); member.MemberPreferences = GenerateMemberPreferences(member); VirtualCardModel vc = GenerateVirtualCard(member); member.VirtualCards = new List <VirtualCardModel>() { vc }; member.ALTERNATEID = vc.LOYALTYIDNUMBER; return(member); }
public void HertzTransferPoints_Positive(MemberModel memberSource, MemberModel memberDestionation, decimal points, IHertzTier tier, bool useRanum) { MemberController memController = new MemberController(Database, TestStep); try { //Generate unique LIDs for each virtual card in the member memberSource = memController.AssignUniqueLIDs(memberSource); string ranum; TestStep.Start($"Make AddMember Call", "Source Member should be added successfully"); MemberModel memberOutSource = memController.AddMember(memberSource); AssertModels.AreEqualOnly(memberSource, memberOutSource, MemberModel.BaseVerify); TestStep.Pass("Source Member was added successfully and member object was returned", memberOutSource.ReportDetail()); VirtualCardModel vcSource = memberOutSource.VirtualCards.First(); memberDestionation = memController.AssignUniqueLIDs(memberDestionation); TestStep.Start($"Make AddMember Call", "Destination Member should be added successfully"); MemberModel memberOutDestination = memController.AddMember(memberDestionation); AssertModels.AreEqualOnly(memberDestionation, memberOutDestination, MemberModel.BaseVerify); TestStep.Pass("Destination Member was added successfully and member object was returned", memberOutDestination.ReportDetail()); VirtualCardModel vcDestination = memberOutDestination.VirtualCards.First(); //Transactions are added to test the API with ranum and also to test the negative points scenario TestStep.Start($"Add Transaction to the source member", "Transactions added successfully"); vcSource.Transactions = TxnHeaderController.GenerateRandomTransactions(vcSource, tier.ParentProgram, 1, 500); if (useRanum) { ranum = vcSource.Transactions.Select(x => x.A_RANUM).First(); } else { ranum = null; } Assert.IsNotNull(vcSource.Transactions, "Expected populated transaction object, but transaction object returned was null"); TestStep.Pass("Transaction added to the source member", vcSource.Transactions.ReportDetail()); TestStep.Start("Update Existing Source Member with added transaction", "Source Member object should be returned from UpdateMember call"); MemberModel updatedMember = memController.UpdateMember(memberOutSource); Assert.IsNotNull(updatedMember, "Expected non null Member object to be returned"); TestStep.Pass("Member object returned from UpdateMember API call", updatedMember.ReportDetail()); var loyaltyIdSource = memberOutSource.VirtualCards.First().LOYALTYIDNUMBER; var loyaltyIdDestination = memberOutDestination.VirtualCards.First().LOYALTYIDNUMBER; var vckeySource = memberOutSource.VirtualCards.First().VCKEY.ToString(); var vckeyDestination = memberOutDestination.VirtualCards.First().VCKEY.ToString(); TestStep.Start("Get Account Summary from DB for Source Member", "Account Summary retrieved from DB"); MemberAccountSummaryModel memberAccountSummaryOutDbSourceInitial = memController.GetMemberAccountSummaryFromDB(vckeySource); Assert.IsNotNull(memberAccountSummaryOutDbSourceInitial, "Account Summary could not be retrieved from DB"); TestStep.Pass("Existing member was found", memberAccountSummaryOutDbSourceInitial.ReportDetail()); TestStep.Start("Get Account Summary from DB for Destination Member", "Account Summary retrieved from DB"); MemberAccountSummaryModel memberAccountSummaryOutDbDestinationInitial = memController.GetMemberAccountSummaryFromDB(vckeyDestination); Assert.IsNotNull(memberAccountSummaryOutDbDestinationInitial, "Account Summary could not be retrieved from DB"); TestStep.Pass("Existing member was found", memberAccountSummaryOutDbDestinationInitial.ReportDetail()); TestStep.Start($"Make HertzTransferPoints Call", "HertzTransferPoints call should return HertzTransferPoints object"); HertzTransferPointsResponseModel memberTransferPoints = memController.HertzTransferPoints(loyaltyIdSource, "csadmin", points.ToString(), loyaltyIdDestination, "automation"); Assert.IsNotNull(memberTransferPoints, "Expected populated HertzTransferPoints object, but HertzTransferPoints object returned was null"); TestStep.Pass("HertzTransferPoints object was returned", memberTransferPoints.ReportDetail()); TestStep.Start($"Verify CurrencyBalance of Source Member was decreased", "CurrencyBalance returned should be correct"); MemberAccountSummaryModel memberAccountSummaryOutDbSourceFinal = memController.GetMemberAccountSummaryFromDB(vckeySource); Assert.IsNotNull(memberAccountSummaryOutDbSourceFinal, "Account Summary could not be retrieved from DB"); Assert.AreEqual(memberAccountSummaryOutDbSourceInitial.CURRENCYBALANCE - points, memberAccountSummaryOutDbSourceFinal.CURRENCYBALANCE, $"CurrencyBalance wasn't decrease due TransferPoints"); TestStep.Pass("CurrencyBalance response is as expcted", memberAccountSummaryOutDbSourceFinal.ReportDetail()); TestStep.Start($"Verify CurrencyBalance of Destination Member was increased", "CurrencyBalance returned should be correct"); MemberAccountSummaryModel memberAccountSummaryOutDbDestinationFinal = memController.GetMemberAccountSummaryFromDB(vckeyDestination); Assert.IsNotNull(memberAccountSummaryOutDbDestinationFinal, "Account Summary could not be retrieved from DB"); Assert.AreEqual(memberAccountSummaryOutDbDestinationInitial.CURRENCYBALANCE + points, memberAccountSummaryOutDbDestinationFinal.CURRENCYBALANCE, $"CurrencyBalance wasn't decrease due TransferPoints"); TestStep.Pass("CurrencyBalance response is as expcted", memberAccountSummaryOutDbDestinationFinal.ReportDetail()); } catch (AssertionException ex) { TestStep.Fail(ex.Message); Assert.Fail(); } catch (LWServiceException ex) { TestStep.Fail(ex.Message, new[] { $"Error Code: {ex.ErrorCode}", $"Error Message: {ex.ErrorMessage}" }); Assert.Fail(); } catch (AssertModelEqualityException ex) { TestStep.Fail(ex.Message, ex.ComparisonFailures); Assert.Fail(); } catch (Exception ex) { TestStep.Abort(ex.Message); Assert.Fail(); } }
public void HertzAwardLoyaltyCurrency_Positive(MemberModel member, IHertzTier tier, string pointeventname, decimal points, bool useRanum) { MemberController memController = new MemberController(Database, TestStep); PointController pointController = new PointController(Database, TestStep); try { //Generate unique LIDs for each virtual card in the member member = memController.AssignUniqueLIDs(member); string ranum; TestStep.Start($"Make AddMember Call", "Member should be added successfully"); MemberModel memberOut = memController.AddMember(member); AssertModels.AreEqualOnly(member, memberOut, MemberModel.BaseVerify); TestStep.Pass("Member was added successfully and member object was returned", memberOut.ReportDetail()); VirtualCardModel vc = memberOut.VirtualCards.First(); //Transactions are added to test the API with ranum and also to test the negative points scenario TestStep.Start($"Add Transaction to the member", "Transactions added successfully"); vc.Transactions = TxnHeaderController.GenerateRandomTransactions(vc, tier.ParentProgram, 1, 200); if (useRanum) { ranum = vc.Transactions.Select(x => x.A_RANUM).First(); } else { ranum = null; } Assert.IsNotNull(vc.Transactions, "Expected populated transaction object, but transaction object returned was null"); TestStep.Pass("Transaction added to the member", vc.Transactions.ReportDetail()); TestStep.Start("Update Existing Member with added transaction", "Member object should be returned from UpdateMember call"); MemberModel updatedMember = memController.UpdateMember(memberOut); Assert.IsNotNull(updatedMember, "Expected non null Member object to be returned"); TestStep.Pass("Member object returned from UpdateMember API call", updatedMember.ReportDetail()); TestStep.Start("Find PointEventId in database", $"PointEventId should be found {pointeventname}"); IEnumerable <PointEventModel> pointEvent = pointController.GetPointEventIdsFromDb(pointeventname); decimal pointEventId = pointEvent.Select(x => x.POINTEVENTID).First(); Assert.IsTrue(pointEvent.Any(x => x.NAME.Equals(pointeventname)), "Expected pointevent name was not found in database"); TestStep.Pass("Pointevent name was found in the Database", pointEvent.ReportDetail()); var loyaltyId = memberOut.VirtualCards.First().LOYALTYIDNUMBER; TestStep.Start($"Make HertzAwardLoyaltyCurrency Call", "HertzAwardLoyaltyCurrency call should return HertzAwardLoyaltyCurrency object"); HertzAwardLoyaltyCurrencyResponseModel memberAwardLoyaltyCurrency = memController.HertzAwardLoyaltyCurrency(loyaltyId, "csadmin", points, Convert.ToInt64(pointEventId), "automation", ranum); Assert.IsNotNull(memberAwardLoyaltyCurrency, "Expected populated AwardLoyaltyCurrency object, but AwardLoyaltyCurrency object returned was null"); TestStep.Pass("HertzAwardLoyaltyCurrency object was returned", memberAwardLoyaltyCurrency.ReportDetail()); var vckey = memberOut.VirtualCards.First().VCKEY.ToString(); TestStep.Start("Get Account Summary from DB", "Account Summary retrieved from DB"); MemberAccountSummaryModel memberAccountSummaryOutDb = memController.GetMemberAccountSummaryFromDB(vckey); Assert.IsNotNull(memberAccountSummaryOutDb, "Account Summary could not be retrieved from DB"); TestStep.Pass("Existing member was found", memberAccountSummaryOutDb.ReportDetail()); TestStep.Start("Verify Points awarded matches the points in DB", "Points awarded matches the points in DB"); IEnumerable <PointTransactionModel> dbPointTransaction = pointController.GetPointTransactionsFromDb(decimal.Parse(vckey)).ToList(); Assert.IsNotNull(dbPointTransaction, "Expected populated PointTransaction object from database query, but PointTransaction object returned was null"); Assert.AreEqual(points, dbPointTransaction.Where(x => x.POINTEVENTID == pointEventId && x.POINTS == points).Select(x => x.POINTS).First(), $"Points awarded does not match database points{dbPointTransaction.Select(x => x.POINTS)} "); TestStep.Pass("Points awarded are added to the DB", dbPointTransaction.ReportDetail()); TestStep.Start($"Verify CurrencyBalance of HertzAwardLoyaltyCurrency", "CurrencyBalance returned should be correct"); Assert.AreEqual(dbPointTransaction.Sum(x => x.POINTS), memberAwardLoyaltyCurrency.CURRENCYBALANCE, $"CurrencyBalance does not match database points{dbPointTransaction.Select(x => x.POINTS)} "); Assert.AreEqual(0, memberAwardLoyaltyCurrency.CURRENCYTONEXTTIER, "CurrencyToNextTier does not match 0"); TestStep.Pass("CurrencyBalance response is as expcted", memberAwardLoyaltyCurrency.ReportDetail()); TestStep.Start("Compare Account Summary between DB and API", "Account Summary matches"); AssertModels.AreEqualWithAttribute(memberAccountSummaryOutDb, memberAwardLoyaltyCurrency); TestStep.Pass("Account Summary matches between DB and API", memberAccountSummaryOutDb.ReportDetail()); TestStep.Start($"Verify response of HertzAwardLoyaltyCurrency for GPR", "Response returned should be correct"); if (tier.ParentProgram.EarningPreference == "N1") { Assert.AreEqual(tier.RentalsToNextTier - vc.Transactions.Count(), memberAwardLoyaltyCurrency.RENTALSTONEXTTIER, $"RentalsToNextTier does not match {tier.RentalsToNextTier - vc.Transactions.Count()}"); Assert.AreEqual(tier.RevenueToNextTier - vc.Transactions.First().A_GRSREVNAMT, memberAwardLoyaltyCurrency.REVENUETONEXTTIER, $"RentalsToNextTier does not match {tier.RevenueToNextTier - vc.Transactions.First().A_GRSREVNAMT}"); Assert.AreEqual(vc.Transactions.Count(), memberAwardLoyaltyCurrency.TOTALRENTALSYTD, $"TotalRentalsYTD does not match {memberAwardLoyaltyCurrency.TOTALRENTALSYTD}"); Assert.AreEqual(vc.Transactions.Sum(x => x.A_GRSREVNAMT), memberAwardLoyaltyCurrency.TOTALREVENUEYTD, $"TotalRentalsYTD does not match {memberAwardLoyaltyCurrency.TOTALREVENUEYTD}"); Assert.AreEqual("Gold", memberAwardLoyaltyCurrency.CURRENTTIERNAME, $"CurrentTierName does not match {memberAwardLoyaltyCurrency.CURRENCYBALANCE}"); } TestStep.Pass("HertzAwardLoyaltyCurrency response is as expcted for GPR", memberAwardLoyaltyCurrency.ReportDetail()); } catch (AssertionException ex) { TestStep.Fail(ex.Message); Assert.Fail(); } catch (LWServiceException ex) { TestStep.Fail(ex.Message, new[] { $"Error Code: {ex.ErrorCode}", $"Error Message: {ex.ErrorMessage}" }); Assert.Fail(); } catch (AssertModelEqualityException ex) { TestStep.Fail(ex.Message, ex.ComparisonFailures); Assert.Fail(); } catch (Exception ex) { TestStep.Abort(ex.Message); Assert.Fail(); } }
public void AddAttributeSet_Positive(MemberModel member, AuctionHeaderModel auctionHeaderRequestModel, IHertzTier tier, bool useRanum) { MemberController memController = new MemberController(Database, TestStep); try { //Generate unique LIDs for each virtual card in the member member = memController.AssignUniqueLIDs(member); string ranum; TestStep.Start($"Make AddMember Call", "Source Member should be added successfully"); MemberModel memberOut = memController.AddMember(member); AssertModels.AreEqualOnly(member, memberOut, MemberModel.BaseVerify); TestStep.Pass("Source Member was added successfully and member object was returned", memberOut.ReportDetail()); VirtualCardModel vc = memberOut.VirtualCards.First(); //Transactions are added to test the API with ranum and also to test the negative points scenario TestStep.Start($"Add Transaction to the source member", "Transactions added successfully"); vc.Transactions = TxnHeaderController.GenerateRandomTransactions(vc, tier.ParentProgram, 1, 500); if (useRanum) { ranum = vc.Transactions.Select(x => x.A_RANUM).First(); } else { ranum = null; } Assert.IsNotNull(vc.Transactions, "Expected populated transaction object, but transaction object returned was null"); TestStep.Pass("Transaction added to the source member", vc.Transactions.ReportDetail()); TestStep.Start("Update Existing Source Member with added transaction", "Source Member object should be returned from UpdateMember call"); MemberModel updatedMember = memController.UpdateMember(memberOut); Assert.IsNotNull(updatedMember, "Expected non null Member object to be returned"); TestStep.Pass("Member object returned from UpdateMember API call", updatedMember.ReportDetail()); TestStep.Start($"Make AddAttributeSet Call", "AddAttributeSet call should return AddAttributeSet object"); AddAttributeSetResponseModel addAttributeSetResponseModel = memController.AddAttributeSet(vc, auctionHeaderRequestModel); Assert.IsNotNull(addAttributeSetResponseModel, "Expected populated AddAttributeSetResponseModel object, but AddAttributeSetResponseModel object returned was null"); Assert.IsNotNull(addAttributeSetResponseModel.EarnedPoints, "Expected populated EarnedPoints list object, but it was null"); TestStep.Pass("AddAttributeSetResponseModel object was returned", addAttributeSetResponseModel.EarnedPoints.ReportDetail()); TestStep.Start($"Verify AuctionHeader ", "AuctionHeader returned should be correct"); Assert.AreNotEqual(0, addAttributeSetResponseModel.EarnedPoints.Count); Assert.AreEqual(auctionHeaderRequestModel.HeaderGPRpts, Math.Abs(addAttributeSetResponseModel.EarnedPoints.FirstOrDefault().PointValue)); TestStep.Pass("AuctionHeader response is as expcted", addAttributeSetResponseModel.EarnedPoints.ReportDetail()); } catch (AssertionException ex) { TestStep.Fail(ex.Message); Assert.Fail(); } catch (LWServiceException ex) { TestStep.Fail(ex.Message, new[] { $"Error Code: {ex.ErrorCode}", $"Error Message: {ex.ErrorMessage}" }); Assert.Fail(); } catch (AssertModelEqualityException ex) { TestStep.Fail(ex.Message, ex.ComparisonFailures); Assert.Fail(); } catch (Exception ex) { TestStep.Abort(ex.Message); Assert.Fail(); } }
public void HTZUpdateTier_Positive(MemberModel member, IHertzTier newTier, DateTime newTierEndDate, string newMarketingCode, string csAgent) { MemberController memController = new MemberController(Database, TestStep); try { //Generate unique LIDs for each virtual card in the member member = memController.AssignUniqueLIDs(member); TestStep.Start($"Make AddMember Call", "Source Member should be added successfully"); MemberModel memberOut = memController.AddMember(member); AssertModels.AreEqualOnly(member, memberOut, MemberModel.BaseVerify); TestStep.Pass("Source Member was added successfully and member object was returned", memberOut.ReportDetail()); VirtualCardModel vcSource = memberOut.VirtualCards.First(); var loyaltyId = memberOut.VirtualCards.First().LOYALTYIDNUMBER; var vckey = memberOut.VirtualCards.First().VCKEY.ToString(); TestStep.Start($"Make HertzUpdateTier Call", "HertzUpdateTier call should return HertzUpdateTierResponse object"); HertzUpdateTierResponseModel memberUpdateTier = memController.HertzUpdateTier(loyaltyId, csAgent, newTier.Code, newTierEndDate.ToString("MM/dd/yyyy"), newMarketingCode); Assert.IsNotNull(memberUpdateTier, "Expected populated HertzUpdateTierResponseModel object, but HertzUpdateTierResponseModel object returned was null"); TestStep.Pass("HertzUpdateTierResponseModel object was returned", memberUpdateTier.ReportDetail()); var tierCodeResponse = string.Empty; switch (memberUpdateTier.CURRENTTIERNAME) { case "Platinum Select": tierCodeResponse = "PS"; break; case "Platinum VIP": tierCodeResponse = "VP"; break; case "Gold": tierCodeResponse = "RG"; break; case "Five Star": tierCodeResponse = "FG"; break; case "Presidents Circle": tierCodeResponse = "PC"; break; case "Platinum": tierCodeResponse = "PL"; break; } TestStep.Start($"Verify New Tier values", "New Tier values returned should be correct"); Assert.IsNotEmpty(tierCodeResponse); Assert.AreEqual(newTier.Code.ToUpper(), tierCodeResponse); Assert.IsNotNull(memberUpdateTier.A_TIERENDDATE); Assert.AreEqual(newTierEndDate.ToString("yyyy-MM-dd"), ((DateTime)memberUpdateTier.A_TIERENDDATE).ToString("yyyy-MM-dd")); Assert.AreEqual(newMarketingCode.ToUpper(), memberUpdateTier.A_MKTGPROGRAMID.ToUpper()); TestStep.Pass("New Tier values response is as expcted", memberUpdateTier.ReportDetail()); } catch (AssertionException ex) { TestStep.Fail(ex.Message); Assert.Fail(); } catch (LWServiceException ex) { TestStep.Fail(ex.Message, new[] { $"Error Code: {ex.ErrorCode}", $"Error Message: {ex.ErrorMessage}" }); Assert.Fail(); } catch (AssertModelEqualityException ex) { TestStep.Fail(ex.Message, ex.ComparisonFailures); Assert.Fail(); } catch (Exception ex) { TestStep.Abort(ex.Message); Assert.Fail(); } }