diff --git a/.github/workflows/blank.yml b/.github/workflows/blank.yml
index 93ab000..e2bb99f 100644
--- a/.github/workflows/blank.yml
+++ b/.github/workflows/blank.yml
@@ -20,4 +20,4 @@ jobs:
# do not forget `git update-index --chmod=+x gradlew` to fix permission before !
- uses: eskatos/gradle-command-action@v1
with:
- arguments: test
+ arguments: check
diff --git a/README.MD b/README.MD
new file mode 100644
index 0000000..62dd0b4
--- /dev/null
+++ b/README.MD
@@ -0,0 +1,3 @@
+# Projet GL51
+[](https://www.codefactor.io/repository/github/hawlink/gl51td1)
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 6ea7404..05b66e1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,6 +3,7 @@ plugins {
//id "com.github.johnrengelman.shadow" version "5.2.0"
id "com.github.johnrengelman.shadow" version "4.0.2"
id "application"
+ id "codenarc"
}
diff --git a/config/codenarc/codenarc.xml b/config/codenarc/codenarc.xml
new file mode 100644
index 0000000..921f1be
--- /dev/null
+++ b/config/codenarc/codenarc.xml
@@ -0,0 +1,14 @@
+
+
+ Sample rule set
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/groovy/gl51/MovieController.groovy b/src/main/groovy/gl51/MovieController.groovy
new file mode 100644
index 0000000..ed2098b
--- /dev/null
+++ b/src/main/groovy/gl51/MovieController.groovy
@@ -0,0 +1,30 @@
+package gl51
+
+import gl51.movie.data.Movie
+import gl51.movie.data.MovieRequest
+import gl51.movie.service.MovieRegistry
+import io.micronaut.http.annotation.Controller
+import io.micronaut.http.annotation.Get
+import io.micronaut.http.HttpStatus
+import io.micronaut.http.annotation.Post
+
+import javax.inject.Inject
+
+
+@Controller("/movie")
+class MovieController {
+
+ @Inject
+ MovieRegistry registry
+
+ @Get("/")
+ List index() {
+ registry.listFavorites()
+ }
+
+ @Post('/')
+ HttpStatus addMovie(MovieRequest movieRequest) {
+ registry.addMovieToFavorites(movieRequest.imdbId)
+ HttpStatus.CREATED
+ }
+}
diff --git a/src/main/groovy/gl51/movie/data/MovieRequest.groovy b/src/main/groovy/gl51/movie/data/MovieRequest.groovy
new file mode 100644
index 0000000..e97f472
--- /dev/null
+++ b/src/main/groovy/gl51/movie/data/MovieRequest.groovy
@@ -0,0 +1,8 @@
+package gl51.movie.data
+
+/**Class representing a movie request**/
+class MovieRequest {
+
+ String imdbId;
+
+}
diff --git a/src/test/groovy/MovieControllerSpec.groovy b/src/test/groovy/MovieControllerSpec.groovy
new file mode 100644
index 0000000..57e0a5b
--- /dev/null
+++ b/src/test/groovy/MovieControllerSpec.groovy
@@ -0,0 +1,62 @@
+package gl51
+
+import gl51.movie.data.Movie
+import gl51.movie.data.MovieRequest
+import gl51.movie.service.MovieClient
+import gl51.movie.service.impl.MovieRegistryImpl
+import io.micronaut.http.client.annotation.Client
+import io.micronaut.runtime.server.EmbeddedServer
+import io.micronaut.test.annotation.MicronautTest
+import io.micronaut.http.client.RxHttpClient
+import io.micronaut.http.HttpResponse
+import io.micronaut.http.HttpStatus
+import io.reactivex.Flowable
+import spock.lang.AutoCleanup
+import spock.lang.Specification
+import spock.lang.Shared
+import io.micronaut.test.annotation.MockBean
+import io.micronaut.http.HttpRequest
+import io.micronaut.core.type.Argument
+
+import javax.inject.Inject
+
+@MicronautTest
+class MovieControllerSpec extends Specification {
+
+ @Shared @Inject
+ EmbeddedServer embeddedServer
+
+ @Shared @AutoCleanup @Inject @Client("/")
+ RxHttpClient client
+
+ @Inject
+ MovieRegistryImpl registry
+
+ void "test index"() {
+ given:
+ Flowable flowable = client.retrieve(HttpRequest.GET("/movie"), Argument.listOf(Movie))
+ def content = flowable.firstElement().blockingGet()
+ expect:
+ content == []
+ }
+
+ void "test film creation"() {
+ given:
+ HttpResponse response = client.toBlocking().exchange(
+ HttpRequest.POST("/movie", new MovieRequest(imdbId: "aaaaa"))
+ )
+ Flowable flowable = client.retrieve(HttpRequest.GET("/movie"), Argument.listOf(Movie))
+ def content = flowable.firstElement().blockingGet()
+ expect:
+ response.status == HttpStatus.CREATED
+ //content.find(it.title == 'my movie' && it.imdbId == "aaaaa")
+ }
+
+ @MockBean()
+ MovieClient movieClient() {
+ def mock = Mock(MovieClient)
+ mock.getMovieDetail("aaaaa") >> new Movie(imdbID: "aaaaa", title: 'my movie')
+ mock
+ }
+
+}