public async void DeleteCreditCard_IdInDb_CallsSaveChangesAsync() { MemberCreditCard creditCardToDelete = new MemberCreditCard { Id = creditCardId }; Mock<IVeilDataAccess> dbMock = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<MemberCreditCard>> creditCardDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<MemberCreditCard>().AsQueryable()); creditCardDbSetStub. Setup(adb => adb.FindAsync(It.IsAny<Guid>())). ReturnsAsync(creditCardToDelete); creditCardDbSetStub. Setup(adb => adb.Remove(It.IsAny<MemberCreditCard>())). Returns<MemberCreditCard>(val => val); dbMock. Setup(db => db.MemberCreditCards). Returns(creditCardDbSetStub.Object); dbMock. Setup(db => db.SaveChangesAsync()). ReturnsAsync(1). Verifiable(); ManageController controller = CreateManageController(veilDataAccess: dbMock.Object); await controller.DeleteCreditCard(creditCardId); Assert.That( () => dbMock.Verify(db => db.SaveChangesAsync(), Times.Once), Throws.Nothing); }
/// <summary> /// Implements <see cref="IStripeService.CreateCreditCard"/> /// </summary> public MemberCreditCard CreateCreditCard(Member member, string stripeCardToken) { var newCard = new StripeCardCreateOptions { Source = new StripeSourceOptions { TokenId = stripeCardToken // Note: Adding Object = "card" will result in a generic stripe error } }; var cardService = new StripeCardService(); StripeCard card; try { card = cardService.Create(member.StripeCustomerId, newCard); } catch (StripeException ex) { throw HandleStripeException(ex); } int expiryMonth = int.Parse(card.ExpirationMonth); int expiryYear = int.Parse(card.ExpirationYear); MemberCreditCard newMemberCard = new MemberCreditCard { CardholderName = card.Name, ExpiryMonth = expiryMonth, ExpiryYear = expiryYear, Last4Digits = card.Last4, StripeCardId = card.Id, Member = member, MemberId = member.UserId }; return newMemberCard; }
public async void CreateCreditCard_SuccessfulCreate_RedirectsToManageCreditCards() { Member member = new Member { UserId = memberId, CreditCards = new List<MemberCreditCard>() }; MemberCreditCard creditCard = new MemberCreditCard(); string stripeCardToken = "stripeCardToken"; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable()); memberDbSetStub. Setup(mdb => mdb.FindAsync(memberId)). ReturnsAsync(member); dbStub. Setup(db => db.Members). Returns(memberDbSetStub.Object); dbStub. Setup(db => db.SaveChangesAsync()). ReturnsAsync(1); Mock<IStripeService> stripeServiceStub = new Mock<IStripeService>(); stripeServiceStub. Setup(s => s.CreateCreditCard(It.IsAny<Member>(), It.IsAny<string>())). Returns(creditCard); Mock<IGuidUserIdGetter> idGetterStub = TestHelpers.GetSetupIUserIdGetterFake(memberId); Mock<ControllerContext> contextStub = TestHelpers.GetSetupControllerContextFakeWithUserIdentitySetup(); ManageController controller = CreateManageController(veilDataAccess: dbStub.Object, idGetter: idGetterStub.Object, stripeService: stripeServiceStub.Object); controller.ControllerContext = contextStub.Object; var result = await controller.CreateCreditCard(stripeCardToken) as RedirectToRouteResult; Assert.That(result != null); Assert.That(result.RouteValues["Action"], Is.EqualTo(nameof(controller.ManageCreditCards))); }
public async void CreateCreditCard_StripeServiceSuccess_CallsSaveChangesAsync() { Member member = new Member { UserId = memberId, CreditCards = new List<MemberCreditCard>() }; MemberCreditCard creditCard = new MemberCreditCard(); string stripeCardToken = "stripeCardToken"; Mock<IVeilDataAccess> dbMock = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable()); memberDbSetStub. Setup(mdb => mdb.FindAsync(memberId)). ReturnsAsync(member); dbMock. Setup(db => db.Members). Returns(memberDbSetStub.Object); dbMock. Setup(db => db.SaveChangesAsync()). ReturnsAsync(1). Verifiable(); Mock<IStripeService> stripeServiceStub = new Mock<IStripeService>(); stripeServiceStub. Setup(s => s.CreateCreditCard(It.IsAny<Member>(), It.IsAny<string>())). Returns(creditCard); Mock<IGuidUserIdGetter> idGetterStub = TestHelpers.GetSetupIUserIdGetterFake(memberId); Mock<ControllerContext> contextStub = TestHelpers.GetSetupControllerContextFakeWithUserIdentitySetup(); ManageController controller = CreateManageController(veilDataAccess: dbMock.Object, idGetter: idGetterStub.Object, stripeService: stripeServiceStub.Object); controller.ControllerContext = contextStub.Object; await controller.CreateCreditCard(stripeCardToken); Assert.That( () => dbMock.Verify(db => db.SaveChangesAsync(), Times.Exactly(1)), Throws.Nothing); }
public async void CreateCreditCard_StripeServiceSuccess_AddsReturnedCreditCardToMembersCreditCards() { Member member = new Member { UserId = memberId, CreditCards = new List<MemberCreditCard>() }; MemberCreditCard creditCard = new MemberCreditCard { Id = new Guid("F406AB6C-CC58-4370-AB49-89D622C51768") }; string stripeCardToken = "stripeCardToken"; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable()); memberDbSetStub. Setup(mdb => mdb.FindAsync(memberId)). ReturnsAsync(member); dbStub. Setup(db => db.Members). Returns(memberDbSetStub.Object); Mock<IStripeService> stripeServiceStub = new Mock<IStripeService>(); stripeServiceStub. Setup(s => s.CreateCreditCard(It.IsAny<Member>(), It.IsAny<string>())). Returns(creditCard); Mock<IGuidUserIdGetter> idGetterStub = TestHelpers.GetSetupIUserIdGetterFake(memberId); Mock<ControllerContext> contextStub = TestHelpers.GetSetupControllerContextFakeWithUserIdentitySetup(); ManageController controller = CreateManageController(veilDataAccess: dbStub.Object, idGetter: idGetterStub.Object, stripeService: stripeServiceStub.Object); controller.ControllerContext = contextStub.Object; await controller.CreateCreditCard(stripeCardToken); Assert.That(member.CreditCards, Is.Not.Empty); Assert.That(member.CreditCards, Has.Member(creditCard)); }
public void SetupBase() { memberId = new Guid("59EF92BE-D71F-49ED-992D-DF15773DAF98"); addressId = new Guid("53BE47E4-0C74-4D49-97BB-7246A7880B39"); creditCardId = new Guid("D9A69026-E3DA-4748-816B-293D9BE3E43F"); cartProduct1Id = new Guid("3882D242-A62A-4E99-BA11-D6EF340C2EE8"); cartProduct2Id = new Guid("7413D131-7337-42DC-A7E4-1155EB91E8C9"); memberAddress = new MemberAddress { Address = new Address { City = "Waterloo", PostalCode = "N2L 6R2", StreetAddress = "445 Wes Graham Way" }, CountryCode = "CA", Country = new Country { CountryCode = "CA", CountryName = "Canada", FederalTaxRate = 0.05m }, ProvinceCode = "ON", Province = new Province { CountryCode = "CA", ProvinceCode = "ON", ProvincialTaxRate = 0.08m }, MemberId = memberId, Id = addressId }; game = new Game { Name = "A game" }; platform = new Platform { PlatformCode = "XONE", PlatformName = "Xbox One" }; cartProduct1 = new PhysicalGameProduct { Id = cartProduct1Id, NewWebPrice = 60.00m, ProductAvailabilityStatus = AvailabilityStatus.Available, ReleaseDate = new DateTime(635835582902643008L, DateTimeKind.Local), UsedWebPrice = 10.00m, Game = game, Platform = platform }; cartProduct2 = new PhysicalGameProduct { Id = cartProduct2Id, NewWebPrice = 59.99m, ProductAvailabilityStatus = AvailabilityStatus.Available, ReleaseDate = new DateTime(635837213100050176L, DateTimeKind.Local), Game = game, Platform = platform }; newProduct1CartItem = new CartItem { IsNew = true, MemberId = memberId, Product = cartProduct1, ProductId = cartProduct1.Id, Quantity = 1 }; usedProduct1CartItem = new CartItem { IsNew = false, MemberId = memberId, Product = cartProduct1, ProductId = cartProduct1.Id, Quantity = 1 }; newProduct2CartItem = new CartItem { IsNew = true, MemberId = memberId, Product = cartProduct2, ProductId = cartProduct2.Id, Quantity = 1 }; validNotSavedShippingDetails = new WebOrderCheckoutDetails { Address = new Address { City = "Waterloo", PostalCode = "N2L 6R2", POBoxNumber = "123", StreetAddress = "445 Wes Graham Way" }, ProvinceCode = "ON", CountryCode = "CA" }; validAddressViewModel = new AddressViewModel { City = "Waterloo", CountryCode = "CA", ProvinceCode = "ON", POBoxNumber = "1234", PostalCode = "N2L 6R2", StreetAddress = "445 Wes Graham Way" }; memberCreditCard = new MemberCreditCard { Id = creditCardId, CardholderName = "John Doe", ExpiryMonth = 11, ExpiryYear = 2015, Last4Digits = "4242", Member = member, MemberId = memberId, StripeCardId = "cardToken" }; member = new Member { UserId = memberId, CreditCards = new List<MemberCreditCard> { memberCreditCard } }; memberUser = new User { FirstName = "John", LastName = "Doe", Id = memberId, PhoneNumber = "800-555-0199", }; validNotSavedShippingBillingDetails = new WebOrderCheckoutDetails { Address = new Address { City = "Waterloo", PostalCode = "N2L 6R2", POBoxNumber = "123", StreetAddress = "445 Wes Graham Way" }, ProvinceCode = "ON", CountryCode = "CA", StripeCardToken = "card_token" }; validSavedShippingBillingDetails = new WebOrderCheckoutDetails { MemberCreditCardId = creditCardId, MemberAddressId = addressId }; cartWithNewAndUsed = new Cart { Items = new List<CartItem> { newProduct1CartItem, usedProduct1CartItem }, Member = member, MemberId = memberId }; }
public async void NewBillingInfo_SaveCard_AddsCardIdToSessionOrderDetails() { WebOrderCheckoutDetails details = validNotSavedShippingDetails; Member currentMember = member; string cardToken = "cardToken"; Guid cardId = creditCardId; MemberCreditCard newCard = new MemberCreditCard(); Mock<IVeilDataAccess> dbMock = TestHelpers.GetVeilDataAccessFake(); SetupVeilDataAccessWithCarts(dbMock, GetCartsListContainingCartWithNewAndUsed()); SetupVeilDataAccessWithMember(dbMock, currentMember); Mock<ICollection<MemberCreditCard>> creditCardsListMock = new Mock<ICollection<MemberCreditCard>>(); creditCardsListMock. Setup(cc => cc.Add(It.IsAny<MemberCreditCard>())). Callback<MemberCreditCard>( val => { val.Id = cardId; }); currentMember.CreditCards = creditCardsListMock.Object; dbMock. Setup(db => db.SaveChangesAsync()). ReturnsAsync(1); Mock<IStripeService> stripeServiceMock = new Mock<IStripeService>(); stripeServiceMock. Setup(s => s.CreateCreditCard(It.IsAny<Member>(), It.IsAny<string>())). Returns(newCard); Mock<ControllerContext> contextStub = GetControllerContextWithSessionSetupToReturn(details); CheckoutController controller = CreateCheckoutController(dbMock.Object, context: contextStub.Object, stripeService: stripeServiceMock.Object); await controller.NewBillingInfo(cardToken, saveCard: true); Assert.That(details.MemberCreditCardId, Is.EqualTo(cardId)); }
public async void NewBillingInfo_SaveCard_CallsSaveChangesAsync() { Member currentMember = member; currentMember.CreditCards = new List<MemberCreditCard>(); string cardToken = "cardToken"; MemberCreditCard newCard = new MemberCreditCard(); Mock<IVeilDataAccess> dbMock = TestHelpers.GetVeilDataAccessFake(); SetupVeilDataAccessWithCarts(dbMock, GetCartsListContainingCartWithNewAndUsed()); SetupVeilDataAccessWithMember(dbMock, currentMember); dbMock. Setup(db => db.SaveChangesAsync()). ReturnsAsync(1). Verifiable(); Mock<IStripeService> stripeServiceMock = new Mock<IStripeService>(); stripeServiceMock. Setup(s => s.CreateCreditCard(It.IsAny<Member>(), It.IsAny<string>())). Returns(newCard); Mock<ControllerContext> contextStub = GetControllerContextWithSessionSetupToReturn(validNotSavedShippingDetails); CheckoutController controller = CreateCheckoutController(dbMock.Object, context: contextStub.Object, stripeService: stripeServiceMock.Object); await controller.NewBillingInfo(cardToken, saveCard: true); Assert.That( () => dbMock.Verify(cc => cc.SaveChangesAsync(), Times.Once), Throws.Nothing); }
public async void DeleteCreditCard_IdInDb_ReturnsRedirectionToManageAddresses() { MemberCreditCard creditCardToDelete = new MemberCreditCard { Id = creditCardId }; Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake(); Mock<DbSet<MemberCreditCard>> creditCardDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<MemberCreditCard>().AsQueryable()); creditCardDbSetStub. Setup(adb => adb.FindAsync(It.IsAny<Guid>())). ReturnsAsync(creditCardToDelete); dbStub. Setup(db => db.MemberCreditCards). Returns(creditCardDbSetStub.Object); ManageController controller = CreateManageController(veilDataAccess: dbStub.Object); var result = await controller.DeleteCreditCard(creditCardId) as RedirectToRouteResult; Assert.That(result != null); Assert.That(result.RouteValues["Action"], Is.EqualTo(nameof(ManageController.ManageCreditCards))); Assert.That(result.RouteValues["Controllers"], Is.Null.Or.EqualTo("Manage")); }