package com.paymill.services; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.paymill.context.PaymillContext; import com.paymill.models.Refund; import com.paymill.models.Transaction; import com.paymill.utils.HttpClient; import com.paymill.utils.JerseyClient; public class RefundServiceTest { private String token = null; private Integer amount = 2800; private String description = "Boom, boom, shake the room!"; private Transaction transaction; private Refund refund; private TransactionService transactionService; private RefundService refundService; private Transaction lastTransaction; @BeforeClass public void setUp() { PaymillContext paymill = new PaymillContext( System.getProperty( "privateKey" ) ); this.refundService = paymill.getRefundService(); this.transactionService = paymill.getTransactionService(); } @BeforeMethod public void setToken() { HttpClient httpClient = new JerseyClient( System.getProperty( "publicKey" ), 0 ); String content = httpClient.get( "https://test-token.paymill.com/?transaction.mode=CONNECTOR_TEST&channel.id=" + System.getProperty( "publicKey" ) + "&jsonPFunction=paymilljstests&account.number=4111111111111111&account.expiry.month=12&account.expiry.year=2015" + "&account.verification=123&account.holder=Max%20Mustermann&presentation.amount3D=2800&presentation.currency3D=EUR"); Pattern pattern = Pattern.compile( "(tok_)[a-z|0-9]+" ); Matcher matcher = pattern.matcher( content ); if( matcher.find() ) { this.token = matcher.group(); this.transaction = this.transactionService.createWithToken( this.token, this.amount, "EUR" ); } } @Test public void testRefundTransaction_WithoutDescruption_shouldSucceed() { Refund refund = this.refundService.refundTransaction( this.transaction, 1000 ); this.validatesRefund( refund ); Assert.assertNull( refund.getDescription() ); } @Test public void testRefundTransaction_WithDescruption_shouldSucceed() { this.refund = this.refundService.refundTransaction( this.transaction, 1000, this.description ); this.validatesRefund( this.refund ); Assert.assertEquals( this.refund.getDescription(), this.description ); this.lastTransaction = this.transaction; } @Test( dependsOnMethods = "testRefundTransaction_WithDescruption_shouldSucceed" ) public void testShow_shouldSucceed() { this.transaction = this.lastTransaction; this.refund = this.refundService.get( this.refund ); this.validatesRefund( this.refund ); Assert.assertEquals( this.refund.getDescription(), this.description ); } private void validatesRefund( final Refund refund ) { Assert.assertNotNull( refund ); Assert.assertNotNull( refund.getId() ); Assert.assertEquals( refund.getAmount(), Integer.valueOf( 1000 ) ); Assert.assertEquals( refund.getStatus(), Refund.Status.REFUNDED ); Assert.assertFalse( refund.getLivemode() ); Assert.assertNotNull( refund.getCreatedAt() ); Assert.assertNotNull( refund.getUpdatedAt() ); Assert.assertNull( refund.getAppId() ); Assert.assertEquals( refund.getTransaction().getId(), this.transaction.getId() ); Assert.assertEquals( refund.getTransaction().getStatus(), Transaction.Status.PARTIAL_REFUNDED ); Assert.assertEquals( refund.getResponseCode(), Integer.valueOf( 20000 ) ); } }