diff --git a/pom.xml b/pom.xml index bdf4acb..d44fb69 100644 --- a/pom.xml +++ b/pom.xml @@ -64,6 +64,16 @@ joda-time 2.4 + + io.springfox + springfox-swagger2 + 2.4.0 + + + io.springfox + springfox-swagger-ui + 2.4.0 + org.jadira.usertype usertype.core @@ -116,6 +126,15 @@ + + + jcenter-snapshots + jcenter + https://jcenter.bintray.com/ + + + + UTF-8 pl.jug.torun.xenia.Application diff --git a/src/main/groovy/pl/jug/torun/xenia/Application.groovy b/src/main/groovy/pl/jug/torun/xenia/Application.groovy index 2fb4669..9c5a480 100644 --- a/src/main/groovy/pl/jug/torun/xenia/Application.groovy +++ b/src/main/groovy/pl/jug/torun/xenia/Application.groovy @@ -9,4 +9,6 @@ class Application { static void main(String[] args) { SpringApplication.run Application, args } + + } diff --git a/src/main/groovy/pl/jug/torun/xenia/SwaggerConfig.groovy b/src/main/groovy/pl/jug/torun/xenia/SwaggerConfig.groovy new file mode 100644 index 0000000..0165d58 --- /dev/null +++ b/src/main/groovy/pl/jug/torun/xenia/SwaggerConfig.groovy @@ -0,0 +1,42 @@ +package pl.jug.torun.xenia + +import com.google.common.base.Predicate +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.actuate.autoconfigure.ManagementServerProperties +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration +import springfox.documentation.spi.DocumentationType +import springfox.documentation.spring.web.plugins.Docket +import springfox.documentation.swagger2.annotations.EnableSwagger2 + +import static com.google.common.base.Predicates.not +import static com.google.common.base.Predicates.or +import static springfox.documentation.builders.PathSelectors.regex + +/** + * Created by krzysztof on 25.06.16. + */ +@ConditionalOnWebApplication +@EnableSwagger2 +@Configuration +public class SwaggerConfig { + + @Autowired + ManagementServerProperties managementServerProperties; + + @Bean + public Docket getDocket() { + return new Docket(DocumentationType.SWAGGER_2) + .select().paths(getPaths()).build() + .ignoredParameterTypes(MetaClass.class) // for groovy + } + + + private Predicate getPaths() { //ignore endpoints from actuator and standard error endpoint + return not(or( + regex(managementServerProperties.getContextPath() + ".*"), + regex("/error.*") + )) + } +} \ No newline at end of file diff --git a/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupClient.groovy b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupClient.groovy index f657e86..ad1e4c7 100644 --- a/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupClient.groovy +++ b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupClient.groovy @@ -18,33 +18,16 @@ class MeetupClient { private static final String MEETUP_API_HOST = 'https://api.meetup.com' - @Value('${meetup.key:""}') - String key - @Value('${meetup.code:""}') - String code - - @Value('${meetup.mail.subject_template:""}') - String subjectTemplate - - @Value('${meetup.mail.body_template:""}') - String bodyTemplate - - - @Value('${meetup.groupId:""}') - String groupId - - @Value('${meetup.access_token:""}') - String token + @Autowired + MeetupProperty meetupProperty @Autowired TokenRequester tokenRequester - String groupUrlName - List findAllEvents() { RESTClient request = new RESTClient(MEETUP_API_HOST) - Map params = [key: key, group_urlname: groupUrlName, status: 'upcoming,past'] + Map params = [key: meetupProperty.key, group_urlname: meetupProperty.groupUrlName, status: 'upcoming,past'] HttpResponseDecorator response = request.get( path: '/2/events.json', @@ -58,7 +41,7 @@ class MeetupClient { List findAllAttendeesOfEvent(Long id) { RESTClient request = new RESTClient(MEETUP_API_HOST) - Map params = [key: key, group_urlname: groupUrlName, event_id: id, rsvp: 'yes'] + Map params = [key: meetupProperty.key, group_urlname: meetupProperty.groupUrlName, event_id: id, rsvp: 'yes'] HttpResponseDecorator response = request.get( path: '/2/rsvps.json', @@ -74,7 +57,7 @@ class MeetupClient { Map params = [ dryrun : true, - member_id: member.id, group_id: groupId, access_token: token, + member_id: member.id, group_id: meetupProperty.groupId, access_token: meetupProperty.token, subject : String.format(subjectTemplate, prize.name), message: String.format(bodyTemplate, prize.name) ] diff --git a/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupMailProperty.groovy b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupMailProperty.groovy new file mode 100644 index 0000000..5cd7d2d --- /dev/null +++ b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupMailProperty.groovy @@ -0,0 +1,9 @@ +package pl.jug.torun.xenia.meetup + +/** + * Created by krzysztof on 26.06.16. + */ +class MeetupMailProperty { + String subjectTemplate + String bodyTemplate +} diff --git a/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupProperty.groovy b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupProperty.groovy new file mode 100644 index 0000000..654d066 --- /dev/null +++ b/src/main/groovy/pl/jug/torun/xenia/meetup/MeetupProperty.groovy @@ -0,0 +1,19 @@ +package pl.jug.torun.xenia.meetup + +import org.springframework.boot.context.properties.ConfigurationProperties +import org.springframework.stereotype.Component + +/** + * Created by krzysztof on 26.06.16. + */ +@Component +@ConfigurationProperties(prefix = "meetup") +class MeetupProperty { + String key= '' + String code= '' + String groupId + String token + String groupUrlName + + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 6623daa..dfb3f3d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -4,6 +4,8 @@ spring.datasource.password = spring.datasource.driverClassName = org.h2.Driver spring.jpa.hibernate.ddl-auto=update +management.context-path=/xenia-api + meetup.key = xxx meetup.groupUrlName = yyy diff --git a/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerIntegrationTest.groovy b/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerIntegrationTest.groovy index b4e94e7..54e4db4 100644 --- a/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerIntegrationTest.groovy +++ b/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerIntegrationTest.groovy @@ -3,6 +3,7 @@ package pl.jug.torun.xenia.rest import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.IntegrationTest import org.springframework.boot.test.SpringApplicationContextLoader +import org.springframework.boot.test.WebIntegrationTest import org.springframework.dao.DataIntegrityViolationException import org.springframework.test.context.ContextConfiguration import pl.jug.torun.xenia.Application diff --git a/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerSpec.groovy b/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerSpec.groovy index fc2815b..66e451c 100644 --- a/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerSpec.groovy +++ b/src/test/groovy/pl/jug/torun/xenia/rest/PrizeControllerSpec.groovy @@ -3,9 +3,9 @@ package pl.jug.torun.xenia.rest import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.IntegrationTest import org.springframework.boot.test.SpringApplicationContextLoader +import org.springframework.boot.test.WebIntegrationTest import org.springframework.http.MediaType import org.springframework.test.context.ContextConfiguration -import org.springframework.test.context.web.WebAppConfiguration import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.setup.MockMvcBuilders import org.springframework.web.context.WebApplicationContext @@ -22,9 +22,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status @ContextConfiguration(loader = SpringApplicationContextLoader, classes = Application) -@WebAppConfiguration -@IntegrationTest -class PrizeControllerSpec extends Specification { +@WebIntegrationTest(randomPort = true) +class PrizeControllerSpec extends Specification{ @Autowired WebApplicationContext webApplicationContext