diff --git a/CHANGELOG.md b/CHANGELOG.md index c66e1ef..99777ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a - `pl.smsapi.exception.SmsapiErrorException` to handle API error responses - `date_sent` to SMS/MMS send action responses - `time_restriction` parameter for SMS send action +- HLR action factory, `HlrFactory` +- HLR with IDX support ### Changed - `pl.smsapi.api.UserFactory.actionAdd` marked as deprecated, use `pl.smsapi.api.action.subusers.SubusersFactory.actionAdd` instead @@ -38,6 +40,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a - `pl.smsapi.api.action.sms.SMSGet` without parameters marked as deprecated - `pl.smsapi.api.SmsFactory.actionDelete` without parameters marked as deprecated - `pl.smsapi.api.action.sms.SMSDelete` without parameters marked as deprecated +- `pl.smsapi.api.action.hlr.HLRCheckNumber` without parameters marked as deprecated ### Removed - legacy `phonebook.do` contacts API support diff --git a/src/main/java/pl/smsapi/api/action/hlr/HLRCheckNumber.java b/src/main/java/pl/smsapi/api/action/hlr/HLRCheckNumber.java index 352bad9..6f6f5d2 100644 --- a/src/main/java/pl/smsapi/api/action/hlr/HLRCheckNumber.java +++ b/src/main/java/pl/smsapi/api/action/hlr/HLRCheckNumber.java @@ -6,20 +6,35 @@ public class HLRCheckNumber extends AbstractAction { + /** + * @deprecated use {@link HLRCheckNumber(String)} instead + */ + @Deprecated public HLRCheckNumber() { setJson(true); } + public HLRCheckNumber(String phoneNumber) { + setJson(true); + params.put("number", phoneNumber); + } + /** + * @deprecated use {@link HLRCheckNumber(String)} instead + */ + @Deprecated public HLRCheckNumber setNumber(String number) { params.put("number", number); return this; } - /*public HLRCheckNumber setNumber(String[] number) { - params.put("number", StringUtils.join(number, ',')); - return this; - }*/ + /** + * Set optional custom value sent with HLR and sent back in CALLBACK. + */ + public HLRCheckNumber setIDx(String idx) { + params.put("idx", idx); + return this; + } protected CheckNumberResponse createResponse(String data) { JSONObject jsonObject = new JSONObject(data); diff --git a/src/main/java/pl/smsapi/api/action/hlr/HlrFactory.java b/src/main/java/pl/smsapi/api/action/hlr/HlrFactory.java new file mode 100644 index 0000000..deb38b4 --- /dev/null +++ b/src/main/java/pl/smsapi/api/action/hlr/HlrFactory.java @@ -0,0 +1,20 @@ +package pl.smsapi.api.action.hlr; + +import pl.smsapi.Client; +import pl.smsapi.api.ActionFactory; +import pl.smsapi.proxy.Proxy; + +public class HlrFactory extends ActionFactory { + + public HlrFactory(Client client, Proxy proxy) { + super(client, proxy); + } + + public HLRCheckNumber actionCheckNumber(String phoneNumber) { + HLRCheckNumber action = new HLRCheckNumber(phoneNumber); + action.client(client); + action.proxy(proxy); + + return action; + } +} diff --git a/src/test/java/pl/smsapi/api/action/hlr/CheckNumberMother.java b/src/test/java/pl/smsapi/api/action/hlr/CheckNumberMother.java new file mode 100644 index 0000000..4c3bc1d --- /dev/null +++ b/src/test/java/pl/smsapi/api/action/hlr/CheckNumberMother.java @@ -0,0 +1,25 @@ +package pl.smsapi.api.action.hlr; + +public class CheckNumberMother { + + public static String create() { + return + "{" + + " \"count\": 1," + + " \"list\": [" + + " {" + + " \"date\": 1712565008," + + " \"id\": \"1\"," + + " \"info\": \"Resource description\"," + + " \"mcc\": 260," + + " \"mnc\": 3," + + " \"number\": \"500600700\"," + + " \"ported\": 0," + + " \"ported_from\": 3," + + " \"price\": 0.04," + + " \"status\": \"OK\"" + + " }" + + " ]" + + "}"; + } +} diff --git a/src/test/java/pl/smsapi/test/unit/response/CheckNumberResponseTest.java b/src/test/java/pl/smsapi/api/action/hlr/CheckNumberResponseTest.java similarity index 54% rename from src/test/java/pl/smsapi/test/unit/response/CheckNumberResponseTest.java rename to src/test/java/pl/smsapi/api/action/hlr/CheckNumberResponseTest.java index fa1d64f..3e98886 100644 --- a/src/test/java/pl/smsapi/test/unit/response/CheckNumberResponseTest.java +++ b/src/test/java/pl/smsapi/api/action/hlr/CheckNumberResponseTest.java @@ -1,7 +1,6 @@ -package pl.smsapi.test.unit.response; +package pl.smsapi.api.action.hlr; import org.junit.Test; -import pl.smsapi.api.action.hlr.HLRCheckNumber; import pl.smsapi.api.response.CheckNumberResponse; import pl.smsapi.api.response.NumberResponse; import pl.smsapi.exception.SmsapiException; @@ -17,34 +16,16 @@ public class CheckNumberResponseTest { @Test public void deserialize_non_empty_response() throws SmsapiException { - HLRCheckNumber action = new HLRCheckNumber(); + HLRCheckNumber action = new HLRCheckNumber("500600700"); action.client(new ClientStub()); - action.proxy(new ProxyResponseStub( - "{" + - " \"count\": 1," + - " \"list\": [" + - " {" + - " \"date\": 1712565008," + - " \"id\": \"1\"," + - " \"info\": \"Resource description\"," + - " \"mcc\": 260," + - " \"mnc\": 3," + - " \"number\": \"500600700\"," + - " \"ported\": 0," + - " \"ported_from\": 3," + - " \"price\": 0.04," + - " \"status\": \"OK\"" + - " }" + - " ]" + - "}" - )); + action.proxy(new ProxyResponseStub(CheckNumberMother.create())); CheckNumberResponse response = action.execute(); - assertFalse(response.getList().isEmpty()); - assertEquals(1, response.getCount()); + assertFalse(response.list.isEmpty()); + assertEquals(1, response.count); - Optional hlr1 = response.getList().stream().filter( + Optional hlr1 = response.list.stream().filter( hlrResponse -> hlrResponse.getId().equals("1") ).findFirst(); assertTrue(hlr1.isPresent()); diff --git a/src/test/java/pl/smsapi/api/action/hlr/HLRCheckNumberTest.java b/src/test/java/pl/smsapi/api/action/hlr/HLRCheckNumberTest.java new file mode 100644 index 0000000..93a4698 --- /dev/null +++ b/src/test/java/pl/smsapi/api/action/hlr/HLRCheckNumberTest.java @@ -0,0 +1,50 @@ +package pl.smsapi.api.action.hlr; + +import org.junit.Test; +import pl.smsapi.api.action.sms.StatusJsonMother; +import pl.smsapi.exception.SmsapiException; +import pl.smsapi.test.doubles.ClientStub; +import pl.smsapi.test.doubles.ProxyRequestSpy; + +import java.util.HashMap; + +import static org.junit.Assert.assertEquals; + +public class HLRCheckNumberTest { + + @Test + public void executeCheckNumberRequest() throws SmsapiException { + ProxyRequestSpy requestStub = new ProxyRequestSpy(StatusJsonMother.create()); + HLRCheckNumber action = new HLRCheckNumber("500600700"); + action.client(new ClientStub()); + action.proxy(requestStub); + + action.execute(); + + assertEquals("POST", requestStub.requestMethod); + assertEquals("hlrsync.do", requestStub.requestEndpoint); + HashMap expectedRequestPayload = new HashMap<>(); + expectedRequestPayload.put("number", "500600700"); + expectedRequestPayload.put("format", "json"); + assertEquals(expectedRequestPayload, requestStub.requestPayload); + } + + @Test + public void executeCheckNumberWithOptionalFieldsRequest() throws SmsapiException { + ProxyRequestSpy requestStub = new ProxyRequestSpy(StatusJsonMother.create()); + HLRCheckNumber action = new HLRCheckNumber("500600700"); + action.client(new ClientStub()); + action.proxy(requestStub); + action.setIDx("example-user-provided-id-123"); + + action.execute(); + + assertEquals("POST", requestStub.requestMethod); + assertEquals("hlrsync.do", requestStub.requestEndpoint); + HashMap expectedRequestPayload = new HashMap<>(); + expectedRequestPayload.put("number", "500600700"); + expectedRequestPayload.put("format", "json"); + expectedRequestPayload.put("idx", "example-user-provided-id-123"); + assertEquals(expectedRequestPayload, requestStub.requestPayload); + } +} diff --git a/src/test/java/pl/smsapi/api/action/hlr/HlrFactoryTest.java b/src/test/java/pl/smsapi/api/action/hlr/HlrFactoryTest.java new file mode 100644 index 0000000..eb92e0a --- /dev/null +++ b/src/test/java/pl/smsapi/api/action/hlr/HlrFactoryTest.java @@ -0,0 +1,35 @@ +package pl.smsapi.api.action.hlr; + +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import pl.smsapi.api.response.CheckNumberResponse; +import pl.smsapi.exception.SmsapiException; +import pl.smsapi.test.TestSmsapi; + +import static org.junit.Assert.*; + +@Ignore +public class HlrFactoryTest extends TestSmsapi { + + HlrFactory apiFactory; + + @Before + public void setUp() { + super.setUp(); + apiFactory = new HlrFactory(client, proxy); + } + + @Test + public void checkNumberTest() throws SmsapiException { + HLRCheckNumber actionCheckNumber = apiFactory + .actionCheckNumber("500600700") + .setIDx("example-user-provided-id-123"); + + CheckNumberResponse responseCheckNumber = actionCheckNumber.execute(); + + assertNotNull(responseCheckNumber); + assertEquals(1, responseCheckNumber.count); + assertTrue(responseCheckNumber.list.stream().anyMatch(messageResponse -> messageResponse.getNumber().equals("500600700"))); + } +} diff --git a/src/test/java/pl/smsapi/test/run/HlrTest.java b/src/test/java/pl/smsapi/test/run/HlrTest.java deleted file mode 100644 index e3578da..0000000 --- a/src/test/java/pl/smsapi/test/run/HlrTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package pl.smsapi.test.run; - -import org.junit.Ignore; -import org.junit.Test; -import pl.smsapi.api.action.hlr.HLRCheckNumber; -import pl.smsapi.exception.SmsapiException; -import pl.smsapi.test.TestSmsapi; - -@Ignore -public class HlrTest extends TestSmsapi { - @Test - public void checkNumberTest() throws SmsapiException { - HLRCheckNumber action = new HLRCheckNumber(); - action.client(client); - action.proxy(proxy); - - action.setNumber("500600700"); - - action.execute(); - } -}