diff --git a/tests/javascripts/colourPreview.test.js b/tests/javascripts/colourPreview.test.js
new file mode 100644
index 000000000..92a511781
--- /dev/null
+++ b/tests/javascripts/colourPreview.test.js
@@ -0,0 +1,139 @@
+const helpers = require('./support/helpers.js');
+
+beforeAll(() => {
+ require('../../app/assets/javascripts/colourPreview.js');
+});
+
+afterAll(() => {
+ require('./support/teardown.js');
+});
+
+describe('Colour preview', () => {
+
+ let field;
+ let textbox;
+ let swatchEl;
+
+ beforeEach(() => {
+
+ // set up DOM
+ document.body.innerHTML = `
+
+
+
+
`;
+
+ field = document.querySelector('.form-group');
+ textbox = document.querySelector('input[type=text]');
+
+ });
+
+ afterEach(() => {
+
+ document.body.innerHTML = '';
+
+ });
+
+ describe("When the page loads", () => {
+
+ test("It should add a swatch element for the preview", () => {
+
+ // start the module
+ window.GOVUK.modules.start();
+
+ swatchEl = document.querySelector('.textbox-colour-preview');
+
+ expect(swatchEl).not.toBeNull();
+
+ });
+
+ test("If the textbox is empty it should make the swatch white", () => {
+
+ // start the module
+ window.GOVUK.modules.start();
+
+ swatchEl = document.querySelector('.textbox-colour-preview');
+
+ // textbox defaults to empty
+ // colours are output in RGB
+ expect(swatchEl.style.background).toEqual('rgb(255, 255, 255)');
+
+ });
+
+ test("If the textbox has a value which is a hex code it should add that colour to the swatch", () => {
+
+ textbox.setAttribute('value', '#00FF00');
+
+ // start the module
+ window.GOVUK.modules.start();
+
+ swatchEl = document.querySelector('.textbox-colour-preview');
+
+ // colours are output in RGB
+ expect(swatchEl.style.background).toEqual('rgb(0, 255, 0)');
+
+ });
+
+ test("If the textbox has a value which isn't a hex code it should make the swatch white", () => {
+
+ textbox.setAttribute('value', 'green');
+
+ // start the module
+ window.GOVUK.modules.start();
+
+ swatchEl = document.querySelector('.textbox-colour-preview');
+
+ // colours are output in RGB
+ expect(swatchEl.style.background).toEqual('rgb(255, 255, 255)');
+
+ });
+
+ });
+
+ describe("When input is added to the textbox", () => {
+
+ beforeEach(() => {
+
+ // start the module
+ window.GOVUK.modules.start();
+
+ swatchEl = document.querySelector('.textbox-colour-preview');
+
+ });
+
+ test("If the textbox is empty it should make the swatch white", () => {
+
+ helpers.triggerEvent(document.querySelector('input[type=text]'), 'input');
+
+ // textbox defaults to empty
+ expect(swatchEl.style.background).toEqual('rgb(255, 255, 255)');
+
+ });
+
+ test("If the textbox has a value which is a hex code it should add that colour to the swatch", () => {
+
+ textbox.setAttribute('value', '#00FF00');
+
+ helpers.triggerEvent(document.querySelector('input[type=text]'), 'input');
+
+ // textbox defaults to empty
+ expect(swatchEl.style.background).toEqual('rgb(0, 255, 0)');
+
+ });
+
+ test("If the textbox has a value which isn't a hex code it should make the swatch white", () => {
+
+ textbox.setAttribute('value', 'green');
+
+ helpers.triggerEvent(document.querySelector('input[type=text]'), 'input');
+
+ // textbox defaults to empty
+ expect(swatchEl.style.background).toEqual('rgb(255, 255, 255)');
+
+ });
+
+ });
+
+});