More tests to improve code coverage.
This commit is contained in:
parent
231c0e7ac0
commit
8e49a66b14
|
@ -95,7 +95,7 @@ jacocoTestCoverageVerification {
|
||||||
limit {
|
limit {
|
||||||
counter = 'LINE'
|
counter = 'LINE'
|
||||||
value = 'COVEREDRATIO'
|
value = 'COVEREDRATIO'
|
||||||
minimum = 0.5
|
minimum = 0.7
|
||||||
}
|
}
|
||||||
excludes = [
|
excludes = [
|
||||||
'biz.nellemann.libcvrapi.pojo.*'
|
'biz.nellemann.libcvrapi.pojo.*'
|
||||||
|
|
|
@ -41,6 +41,8 @@ public class CvrApi {
|
||||||
private final String userAgent;
|
private final String userAgent;
|
||||||
private final String authenticationToken;
|
private final String authenticationToken;
|
||||||
|
|
||||||
|
protected String baseUrl = "https://rest.cvrapi.dk/v1/dk";
|
||||||
|
|
||||||
|
|
||||||
public CvrApi(String userAgent, String authenticationToken) {
|
public CvrApi(String userAgent, String authenticationToken) {
|
||||||
this.userAgent = userAgent;
|
this.userAgent = userAgent;
|
||||||
|
@ -49,7 +51,7 @@ public class CvrApi {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private String get(String url) throws IOException, Exception {
|
protected String get(String url) throws IOException, Exception {
|
||||||
|
|
||||||
String credential = Credentials.basic(authenticationToken, "");
|
String credential = Credentials.basic(authenticationToken, "");
|
||||||
|
|
||||||
|
@ -61,9 +63,13 @@ public class CvrApi {
|
||||||
case 200:
|
case 200:
|
||||||
return response.body().string();
|
return response.body().string();
|
||||||
case 401:
|
case 401:
|
||||||
throw new Exception("Access denied");
|
log.warn("get() - 401 - Access Denied");
|
||||||
|
throw new Exception("Access Denied");
|
||||||
|
case 404:
|
||||||
|
log.warn("get() - 404 - Not Found");
|
||||||
|
throw new Exception("Not Found");
|
||||||
default:
|
default:
|
||||||
throw new Exception("Unknown error, status code: " + response.code());
|
throw new Exception("get() - Unknown Error - status code: " + response.code());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -77,7 +83,7 @@ public class CvrApi {
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
protected String getCompanyJson(String vatNumber) throws IOException, Exception {
|
protected String getCompanyJson(String vatNumber) throws IOException, Exception {
|
||||||
String response = get("https://rest.cvrapi.dk/v1/dk/company/" + vatNumber);
|
String response = get(baseUrl + "/company/" + vatNumber);
|
||||||
log.debug("getCompanyJson() response: " + response);
|
log.debug("getCompanyJson() response: " + response);
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,54 @@
|
||||||
package biz.nellemann.libcvrapi
|
package biz.nellemann.libcvrapi
|
||||||
|
|
||||||
|
import okhttp3.HttpUrl
|
||||||
|
import okhttp3.mockwebserver.MockResponse
|
||||||
|
import okhttp3.mockwebserver.MockWebServer
|
||||||
|
import com.google.gson.JsonSyntaxException;
|
||||||
import spock.lang.Specification
|
import spock.lang.Specification
|
||||||
|
|
||||||
class CvrApiSpec extends Specification {
|
class CvrApiSpec extends Specification {
|
||||||
|
|
||||||
CvrApi api
|
CvrApi api
|
||||||
|
MockWebServer mockServer = new MockWebServer();
|
||||||
|
|
||||||
def setup() {
|
def setup() {
|
||||||
api = new CvrApi("Test User Agent", "testAuthToken")
|
api = new CvrApi("Test User Agent", "testAuthToken")
|
||||||
}
|
mockServer.start();
|
||||||
|
}
|
||||||
|
|
||||||
def cleanup() { }
|
def cleanup() {
|
||||||
|
mockServer.shutdown()
|
||||||
|
}
|
||||||
|
|
||||||
void "test we can parse company with CVR 25063864"() {
|
void "test unsuccessful parsing of JSON"() {
|
||||||
|
setup:
|
||||||
|
def testJson = "{'foo':'bar'}"
|
||||||
|
|
||||||
when:
|
when:
|
||||||
|
def company = api.parseJsonIntoCompany(testJson)
|
||||||
|
|
||||||
|
then:
|
||||||
|
company.vat == null
|
||||||
|
}
|
||||||
|
|
||||||
|
void "test unsuccessful parsing of JSON w. VAT as text"() {
|
||||||
|
setup:
|
||||||
|
def testJson = "{'vat':'abcd1234'}"
|
||||||
|
|
||||||
|
when:
|
||||||
|
api.parseJsonIntoCompany(testJson)
|
||||||
|
|
||||||
|
then:
|
||||||
|
thrown Exception
|
||||||
|
}
|
||||||
|
|
||||||
|
void "test succesful parsing company with CVR 25063864"() {
|
||||||
|
|
||||||
|
setup:
|
||||||
def testFile = new File(getClass().getResource('/25063864.json').toURI())
|
def testFile = new File(getClass().getResource('/25063864.json').toURI())
|
||||||
def testJson = testFile.getText('UTF-8')
|
def testJson = testFile.getText('UTF-8')
|
||||||
|
|
||||||
|
when:
|
||||||
def company = api.parseJsonIntoCompany(testJson)
|
def company = api.parseJsonIntoCompany(testJson)
|
||||||
|
|
||||||
then:
|
then:
|
||||||
|
@ -28,11 +60,13 @@ class CvrApiSpec extends Specification {
|
||||||
company.info.employment.amountEmployeesHigh == 99
|
company.info.employment.amountEmployeesHigh == 99
|
||||||
}
|
}
|
||||||
|
|
||||||
void "test we can parse company with CVR 15027800"() {
|
void "test succesful parsing of company with CVR 15027800"() {
|
||||||
|
|
||||||
when:
|
setup:
|
||||||
def testFile = new File(getClass().getResource('/15027800.json').toURI())
|
def testFile = new File(getClass().getResource('/15027800.json').toURI())
|
||||||
def testJson = testFile.getText('UTF-8')
|
def testJson = testFile.getText('UTF-8')
|
||||||
|
|
||||||
|
when:
|
||||||
def company = api.parseJsonIntoCompany(testJson)
|
def company = api.parseJsonIntoCompany(testJson)
|
||||||
|
|
||||||
then:
|
then:
|
||||||
|
@ -44,7 +78,104 @@ class CvrApiSpec extends Specification {
|
||||||
company.info.employment.amountEmployeesHigh == 499
|
company.info.employment.amountEmployeesHigh == 499
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Get better code coverage in tests, eg. by mocking okHttp interface - but how ?
|
void "test succesful HTTP GET company with CVR 15027800 as JSON"() {
|
||||||
|
|
||||||
|
setup:
|
||||||
|
mockServer.enqueue(new MockResponse().setBody("{}"));
|
||||||
|
HttpUrl baseUrl = mockServer.url("/v1/dk/");
|
||||||
|
api.baseUrl = baseUrl.toString()
|
||||||
|
|
||||||
|
when:
|
||||||
|
def jsonString = api.getCompanyJson("15027800")
|
||||||
|
|
||||||
|
then:
|
||||||
|
jsonString != null
|
||||||
|
jsonString == "{}"
|
||||||
|
}
|
||||||
|
|
||||||
|
void "test we can HTTP GET company with CVR 25063864 deserialized into Company"() {
|
||||||
|
|
||||||
|
setup:
|
||||||
|
def testFile = new File(getClass().getResource('/25063864.json').toURI())
|
||||||
|
def testJson = testFile.getText('UTF-8')
|
||||||
|
mockServer.enqueue(new MockResponse().setBody(testJson));
|
||||||
|
HttpUrl baseUrl = mockServer.url("/v1/dk/");
|
||||||
|
api.baseUrl = baseUrl.toString()
|
||||||
|
|
||||||
|
when:
|
||||||
|
def company = api.getCompanyByVatNumber("25063864")
|
||||||
|
|
||||||
|
then:
|
||||||
|
company != null
|
||||||
|
company.vat == 25063864
|
||||||
|
}
|
||||||
|
|
||||||
|
void "test wrong json"() {
|
||||||
|
setup:
|
||||||
|
mockServer.enqueue(new MockResponse().setBody("{'foo':'bar'}"));
|
||||||
|
HttpUrl baseUrl = mockServer.url("/v1/dk/");
|
||||||
|
api.baseUrl = baseUrl.toString()
|
||||||
|
|
||||||
|
when:
|
||||||
|
def company = api.getCompanyByVatNumber("15027800")
|
||||||
|
|
||||||
|
then:
|
||||||
|
company.vat == null
|
||||||
|
}
|
||||||
|
|
||||||
|
void "test empty json"() {
|
||||||
|
setup:
|
||||||
|
mockServer.enqueue(new MockResponse().setBody(''));
|
||||||
|
HttpUrl baseUrl = mockServer.url("/v1/dk/");
|
||||||
|
api.baseUrl = baseUrl.toString()
|
||||||
|
|
||||||
|
when:
|
||||||
|
def company = api.getCompanyByVatNumber("15027800")
|
||||||
|
|
||||||
|
then:
|
||||||
|
company == null
|
||||||
|
}
|
||||||
|
|
||||||
|
void "test HTTP 404 reply"() {
|
||||||
|
setup:
|
||||||
|
mockServer.enqueue(new MockResponse().setResponseCode(404));
|
||||||
|
HttpUrl baseUrl = mockServer.url("/v1/dk/");
|
||||||
|
|
||||||
|
when:
|
||||||
|
def company = api.get(baseUrl.toString())
|
||||||
|
|
||||||
|
then:
|
||||||
|
Exception ex = thrown()
|
||||||
|
ex.message == 'Not Found'
|
||||||
|
}
|
||||||
|
|
||||||
|
void "test HTTP 401 reply"() {
|
||||||
|
setup:
|
||||||
|
mockServer.enqueue(new MockResponse().setResponseCode(401));
|
||||||
|
HttpUrl baseUrl = mockServer.url("/v1/dk/");
|
||||||
|
api.baseUrl = baseUrl.toString()
|
||||||
|
|
||||||
|
when:
|
||||||
|
def company = api.get(baseUrl.toString())
|
||||||
|
|
||||||
|
then:
|
||||||
|
Exception ex = thrown()
|
||||||
|
ex.message == 'Access Denied'
|
||||||
|
}
|
||||||
|
|
||||||
|
void "test other HTTP reply"() {
|
||||||
|
setup:
|
||||||
|
mockServer.enqueue(new MockResponse().setResponseCode(405));
|
||||||
|
HttpUrl baseUrl = mockServer.url("/v1/dk/");
|
||||||
|
api.baseUrl = baseUrl.toString()
|
||||||
|
|
||||||
|
when:
|
||||||
|
def company = api.get(baseUrl.toString())
|
||||||
|
|
||||||
|
then:
|
||||||
|
Exception ex = thrown()
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Test 401, 404, timeouts, gson deserialization errors
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue