Skip to content

Commit

Permalink
Updating slides
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffscottbrown committed Nov 27, 2017
1 parent 2664617 commit 6ebb8cf
Show file tree
Hide file tree
Showing 11 changed files with 155 additions and 27 deletions.
9 changes: 9 additions & 0 deletions 3.3.x/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@ repositories {
maven { url "https://repo.grails.org/grails/core" }
}

// tag::begin_dependencies[]
dependencies {
// ...

// end::begin_dependencies[]
compile "org.springframework.boot:spring-boot-starter-logging"
compile "org.springframework.boot:spring-boot-autoconfigure"
compile "org.grails:grails-core"
Expand Down Expand Up @@ -64,8 +68,13 @@ dependencies {
testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1"
testRuntime "net.sourceforge.htmlunit:htmlunit:2.18"

// tag::http_builder[]
testCompile "org.grails:grails-datastore-rest-client"
// end::http_builder[]

// tag::end_dependencies[]
}
// end::end_dependencies[]

bootRun {
jvmArgs('-Dspring.output.ansi.enabled=always')
Expand Down
2 changes: 2 additions & 0 deletions 3.3.x/grails-app/conf/application.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
---
# tag::string_conversion[]
grails:
databinding:
convertEmptyStringsToNull: false
# end::string_conversion[]
---
grails:
profile: web
Expand Down
16 changes: 13 additions & 3 deletions 3.3.x/src/integration-test/groovy/demo/MusicFunctionalSpec.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ class MusicFunctionalSpec extends Specification {
resp.json.title == 'Red'
resp.json.genre == 'PROGRESSIVE_ROCK'

// ...
// end::create_albums[]

when:
resp = rest.post("http://localhost:${serverPort}/albums") {
json {
Expand Down Expand Up @@ -115,6 +118,7 @@ class MusicFunctionalSpec extends Specification {
resp.json.artistName == 'Motorhead'
resp.json.title == "No Sleep 'til Hammersmith"
resp.json.genre == 'HEAVY_METAL'
// tag::create_albums[]
}
// end::create_albums[]

Expand All @@ -139,6 +143,8 @@ class MusicFunctionalSpec extends Specification {
resp.json[1].artistName == 'Riverside'
resp.json[1].title == 'Love, Fear and the Time Machine'
resp.json[1].genre == 'PROGRESSIVE_ROCK'
// ...
// end::get_albums[]

and:
resp.json[3].artistName == 'Motorhead'
Expand All @@ -149,13 +155,14 @@ class MusicFunctionalSpec extends Specification {
resp.json[2].artistName == 'Johnny Winter'
resp.json[2].title == 'Progressive Blues Experiment'
resp.json[2].genre == 'BLUES'
// tag::get_albums[]
}
// end::get_albums[]

// tag::by_genre[]
void "test retrieving albums by genre"() {
when:
def resp = rest.get("http://localhost:${serverPort}/genre/PROGRESSIVE_ROCK/albums") // <1>
def resp = rest.get("http://localhost:${serverPort}/genre/PROGRESSIVE_ROCK/albums")
def contentType = resp.headers.getContentType()

then:
Expand All @@ -165,24 +172,27 @@ class MusicFunctionalSpec extends Specification {
resp.json.size() == 2

when:
resp = rest.get("http://localhost:${serverPort}/genre/HEAVY_METAL/albums") // <2>
resp = rest.get("http://localhost:${serverPort}/genre/HEAVY_METAL/albums")
contentType = resp.headers.getContentType()

then:
resp.status == OK.value()
contentType.subtype == 'json'
contentType.type == 'application'
resp.json.size() == 1
// ...
// end::by_genre[]

when:
resp = rest.get("http://localhost:${serverPort}/genre/BLUES/albums") // <3>
resp = rest.get("http://localhost:${serverPort}/genre/BLUES/albums")
contentType = resp.headers.getContentType()

then:
resp.status == OK.value()
contentType.subtype == 'json'
contentType.type == 'application'
resp.json.size() == 1
// tag::by_genre[]
}
// end::by_genre[]

Expand Down
27 changes: 27 additions & 0 deletions src/docs/asciidoc/controllers_traits.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
== Testing Controllers With Traits

== Controller

[source,groovy]
----
include::{projectdir}/3.3.x/grails-app/controllers/demo/DemoController.groovy[]
----

== Command Object Unit Test

[source,groovy]
----
include::{projectdir}/3.3.x/src/test/groovy/demo/DemoControllerSpec.groovy[tags=class_begin;command_object_spec;class_end]
----

== String Conversion Unit Test

[source,yml]
----
include::{projectdir}/3.3.x/grails-app/conf/application.yml[tags=string_conversion]
----

[source,groovy]
----
include::{projectdir}/3.3.x/src/test/groovy/demo/DemoControllerSpec.groovy[tags=class_begin;string_conversion_spec;class_end]
----
2 changes: 1 addition & 1 deletion src/docs/asciidoc/domain_classes.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

[source,groovy]
----
include::{projectdir}/3.2.x/grails-app/domain/demo/Person.groovy[]
include::{projectdir}/3.3.x/grails-app/domain/demo/Person.groovy[]
----

== Domain Class Validation Unit Test
Expand Down
15 changes: 15 additions & 0 deletions src/docs/asciidoc/domain_classes_traits.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
== Testing Domain Classes With Traits

== Domain Class

[source,groovy]
----
include::{projectdir}/3.3.x/grails-app/domain/demo/Person.groovy[]
----

== Domain Class Validation Unit Test

[source,groovy]
----
include::{projectdir}/3.3.x/src/test/groovy/demo/PersonSpec.groovy[tags=person_spec]
----
18 changes: 14 additions & 4 deletions src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
= Grails 3 Testing Overview
Jeff Scott Brown <brownj@objectcomputing.com> - @jeffscottbrown
:deckjs_transition: fade
= Groovy And Grails Testing Techniques
:deckjs_transition: horizontal-slide
:navigation:
:menu:
:goto:
:status:


include::oci.adoc[]

== Agenda

* Domain Classes
* Command Objects
* Tag Libraries
* Grails 3.3 Trait Based Testing Library
* GEB
* REST APIs
* Running Tests

Expand All @@ -24,6 +26,14 @@ include::services.adoc[]

include::tag_libraries.adoc[]

include::domain_classes_traits.adoc[]

include::controllers_traits.adoc[]

include::services_traits.adoc[]

include::tag_libraries_traits.adoc[]

include::geb.adoc[]

include::rest.adoc[]
Expand All @@ -32,7 +42,7 @@ include::running_tests.adoc[]

== Thank you!

* Slides and code : https://github.com/jeffbrown/testingdemo
* Slides and code : https://github.com/jeffbrown/ggtesting
* Jeff Scott Brown
* [email protected]
* @jeffscottbrown
12 changes: 7 additions & 5 deletions src/docs/asciidoc/oci.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,17 @@

* May 2015
** Jeff Brown and Graeme Rocher
* May 2017
** 17 Full Time
** 11 U.S. - 5 Europe - 1 Australia
* November 2017
** 18 Full Time
** 13 U.S. - 4 Europe - 1 Australia
* We Need More
** [email protected]


== Grails At OCI

* 30+ Releases Per Year
** 2.5.x, 3.0.x, 3.1.x, 3.2.x
** Working On 3.3
** 2.5.x, 3.0.x, 3.1.x, 3.2.x, 3.3.x
** Shorter Release Cycles
*** Easier To Upgrade
*** Less Time To Wait For Enhancements
25 changes: 11 additions & 14 deletions src/docs/asciidoc/rest.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,28 @@

[source,groovy]
----
include::{projectdir}/3.2.x/grails-app/domain/demo/Album.groovy[]
include::{projectdir}/3.3.x/grails-app/domain/demo/Album.groovy[]
----

== Rest Controller

[source,groovy]
----
include::{projectdir}/3.2.x/grails-app/controllers/demo/MusicController.groovy[tags=begin_class;class_end]
include::{projectdir}/3.3.x/grails-app/controllers/demo/MusicController.groovy[tags=begin_class;class_end]
----

== URL Mapping

[source,groovy]
----
include::{projectdir}/3.2.x/grails-app/controllers/testingdemo/UrlMappings.groovy[]
include::{projectdir}/3.3.x/grails-app/controllers/testingdemo/UrlMappings.groovy[]
----

== RestClient From Http Builder
== RestBuilder From Datastore Rest Client

[source,groovy]
----
include::{projectdir}/3.2.x/build.gradle[tags=begin_dependencies;http_builder;end_dependencies]
include::{projectdir}/3.3.x/build.gradle[tags=begin_dependencies;http_builder;end_dependencies]
----

== Create Integration Test
Expand All @@ -41,43 +41,40 @@ include::{projectdir}/3.2.x/build.gradle[tags=begin_dependencies;http_builder;en

[source,groovy]
----
include::{projectdir}/3.2.x/src/integration-test/groovy/demo/MusicFunctionalSpec.groovy[tags=begin_class;end_class]
include::{projectdir}/3.3.x/src/integration-test/groovy/demo/MusicFunctionalSpec.groovy[tags=begin_class;end_class]
----

== Test No Data

[source,groovy]
----
include::{projectdir}/3.2.x/src/integration-test/groovy/demo/MusicFunctionalSpec.groovy[tags=begin_class;no_albums;end_class]
include::{projectdir}/3.3.x/src/integration-test/groovy/demo/MusicFunctionalSpec.groovy[tags=begin_class;no_albums;end_class]
----

== Test Create Albums

[source,groovy]
----
include::{projectdir}/3.2.x/src/integration-test/groovy/demo/MusicFunctionalSpec.groovy[tags=begin_class;create_albums;end_class]
include::{projectdir}/3.3.x/src/integration-test/groovy/demo/MusicFunctionalSpec.groovy[tags=begin_class;create_albums;end_class]
----

== Test Retrieve Albums

[source,groovy]
----
include::{projectdir}/3.2.x/src/integration-test/groovy/demo/MusicFunctionalSpec.groovy[tags=begin_class;get_albums;end_class]
include::{projectdir}/3.3.x/src/integration-test/groovy/demo/MusicFunctionalSpec.groovy[tags=begin_class;get_albums;end_class]
----

== Query Filter

[source,groovy]
----
include::{projectdir}/3.2.x/grails-app/controllers/demo/MusicController.groovy[tags=begin_class;query_filter;class_end]
include::{projectdir}/3.3.x/grails-app/controllers/demo/MusicController.groovy[tags=begin_class;query_filter;class_end]
----

== Test Query Filter

[source,groovy]
----
include::{projectdir}/3.2.x/src/integration-test/groovy/demo/MusicFunctionalSpec.groovy[tags=begin_class;by_genre;end_class]
include::{projectdir}/3.3.x/src/integration-test/groovy/demo/MusicFunctionalSpec.groovy[tags=begin_class;by_genre;end_class]
----
<1> /albums?genre=PROGRESSIVE_ROCK
<2> /albums?genre=HEAVY_METAL
<3> /albums?genre=BLUES
20 changes: 20 additions & 0 deletions src/docs/asciidoc/services_traits.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
== Testing Services With Traits

== Services

[source,groovy]
----
include::{projectdir}/3.3.x/grails-app/services/demo/MoneyService.groovy[]
----

[source,groovy]
----
include::{projectdir}/3.3.x/grails-app/services/demo/BankService.groovy[]
----

== Configuring Beans In Test

[source,groovy]
----
include::{projectdir}/3.3.x/src/test/groovy/demo/MoneyServiceSpec.groovy[]
----
36 changes: 36 additions & 0 deletions src/docs/asciidoc/tag_libraries_traits.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
== Testing Tag Libraries With Traits

== Tag Library

[source,groovy]
----
include::{projectdir}/3.3.x/grails-app/taglib/demo/HelperTagLib.groovy[]
----

== Testing Simple Tag

[source,groovy]
----
include::{projectdir}/3.3.x/src/test/groovy/demo/HelperTagLibSpec.groovy[tags=class_begin;test_simple_tag;class_end]
----

== Testing Tag With Body

[source,groovy]
----
include::{projectdir}/3.3.x/src/test/groovy/demo/HelperTagLibSpec.groovy[tags=class_begin;test_repeat;class_end]
----

== Testing Tag With Body

[source,groovy]
----
include::{projectdir}/3.3.x/src/test/groovy/demo/HelperTagLibSpec.groovy[tags=class_begin;test_repeat_no_count;class_end]
----

== Testing Tag Method Call

[source,groovy]
----
include::{projectdir}/3.3.x/src/test/groovy/demo/HelperTagLibSpec.groovy[tags=class_begin;test_method_call;class_end]
----

0 comments on commit 6ebb8cf

Please sign in to comment.