package com.paymill.services; import java.util.ArrayList; import java.util.List; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import com.paymill.context.PaymillContext; import com.paymill.models.Client; import com.paymill.models.Payment; import com.paymill.models.PaymillList; public class PaymentServiceTest { private String token = "098f6bcd4621d373cade4e832627b4f6"; private Payment paymentWithClient; private List<Payment> payments = new ArrayList<Payment>(); private PaymentService paymentService; private ClientService clientService; private Client client; @BeforeClass public void setUp() { PaymillContext paymill = new PaymillContext( System.getProperty( "privateKey" ) ); this.paymentService = paymill.getPaymentService(); this.clientService = paymill.getClientService(); this.client = this.clientService.createWithEmailAndDescription( null, "Boom" ); } @AfterClass public void tearDown() { for( Payment payment : this.payments ) { this.paymentService.delete( payment ); if( payment.getClient() != null ) this.clientService.delete( payment.getClient() ); } } @Test public void testCreate_WithToken_shouldSecceed() { Payment payment = this.paymentService.createWithToken( this.token ); Assert.assertNotNull( payment ); Assert.assertNotNull( payment.getId() ); Assert.assertNotNull( payment.getType() ); Assert.assertNotNull( payment.getCreatedAt() ); Assert.assertNotNull( payment.getUpdatedAt() ); Assert.assertNull( payment.getAppId() ); // note, that the magic token mimics a credit card payment object Assert.assertTrue( payment.getUsableForPreauthorization() ); Assert.assertTrue( payment.getRecurring() ); this.payments.add( payment ); } @Test public void testCreate_WithTokenAndClient_shouldSecceed() { Payment payment = this.paymentService.createWithTokenAndClient( this.token, this.client ); Assert.assertNotNull( payment ); Assert.assertNotNull( payment.getId() ); Assert.assertNotNull( payment.getType() ); Assert.assertNotNull( payment.getCreatedAt() ); Assert.assertNotNull( payment.getUpdatedAt() ); Assert.assertNull( payment.getAppId() ); this.paymentWithClient = payment; this.payments.add( payment ); } @Test( dependsOnMethods = "testCreate_WithTokenAndClient_shouldSecceed" ) public void testShow_shouldSucceed() { Payment payment = this.paymentService.get( this.paymentWithClient ); Assert.assertNotNull( payment ); Assert.assertNotNull( payment.getId() ); Assert.assertNotNull( payment.getType() ); Assert.assertNotNull( payment.getCreatedAt() ); Assert.assertNotNull( payment.getUpdatedAt() ); Assert.assertEquals( payment.getClient().getId(), this.client.getId() ); Assert.assertNull( payment.getAppId() ); Assert.assertEquals( payment.getId(), this.paymentWithClient.getId() ); } @Test( dependsOnMethods = "testShow_shouldSucceed" ) public void testListOrderByCreatedAt() throws InterruptedException { Payment.Order orderAsc = Payment.createOrder().byCreatedAt().asc(); Payment.Order orderDesc = Payment.createOrder().byCreatedAt().desc(); List<Payment> paymentsAsc = this.paymentService.list( null, orderAsc ).getData(); List<Payment> paymentsDesc = this.paymentService.list( null, orderDesc ).getData(); //TODO[VNi]: There is an API error, creating a payment results in 2 payments in PAYMILL Assert.assertNotNull( paymentsAsc ); Assert.assertNotNull( paymentsDesc ); Assert.assertFalse( paymentsAsc.isEmpty() ); Assert.assertFalse( paymentsDesc.isEmpty() ); Assert.assertNotEquals( paymentsAsc.get( 0 ).getId(), paymentsDesc.get( 0 ).getId() ); } @Test( dependsOnMethods = "testListOrderByCreatedAt" ) public void testListFilterByCardType() { Payment.Filter filter = Payment.createFilter().byCardType( Payment.CardType.VISA ); PaymillList<Payment> wrapper = this.paymentService.list( filter, null ); List<Payment> payments = wrapper.getData(); Assert.assertNotNull( payments ); Assert.assertFalse( payments.isEmpty() ); } }