diff --git a/ansible/provision.yml b/ansible/provision.yml
index fb6abb4cb..7fca4d88c 100644
--- a/ansible/provision.yml
+++ b/ansible/provision.yml
@@ -158,6 +158,7 @@
rewrite ^/blog/2018/03/04/tweets-from-drupalcamp-london/?$ /blog/tweets-from-drupalcamp-london permanent;
rewrite ^/blog/2018/05/06/creating-a-custom-phpunit-command-for-docksal/?$ /blog/creating-a-custom-phpunit-command-for-docksal permanent;
rewrite ^/blog/announcing-the-drupal-vm-generator/?$ /blog/announcing-the-drupal-vm-config-generator permanent;
+ rewrite ^/book/?$ /test-driven-drupal permanent;
rewrite ^/consulting/?$ / permanent;
rewrite ^/cv/?$ https://gitprint.com/opdavies/cv/blob/master/README.md permanent;
rewrite ^/drupalgive/?$ https://www.drupal.org/u/opdavies permanent;
diff --git a/source/_posts/2013-06-13-some-useful-links-using-simpletest-drupal.md b/source/_posts/2013-06-13-some-useful-links-using-simpletest-drupal.md
index 8cbb910de..d702e00ba 100644
--- a/source/_posts/2013-06-13-some-useful-links-using-simpletest-drupal.md
+++ b/source/_posts/2013-06-13-some-useful-links-using-simpletest-drupal.md
@@ -7,6 +7,7 @@ tags:
- test-driven-development
- drupal-planet
- drupal
+ - testing
use: [posts]
---
{% block excerpt %}
diff --git a/source/_posts/2018-05-06-creating-custom-docksal-commands.md b/source/_posts/2018-05-06-creating-custom-docksal-commands.md
index 9a8e16f06..5e8b340ae 100644
--- a/source/_posts/2018-05-06-creating-custom-docksal-commands.md
+++ b/source/_posts/2018-05-06-creating-custom-docksal-commands.md
@@ -7,6 +7,7 @@ tags:
- drupal-8
- drupal-planet
- phpunit
+ - testing
---
## What is Docksal?
diff --git a/source/test-driven-drupal.md b/source/test-driven-drupal.md
new file mode 100644
index 000000000..c4d16da61
--- /dev/null
+++ b/source/test-driven-drupal.md
@@ -0,0 +1,62 @@
+---
+layout: page
+title: 'Test Driven Drupal: The Book'
+mailchimp_url: 'https://oliverdavi.us18.list-manage.com/subscribe/post?u=b4ac8dd177796d37b93f9c285&id=033c84e0d5'
+contact_email: 'oliver@testdrivendrupal.com'
+---
+Having [given talks][1] and [written blog posts][0] about automated testing in Drupal, I’m currently in the planning phase of a book and potentially some accompanying screencasts about it, focussing on Drupal 8.
+
+I’m still thinking about what use-cases to cover and examples to include, but here are some of the things I’m considering:
+
+- What things to test, and what not to test
+- The different types of available tests, and when to use each
+- How to write testable code
+- How to run tests in the Drupal UI
+- How to run tests with the `run-tests.sh` script
+- How to install, configure and run tests with PHPUnit in Drupal 8
+- How to write your first test
+- How to organise your test files
+- Selecting the right base class and using test traits
+- Writing your own base test classes, traits and assertions
+- Managing dependencies for your tests (fields, configuration)
+- Creating users, checking access with roles and permissions
+- Creating pages and blocks with Views and testing the output
+- Creating pages with routes and controllers and testing the output
+- Testing custom plugins
+- Testing queuing items and processing queues
+- Testing sending emails
+- Testing custom Twig filters and functions
+<!-- - Testing data migrations -->
+<!-- - Building and testing APIs using RESTful web services module -->
+- Running tests as part of your continuous integration pipeline
+
+I’ll most likely be publishing it via Leanpub, and will be sending free chapters, early-bird discounts and links to screencasts and blog posts as I write the book to subscribers of the mailing list.
+
+If you have questions or would like to suggest something for me to include in the book, please <a href="mailto:{{ page.contact_email }}">contact me</a>.
+
+## Mailing List
+
+<div id="mc_embed_signup">
+ <form action="{{ page.mailchimp_url }}" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate p-0" target="_blank" novalidate>
+ <div id="mc_embed_signup_scroll">
+ <div class="mc-field-group w-full lg:w-1/2 pb-3 font-bold">
+ <label for="mce-EMAIL">Subscribe to the Test Driven Drupal mailing list <span class="asterisk">*</span>
+ </label>
+ <input type="email" value="" name="EMAIL" class="required email p-3" id="mce-EMAIL" style="text-indent: 0">
+ </div>
+ <div id="mce-responses" class="clear p-0 m-0">
+ <div class="response p-0" id="mce-error-response" style="display: none"></div>
+ <div class="response p-0" id="mce-success-response" style="display: none"></div>
+ </div>
+ <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_b4ac8dd177796d37b93f9c285_033c84e0d5" tabindex="-1" value=""></div>
+ <div class="clear"><button type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="bg-blue text-white border-0 px-4 py-3 m-0">Subscribe</button>
+ </div>
+ </div>
+ </form>
+</div>
+<link href="//cdn-images.mailchimp.com/embedcode/classic-10_7.css" rel="stylesheet" type="text/css">
+<script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script><script type='text/javascript'>(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';}(jQuery));var $mcj = jQuery.noConflict(true);</script>
+
+[0]: {{site.url}}/blog/tags/testing
+[1]: {{site.url}}/talks/tdd-test-driven-drupal
+[2]: {{site.url}}/contact
diff --git a/tailwind.js b/tailwind.js
index 4080e7f56..50a897363 100644
--- a/tailwind.js
+++ b/tailwind.js
@@ -294,4 +294,10 @@ module.exports = {
packages: {
},
+ options: {
+ important: true,
+ separator: ':',
+ prefix: ''
+ }
+
}