package com.softwaremill.common.paypal.button; import org.testng.annotations.Test; import static org.assertj.core.api.Assertions.assertThat; public class PaypalButtonGeneratorTest { private static final String GO = "http://go.back"; private static final String GO_CANCEL = "http://go.cancel"; @Test public void shouldPassSimpleCase() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.addItem("test", "10"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"test\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"0.0\"/>\n" + "\t<input type=\"submit\" value=\"Pay with PayPal\"/>\n" + "</form>\n"); } @Test public void shouldUseImageIfSet() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.withSubmitImage("image_button.png").addItem("test", "10"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"test\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"0.0\"/>\n" + "\t<input type=\"image\" alt=\"Pay with PayPal\" src=\"image_button.png\"/>\n" + "</form>\n"); } @Test public void shouldPassWithAllParametersPassedCase() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.addItem("test", "10", "1.23", "2.34"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"test\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"1.23\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"2.34\"/>\n" + "\t<input type=\"submit\" value=\"Pay with PayPal\"/>\n" + "</form>\n"); } @Test public void shouldPassWithDefaultTax() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.withDefaultTax("23").addItemWithShipping("test", "10", "1.23"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"test\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"1.23\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"23\"/>\n" + "\t<input type=\"submit\" value=\"Pay with PayPal\"/>\n" + "</form>\n"); } @Test public void shouldPassWithDefaultShipping() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.withDefaultShipping("11").addItemWithTax("test", "10", "1.5"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"test\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"11\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"1.5\"/>\n" + "\t<input type=\"submit\" value=\"Pay with PayPal\"/>\n" + "</form>\n"); } @Test public void shouldPassWithMoreItems() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.addItem("foo", "12").addItem("bar", "10"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"foo\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"12\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_2\" value=\"bar\"/>\n" + "\t<input type=\"hidden\" name=\"amount_2\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_2\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"tax_2\" value=\"0.0\"/>\n" + "\t<input type=\"submit\" value=\"Pay with PayPal\"/>\n" + "</form>\n"); } @Test public void shouldPassWithMoreItemsAndObjects() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.addItem("foo", "12").addItem("bar", "10") .addItems(new PaypalCartItem("fooOb", "1", "1", "1"), new PaypalCartItem("barOb", "2", "2", "2")); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"foo\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"12\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_2\" value=\"bar\"/>\n" + "\t<input type=\"hidden\" name=\"amount_2\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_2\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"tax_2\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_3\" value=\"fooOb\"/>\n" + "\t<input type=\"hidden\" name=\"amount_3\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_3\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"tax_3\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_4\" value=\"barOb\"/>\n" + "\t<input type=\"hidden\" name=\"amount_4\" value=\"2\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_4\" value=\"2\"/>\n" + "\t<input type=\"hidden\" name=\"tax_4\" value=\"2\"/>\n" + "\t<input type=\"submit\" value=\"Pay with PayPal\"/>\n" + "</form>\n"); } @Test public void shouldUseCorrectDefaultTax() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.withDefaultTax("12.5").addItem("test", "10"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"test\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"12.5\"/>\n" + "\t<input type=\"submit\" value=\"Pay with PayPal\"/>\n" + "</form>\n"); } @Test public void shouldUseCorrectDefaultShipping() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.withDefaultShipping("10.5").addItem("test", "10"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"test\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"10.5\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"0.0\"/>\n" + "\t<input type=\"submit\" value=\"Pay with PayPal\"/>\n" + "</form>\n"); } @Test public void shouldUseCorrectPaypalLabel() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.withPaypalButtonLabel("Pay me please").addItem("test", "10"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"test\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"0.0\"/>\n" + "\t<input type=\"submit\" value=\"Pay me please\"/>\n" + "</form>\n"); } @Test public void shouldUseCorrectCurrency() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.withCurrency("PLN").addItem("test", "10"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"PLN\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"test\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"0.0\"/>\n" + "\t<input type=\"submit\" value=\"Pay with PayPal\"/>\n" + "</form>\n"); } @Test public void shouldUseInvoiceNumber() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL); // when pbg.withInvoiceNumber("invoice/123/10").addItem("test", "10"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"test\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"invoice\" value=\"invoice/123/10\"/>\n" + "\t<input type=\"submit\" value=\"Pay with PayPal\"/>\n" + "</form>\n"); } @Test(expectedExceptions = NumberFormatException.class) public void shouldFailOnBadAmount() { new PaypalCartItem("test", "badAmount", "0", "0"); } @Test(expectedExceptions = NumberFormatException.class) public void shouldFailOnBadTaxAmount() { new PaypalCartItem("test", "0", "0", "taxBad"); } @Test(expectedExceptions = NumberFormatException.class) public void shouldFailOnBadShippingAmount() { new PaypalCartItem("test", "0", "shippingBad", "0"); } @Test public void shouldPassOnAllGoodAmounts() { new PaypalCartItem("test", "0", "0", "0"); } @Test public void shouldUseNotifyUrl() { // given PaypalButtonGenerator pbg = new PaypalButtonGenerator("test@email.com", GO, GO_CANCEL). withNotifyUrl("http://notify.com/paypal"); // when pbg.addItem("test", "10"); String form = pbg.build(); // then assertThat(form).isEqualTo("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n" + "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"/>\n" + "\t<input type=\"hidden\" name=\"upload\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"return\" value=\"http://go.back\"/>\n" + "\t<input type=\"hidden\" name=\"cancel_return\" value=\"http://go.cancel\"/>\n" + "\t<input type=\"hidden\" name=\"rm\" value=\"1\"/>\n" + "\t<input type=\"hidden\" name=\"business\" value=\"test@email.com\"/>\n" + "\t<input type=\"hidden\" name=\"currency_code\" value=\"USD\"/>\n" + "\t<input type=\"hidden\" name=\"item_name_1\" value=\"test\"/>\n" + "\t<input type=\"hidden\" name=\"amount_1\" value=\"10\"/>\n" + "\t<input type=\"hidden\" name=\"shipping_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"tax_1\" value=\"0.0\"/>\n" + "\t<input type=\"hidden\" name=\"notify_url\" value=\"http://notify.com/paypal\"/>\n" + "\t<input type=\"submit\" value=\"Pay with PayPal\"/>\n" + "</form>\n"); } }