public void AddMemberPromotion_Negative(string loyaltyId, string promoCode, int errorCode, string errorMessage) { MemberController memController = new MemberController(Database, TestStep); PromotionController promoController = new PromotionController(Database, TestStep); try { if (!string.IsNullOrEmpty(promoCode) && promoCode.Equals("0000")) { TestStep.Start("Adding Member unique LoyaltyIds for each virtual card", "Unique LoyaltyIds should be assigned"); MemberModel createMember = MemberController.GenerateRandomMember(HertzLoyalty.GoldPointsRewards.RegularGold); createMember = memController.AssignUniqueLIDs(createMember); TestStep.Pass("Unique LoyaltyIds assigned", createMember.VirtualCards.ReportDetail()); loyaltyId = createMember.VirtualCards[0].LOYALTYIDNUMBER; TestStep.Start($"Make AddMember Call", $"Member with LID {loyaltyId} should be added successfully and member object should be returned"); MemberModel memberOut = memController.AddMember(createMember); AssertModels.AreEqualOnly(createMember, memberOut, MemberModel.BaseVerify); TestStep.Pass("Member was added successfully and member object was returned", memberOut.ReportDetail()); loyaltyId = memberOut.VirtualCards.First().LOYALTYIDNUMBER; } else if (promoCode == string.Empty) { TestStep.Start("Get Expired promotion from DB", "Expired promo found in DB"); IEnumerable <PromotionModel> promoOutDb = promoController.GetRandomExpiredPromotionFromDB(); Assert.Greater(promoOutDb.Count(), 0, "Expected one or more expired promotions from DB"); TestStep.Pass("Expired promotion found in DB", promoOutDb.ReportDetail()); promoCode = promoOutDb.First().CODE; errorMessage = $"Promotion {promoCode} is not valid anymore"; TestStep.Start("Adding Member unique LoyaltyIds for each virtual card", "Unique LoyaltyIds should be assigned"); MemberModel createMember = MemberController.GenerateRandomMember(HertzLoyalty.GoldPointsRewards.RegularGold); createMember = memController.AssignUniqueLIDs(createMember); TestStep.Pass("Unique LoyaltyIds assigned", createMember.VirtualCards.ReportDetail()); loyaltyId = createMember.VirtualCards[0].LOYALTYIDNUMBER; TestStep.Start($"Make AddMember Call", $"Member with LID {loyaltyId} should be added successfully and member object should be returned"); MemberModel memberOut = memController.AddMember(createMember); AssertModels.AreEqualOnly(createMember, memberOut, MemberModel.BaseVerify); TestStep.Pass("Member was added successfully and member object was returned", memberOut.ReportDetail()); } TestStep.Start("Make AddMemberPromotion Call", $"AddMemberPromotion call should throw exception with error code = {errorCode}"); LWServiceException exception = Assert.Throws <LWServiceException>(() => memController.AddMemberPromotion(loyaltyId, promoCode, null, null, null, null, null, null), "Expected LWServiceException, exception was not thrown."); Assert.AreEqual(errorCode, exception.ErrorCode, $"Expected Error Code: {errorCode}"); Assert.IsTrue(exception.Message.Contains(errorMessage), $"Expected Error Message to contain: {errorMessage}"); TestStep.Pass("AddMemberPromotion call threw expected exception", exception.ReportDetail()); } catch (AssertionException ex) { TestStep.Fail(ex.Message); Assert.Fail(); } catch (AssertModelEqualityException ex) { TestStep.Fail(ex.Message, ex.ComparisonFailures); Assert.Fail(); } catch (Exception ex) { TestStep.Abort(ex.Message); Assert.Fail(); } }