Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/blank.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
3 changes: 3 additions & 0 deletions README.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Projet GL51
[![CodeFactor](https://www.codefactor.io/repository/github/hawlink/gl51td1/badge)](https://www.codefactor.io/repository/github/hawlink/gl51td1)
![CI](https://github.com/Hawlink/GL51TD1/workflows/CI/badge.svg)
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}


Expand Down
14 changes: 14 additions & 0 deletions config/codenarc/codenarc.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<ruleset xmlns="http://codenarc.org/ruleset/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://codenarc.org/ruleset/1.0 http://codenarc.org/ruleset-schema.xsd"
xsi:noNamespaceSchemaLocation="http://codenarc.org/ruleset-schema.xsd">

<description>Sample rule set</description>

<ruleset-ref path='rulesets/imports.xml'>
</ruleset-ref>
<ruleset-ref path='rulesets/basic.xml'>
</ruleset-ref>
<ruleset-ref path='rulesets/naming.xml'>
</ruleset-ref>
</ruleset>
30 changes: 30 additions & 0 deletions src/main/groovy/gl51/MovieController.groovy
Original file line number Diff line number Diff line change
@@ -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<Movie> index() {
registry.listFavorites()
}

@Post('/')
HttpStatus addMovie(MovieRequest movieRequest) {
registry.addMovieToFavorites(movieRequest.imdbId)
HttpStatus.CREATED
}
}
8 changes: 8 additions & 0 deletions src/main/groovy/gl51/movie/data/MovieRequest.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package gl51.movie.data

/**Class representing a movie request**/
class MovieRequest {

String imdbId;

}
62 changes: 62 additions & 0 deletions src/test/groovy/MovieControllerSpec.groovy
Original file line number Diff line number Diff line change
@@ -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
}

}