IntelliJ code coverage runner gives a 100%, unfortunately I've not managed to get the same results using codecov.io and JaCoCo
This is an example of doing reactive MicroServices using spring 5 functional web framework and spring boot 2 using Kotlin.
This is a fork of the original java version.
This service provide and API that will get the geo location and the sunrise and sunset times from an address.
Scenario: Get Location
Given I've an address
When I call the location service
Then I should get a geo location
And I should get the sunrise and sunset times
To implement this example we consume a couple of REST APIs.
This example cover several topics:
- Functional programing.
- Reactive types.
- Router Functions.
- Static Web-Content.
- Creation on Reactive Java Services/Components.
- Error handling in routes and services.
- Reactive Web Client to consume external REST Services.
- Organizing your project in manageable packaging.
Includes and in depth look to testing using JUnit5:
- Unit, Integration and System tests.
- Mocking, including reactive functions and JSON responses.
- BDD style assertions.
- Test tags with maven profiles.
Get from address
$ curl -X GET "http://localhost:8080/api/location/Trafalgar%20Square%2C%20London%2C%20England" -H "accept: application/json"
Post from JSON
$ curl -X POST "http://localhost:8080/api/location" -H "accept: application/json" -H "content-type: application/json" -d "{ \"address\": \"Trafalgar Square, London, England\"}"
Both will produce something like:
{
"geographicCoordinates": {
"latitude": 51.508039,
"longitude": -0.128069
},
"sunriseSunset": {
"sunrise": "2017-05-21T03:59:08+00:00",
"sunset": "2017-05-21T19:55:11+00:00"
}
}
All date and times are ISO 8601 UTC without summer time adjustment
View in the embedded Swagger UI
- main/kotlin
- /application : Main Spring boot application and context configuration.
- /extensions : Custom kotlin extensions and high level functions.
- /routers : Reactive routing functions.
- /handlers : Handlers used by the routers.
- /services : Services for the business logic needed by handlers.
- /exceptions : Businesses exceptions.
- /model : Data classes.
- test/kotlin
- /application : Application system and unit tests.
- /extensions : Extensions unit tests.
- /routers : Integration tests for routes.
- /handlers : Unit tests for handlers.
- /services : Unit tests for services.
- /test : Helpers and base classes for testing.