diff --git a/commerce_pos.libraries.yml b/commerce_pos.libraries.yml
index d4c1864..bfee33f 100644
--- a/commerce_pos.libraries.yml
+++ b/commerce_pos.libraries.yml
@@ -2,4 +2,4 @@ form:
   version: VERSION
   css:
     layout:
-      css/commerce_pos.module.css: {}
\ No newline at end of file
+      css/commerce_pos.module.css: {}
diff --git a/modules/receipt/README.md b/modules/receipt/README.md
new file mode 100644
index 0000000..37a9924
--- /dev/null
+++ b/modules/receipt/README.md
@@ -0,0 +1,5 @@
+The receipt submodule provides for receipt printing. You may configure custom
+receipt header/footer at admin/commerce/config/pos/receipt.
+
+This module depends on the jQuery plugin receipt-print which you will find
+in your /libraries directory.
diff --git a/modules/receipt/commerce_pos_receipt.info.yml b/modules/receipt/commerce_pos_receipt.info.yml
new file mode 100644
index 0000000..628b5f2
--- /dev/null
+++ b/modules/receipt/commerce_pos_receipt.info.yml
@@ -0,0 +1,8 @@
+name: commerce_pos_receipt
+description: Provides receipts printing for Commerce Point of Sale
+type: module
+core: 8.x
+package: Commerce (POS)
+configure: commerce_pos_receipt.settings
+dependencies:
+  - commerce_pos
diff --git a/modules/receipt/commerce_pos_receipt.install b/modules/receipt/commerce_pos_receipt.install
new file mode 100644
index 0000000..256dcee
--- /dev/null
+++ b/modules/receipt/commerce_pos_receipt.install
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @file
+ * Contains commerce_pos_receipt.install.
+ */
+
+/**
+ * Implements hook_uninstall().
+ */
+function commerce_pos_receipt_uninstall() {
+  // Remove states.
+  Drupal::state()->delete('commerce_pos_receipt.header');
+  Drupal::state()->delete('commerce_pos_receipt.footer');
+}
diff --git a/modules/receipt/commerce_pos_receipt.libraries.yml b/modules/receipt/commerce_pos_receipt.libraries.yml
new file mode 100755
index 0000000..08a779b
--- /dev/null
+++ b/modules/receipt/commerce_pos_receipt.libraries.yml
@@ -0,0 +1,14 @@
+receipt:
+  version: 1.x
+  css:
+    theme:
+      css/commerce_pos_receipt.css: {}
+jQuery.print:
+  remote: https://github.com/DoersGuild/jQuery.print
+  version: 1.5.1
+  license:
+    name: CC BY 3.0
+    url: https://github.com/DoersGuild/jQuery.print/blob/master/LICENSE
+    gpl-compatible: no
+  js:
+    /libraries/jQuery.print/jQuery.print.js: {}
diff --git a/modules/receipt/commerce_pos_receipt.links.menu.yml b/modules/receipt/commerce_pos_receipt.links.menu.yml
new file mode 100755
index 0000000..9553324
--- /dev/null
+++ b/modules/receipt/commerce_pos_receipt.links.menu.yml
@@ -0,0 +1,6 @@
+commerce_pos_receipt.configuration:
+  title: 'Receipt Configuration'
+  parent: commerce_pos.configuration
+  description: 'Configure the header and footers of the POS receipts.'
+  route_name: commerce_pos_receipt.settings
+  weight: 25
diff --git a/modules/receipt/commerce_pos_receipt.module b/modules/receipt/commerce_pos_receipt.module
new file mode 100644
index 0000000..43ab9ac
--- /dev/null
+++ b/modules/receipt/commerce_pos_receipt.module
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ * @file
+ * Contains commerce_pos_receipt.module.
+ */
+
+use Drupal\commerce_price\Entity\Currency;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Url;
+
+/**
+ * Implements hook_help().
+ */
+function commerce_pos_receipt_help($route_name, RouteMatchInterface $route_match) {
+  switch ($route_name) {
+    // Main module help for the commerce_pos_receipt module.
+    case 'help.page.commerce_pos_receipt':
+      $output = '';
+      $output .= '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('Provides receipt printing for Commerce Point of Sale') . '</p>';
+      return $output;
+  }
+}
+
+/**
+ * Implements hook_theme().
+ */
+function commerce_pos_receipt_theme() {
+  return [
+    'commerce_pos_receipt' => [
+      'variables' => ['commerce_payment' => NULL],
+    ],
+  ];
+}
+
+/**
+ * Implements template_preprocess_HOOK().
+ */
+function commerce_pos_receipt_preprocess_commerce_pos_receipt(&$variables) {
+  /* @var \Drupal\commerce_payment\Entity\Payment $commerce_payment */
+  $commerce_payment = &$variables['commerce_payment'];
+
+  /* @var \Drupal\commerce_order\Entity\Order $order */
+  $order = $commerce_payment->getOrder();
+
+  $number_formatter_factory = \Drupal::service('commerce_price.number_formatter_factory');
+  $number_formatter = $number_formatter_factory->createInstance();
+
+  $sub_total_price = $order->getSubtotalPrice();
+  $currency = Currency::load($sub_total_price->getCurrencyCode());
+  $formatted_amount = $number_formatter->formatCurrency($sub_total_price->getNumber(), $currency);
+
+  $items = $order->getItems();
+  foreach ($items as $item) {
+    $totals[] = [$item->getTitle(), $item->getAdjustedTotalPrice()];
+  }
+
+  $totals[] = ['Subtotal', $formatted_amount];
+
+  // Commerce appears to have a bug where if not adjustments exist, it will
+  // return a 0 => null array, which will still trigger a foreach loop.
+  foreach ($order->collectAdjustments() as $key => $adjustment) {
+    if (!empty($adjustment)) {
+      $amount = $adjustment->getAmount();
+      $currency = Currency::load($amount->getCurrencyCode());
+      $formatted_amount = $number_formatter->formatCurrency($amount->getNumber(), $currency);
+
+      $totals[] = [
+        $adjustment->getLabel(),
+        $formatted_amount,
+      ];
+    }
+  }
+
+  // Collecting the total price on the cart.
+  $total_price = $order->getTotalPrice();
+  $currency = Currency::load($amount->getCurrencyCode());
+  $formatted_amount = $number_formatter->formatCurrency($total_price->getNumber(), $currency);
+
+  $totals[] = ['Total', $formatted_amount];
+  $totals[] = ['Payment', $commerce_payment->getState()->getLabel()];
+
+  $config = Drupal::config('commerce_pos_receipt.settings');
+  $variables['receipt'] = [
+    'header' => [
+      '#markup' => check_markup($config->get('header'), $config->get('header_format')),
+    ],
+    'body' => [
+      '#type' => 'table',
+      '#rows' => $totals,
+    ],
+    'footer' => [
+      '#markup' => check_markup($config->get('footer'), $config->get('footer_format')),
+    ],
+  ];
+
+  // $variables['#attached']['library'][] = 'commerce/pos-receipt';.
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter() for form changing.
+ */
+function commerce_pos_receipt_form_commerce_pos_alter(&$form, FormStateInterface $form_state, $form_id) {
+  $form['receipt'] = [
+    '#type' => 'container',
+  ];
+
+  $form['receipt']['contents'] = [
+    '#markup' => '<div id="commerce-pos-receipt"></div>',
+  ];
+
+  $form['receipt']['reprint'] = [
+    '#title' => t('reprint receipt'),
+    '#type' => 'link',
+    '#url' => URL::fromRoute('commerce_pos_receipt.print', ['commerce_payment' => 1], [
+      'attributes' => [
+        'class' => ['use-ajax'],
+      ],
+    ]),
+  ];
+
+}
diff --git a/modules/receipt/commerce_pos_receipt.permissions.yml b/modules/receipt/commerce_pos_receipt.permissions.yml
new file mode 100644
index 0000000..5d5153e
--- /dev/null
+++ b/modules/receipt/commerce_pos_receipt.permissions.yml
@@ -0,0 +1,3 @@
+administer pos receipt:
+  title: 'Administer POS receipt settings'
+  restrict access: TRUE
diff --git a/modules/receipt/commerce_pos_receipt.routing.yml b/modules/receipt/commerce_pos_receipt.routing.yml
new file mode 100644
index 0000000..d27ff02
--- /dev/null
+++ b/modules/receipt/commerce_pos_receipt.routing.yml
@@ -0,0 +1,19 @@
+commerce_pos_receipt.print:
+  path: '/admin/commerce/pos/{commerce_payment}/print-receipt'
+  defaults:
+    _controller: '\Drupal\commerce_pos_receipt\Controller\PrintController::printReceipt'
+    _title: 'Print Transaction Receipt'
+  options:
+    parameters:
+      commerce_payment:
+        type: 'entity:commerce_payment'
+  requirements:
+    _custom_access: '\Drupal\commerce_pos_receipt\Controller\PrintController::access'
+    commerce_order: \d+
+
+commerce_pos_receipt.settings:
+  path: '/admin/commerce/config/pos/receipt'
+  defaults:
+    _form: '\Drupal\commerce_pos_receipt\Form\ReceiptSettingsForm'
+  requirements:
+    _permission: 'administer pos receipt'
diff --git a/modules/receipt/config/install/commerce_pos_receipt.settings.yml b/modules/receipt/config/install/commerce_pos_receipt.settings.yml
new file mode 100644
index 0000000..dffe30e
--- /dev/null
+++ b/modules/receipt/config/install/commerce_pos_receipt.settings.yml
@@ -0,0 +1,4 @@
+header: "(logo??)<br />Company Name/Store#<br />Address line 1<br />Address line 2<br />Phone #"
+footer: "Thanks for shopping at CompanyName!<br />Return Policy --<br />Exchange Policy --<br />Company Motto<br />Website --<br /><br />(optional)<br />Visit our website for a chance to --"
+header_format: "html"
+footer_format: "html"
diff --git a/modules/receipt/config/schema/commerce_pos_receipt.schema.yml b/modules/receipt/config/schema/commerce_pos_receipt.schema.yml
new file mode 100644
index 0000000..640f15d
--- /dev/null
+++ b/modules/receipt/config/schema/commerce_pos_receipt.schema.yml
@@ -0,0 +1,18 @@
+# Schema for the configuration files of the Receipt module.
+
+commerce_pos_receipt.settings:
+  type: config_object
+  label: 'Receipt settings'
+  mapping:
+    header:
+      type: string
+      label: 'Header'
+    footer:
+      type: string
+      label: 'Footer'
+    header_format:
+      type: string
+      label: Header format
+    footer_format:
+      type: string
+      label: Footer format
diff --git a/modules/receipt/css/commerce_pos_receipt.css b/modules/receipt/css/commerce_pos_receipt.css
new file mode 100644
index 0000000..55240a5
--- /dev/null
+++ b/modules/receipt/css/commerce_pos_receipt.css
@@ -0,0 +1,86 @@
+@page {
+  margin: 5mm;
+  size: 72mm 200mm;
+}
+.pos-receipt {
+  color: #000;
+  font-family: Arial, sans-serif;
+  font-size: 16px;
+  font-weight: bold;
+  text-transform: uppercase;
+}
+
+.pos-receipt .pos-order-info {
+  margin-bottom: 1em;
+  padding-bottom: 1em;
+  border-bottom: 1px dashed #000;
+}
+
+/* BASIC TABLE STYLES */
+.pos-receipt table {
+  width: 100%;
+  padding-bottom: 1em;
+  margin-bottom: 1em;
+  border-bottom: 1px dashed #000;
+}
+
+.pos-receipt td,
+.pos-receipt th {
+  text-align: left;
+  font-size: 16px;
+  font-weight: bold;
+  text-transform: uppercase;
+}
+
+.pos-receipt .payment-no-total td .payment-name,
+.pos-receipt .payment-no-total td.component-total {
+  text-decoration: line-through;
+}
+
+.pos-receipt .payment-no-total td span.commerce-pos-receipt-void-message {
+  text-decoration: none;
+}
+
+.pos-receipt .payment-status-void td span.commerce-pos-receipt-void-message {
+  text-decoration: none;
+}
+
+.pos-receipt td.component-total {
+  text-align: right;
+}
+
+.pos-receipt .receipt-hide {
+  display: none;
+}
+
+.pos-receipt .receipt-header,
+.pos-receipt .receipt-footer {
+  text-align: center;
+}
+
+.pos-receipt .receipt-header {
+  margin-bottom: 1em;
+  padding-bottom: 1em;
+  border-bottom: 1px dashed black;
+}
+
+.pos-receipt .receipt-footer {
+  margin-top: 1em;
+  padding-top: 1em;
+  margin-bottom: 1em;
+}
+
+.pos-receipt tr.line-item td,
+.pos-receipt tr.line-item-details td {
+  border-bottom: 1px solid #000;
+}
+
+.pos-receipt tr.line-item.has-details td {
+  border-bottom: 0;
+}
+
+.pos-receipt tr.last td {
+  border-bottom: 0;
+}
+
+/*# sourceMappingURL=commerce_pos_receipt.css.map */
diff --git a/modules/receipt/css/commerce_pos_receipt.css.map b/modules/receipt/css/commerce_pos_receipt.css.map
new file mode 100644
index 0000000..70fc4c4
--- /dev/null
+++ b/modules/receipt/css/commerce_pos_receipt.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "AAAA,KAGC;EAFC,MAAM,EAAE,GAAG;EACX,IAAI,EAAE,UAAU;AAElB,YAAa;EACX,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,iBAAiB;EAC9B,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,SAAS;;AAE3B,4BAA6B;EAC3B,aAAa,EAAE,GAAG;EAClB,cAAc,EAAE,GAAG;EACnB,aAAa,EAAE,eAAe;;AAIhC,wBAAwB;AACxB,kBAAmB;EACjB,KAAK,EAAE,IAAI;EACX,cAAc,EAAE,GAAG;EACnB,aAAa,EAAE,GAAG;EAClB,aAAa,EAAE,eAAe;;AAEhC;eACgB;EACd,UAAU,EAAE,IAAI;EAChB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,SAAS;;AAE3B;iDACkD;EAChD,eAAe,EAAE,YAAY;;AAE/B,wEAAyE;EACvE,eAAe,EAAE,IAAI;;AAEvB,2EAA4E;EAC1E,eAAe,EAAE,IAAI;;AAEvB,+BAAgC;EAC9B,UAAU,EAAE,KAAK;;AAEnB,0BAA2B;EACzB,OAAO,EAAE,IAAI;;AAEf;4BAC6B;EAC3B,UAAU,EAAE,MAAM;;AAEpB,4BAA6B;EAC3B,aAAa,EAAE,GAAG;EAClB,cAAc,EAAE,GAAG;EACnB,aAAa,EAAE,gBAAgB;;AAEjC,4BAA6B;EAC3B,UAAU,EAAE,GAAG;EACf,WAAW,EAAE,GAAG;EAChB,aAAa,EAAE,GAAG;;AAEpB,qCAAsC;EACpC,kBAAkB;;AAEpB;oCACqC;EACnC,aAAa,EAAE,cAAc;;AAE/B,wCAAyC;EACvC,aAAa,EAAE,CAAC;;AAElB,uBAAwB;EACtB,aAAa,EAAE,CAAC",
+"sources": ["../sass/commerce_pos_receipt.scss"],
+"names": [],
+"file": "commerce_pos_receipt.css"
+}
diff --git a/modules/receipt/sass/commerce_pos_receipt.scss b/modules/receipt/sass/commerce_pos_receipt.scss
new file mode 100644
index 0000000..20f2fbd
--- /dev/null
+++ b/modules/receipt/sass/commerce_pos_receipt.scss
@@ -0,0 +1,75 @@
+@page {
+  margin: 5mm;
+  size: 72mm 200mm;
+}
+.pos-receipt {
+  color: #000;
+  font-family: Arial, sans-serif;
+  font-size: 16px;
+  font-weight: bold;
+  text-transform: uppercase;
+}
+.pos-receipt .pos-order-info {
+  margin-bottom: 1em;
+  padding-bottom: 1em;
+  border-bottom: 1px dashed #000;
+}
+.pos-receipt .pos-order-info .transaction-type {
+}
+/* BASIC TABLE STYLES */
+.pos-receipt table {
+  width: 100%;
+  padding-bottom: 1em;
+  margin-bottom: 1em;
+  border-bottom: 1px dashed #000;
+}
+.pos-receipt td,
+.pos-receipt th {
+  text-align: left;
+  font-size: 16px;
+  font-weight: bold;
+  text-transform: uppercase;
+}
+.pos-receipt .payment-no-total td .payment-name,
+.pos-receipt .payment-no-total td.component-total {
+  text-decoration: line-through;
+}
+.pos-receipt .payment-no-total td span.commerce-pos-receipt-void-message {
+  text-decoration: none;
+}
+.pos-receipt .payment-status-void td span.commerce-pos-receipt-void-message {
+  text-decoration: none;
+}
+.pos-receipt td.component-total {
+  text-align: right;
+}
+.pos-receipt .receipt-hide {
+  display: none;
+}
+.pos-receipt .receipt-header,
+.pos-receipt .receipt-footer {
+  text-align: center;
+}
+.pos-receipt .receipt-header {
+  margin-bottom: 1em;
+  padding-bottom: 1em;
+  border-bottom: 1px dashed black;
+}
+.pos-receipt .receipt-footer {
+  margin-top: 1em;
+  padding-top: 1em;
+  margin-bottom: 1em;
+}
+.pos-receipt table.commerce-pos-order {
+  /*margin: 1em 0;*/
+}
+.pos-receipt tr.line-item td,
+.pos-receipt tr.line-item-details td {
+  border-bottom: 1px solid #000;
+}
+.pos-receipt tr.line-item.has-details td {
+  border-bottom: 0;
+}
+.pos-receipt tr.last td {
+  border-bottom: 0;
+}
diff --git a/modules/receipt/src/Controller/PrintController.php b/modules/receipt/src/Controller/PrintController.php
new file mode 100644
index 0000000..81e076b
--- /dev/null
+++ b/modules/receipt/src/Controller/PrintController.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Drupal\commerce_pos_receipt\Controller;
+
+use Drupal\Core\Access\AccessResult;
+use Drupal\Core\Ajax\AjaxResponse;
+use Drupal\Core\Ajax\ReplaceCommand;
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\commerce_payment\Entity\Payment;
+
+/**
+ * Class PrintController.
+ */
+class PrintController extends ControllerBase {
+
+  /**
+   * An access callback.
+   */
+  public function access(AccountInterface $account, Payment $commerce_payment) {
+    $access = FALSE;
+
+    if ($account->hasPermission('administer commerce pos')) {
+      $access = TRUE;
+    }
+    else {
+      if ($account->hasPermission('process commerce pos sales')) {
+        // TODO assume this is a temporary override for testing?
+        if (TRUE) {
+          $access = TRUE;
+        }
+      }
+    }
+
+    return AccessResult::allowedIf($access);
+  }
+
+  /**
+   * A controller callback.
+   */
+  public function printReceipt(Payment $commerce_payment) {
+    $renderer = \Drupal::service('renderer');
+
+    $receipt = [
+      '#theme' => 'commerce_pos_receipt',
+      '#commerce_payment' => $commerce_payment,
+    ];
+
+    $response = new AjaxResponse();
+    $response->addCommand(new ReplaceCommand('#commerce-pos-receipt', $renderer->render($receipt)));
+
+    return $response;
+  }
+
+}
diff --git a/modules/receipt/src/Form/ReceiptSettingsForm.php b/modules/receipt/src/Form/ReceiptSettingsForm.php
new file mode 100644
index 0000000..9a8e467
--- /dev/null
+++ b/modules/receipt/src/Form/ReceiptSettingsForm.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Drupal\commerce_pos_receipt\Form;
+
+use Drupal\Core\Form\ConfigFormBase;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Define a Configuration form for persisting header/footer.
+ */
+class ReceiptSettingsForm extends ConfigFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+
+    $header = $this->config('commerce_pos_receipt.settings')->get('header');
+    $footer = $this->config('commerce_pos_receipt.settings')->get('footer');
+
+    $form['commerce_pos_receipt_header'] = [
+      '#type' => 'text_format',
+      '#title' => t('Header text'),
+      '#description' => t('This text will appear at the top of printed receipts.'),
+      '#default_value' => $header,
+      '#format' => NULL,
+    ];
+
+    $form['commerce_pos_receipt_footer'] = [
+      '#type' => 'text_format',
+      '#title' => t('Footer text'),
+      '#description' => t('This text will appear at the bottom of printed receipts.'),
+      '#default_value' => $footer,
+      '#format' => NULL,
+    ];
+
+    return parent::buildForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    parent::submitForm($form, $form_state);
+
+    $values = $form_state->getValues();
+    $this->config('commerce_pos_receipt.settings')
+      ->set('header', $values['commerce_pos_receipt_header']['value'])
+      ->set('footer', $values['commerce_pos_receipt_footer']['value'])
+      ->set('header_format', $values['commerce_pos_receipt_header']['format'])
+      ->set('footer_format', $values['commerce_pos_receipt_footer']['format'])
+      ->save();
+  }
+
+  /**
+   * Gets the configuration names that will be editable.
+   *
+   * @return array
+   *   An array of configuration object names that are editable if called in
+   *   conjunction with the trait's config() method.
+   */
+  protected function getEditableConfigNames() {
+    return [
+      'commerce_pos_receipt.settings',
+    ];
+  }
+
+  /**
+   * Returns a unique string identifying the form.
+   *
+   * @return string
+   *   The unique string identifying the form.
+   */
+  public function getFormId() {
+    return 'commerce_pos_receipt_settings';
+  }
+
+}
diff --git a/modules/receipt/templates/commerce-pos-receipt.html.twig b/modules/receipt/templates/commerce-pos-receipt.html.twig
new file mode 100644
index 0000000..f6a40c7
--- /dev/null
+++ b/modules/receipt/templates/commerce-pos-receipt.html.twig
@@ -0,0 +1,18 @@
+{#
+/**
+* @file
+* Receipt document.
+*
+* Available variables:
+* - receipt: The receipt.
+*
+* @ingroup themeable
+*/
+#}
+
+{{ attach_library('commerce_pos_receipt/receipt') }}
+<div class="commerce-pos-receipt">
+    <div class="receipt-header">{{ receipt.header }}</div>
+    <div class="receipt-body">{{ receipt.body }}</div>
+    <div class="receipt-footer">{{ receipt.footer }}</div>
+</div>
diff --git a/modules/receipt/tests/src/Functional/LoadTest.php b/modules/receipt/tests/src/Functional/LoadTest.php
new file mode 100644
index 0000000..9e6fe69
--- /dev/null
+++ b/modules/receipt/tests/src/Functional/LoadTest.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace Drupal\Tests\commerce_pos_receipt\Functional;
+
+use Drupal\Core\Url;
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Simple test to ensure that main page loads with module enabled.
+ *
+ * @group commerce_pos_receipt
+ */
+class LoadTest extends BrowserTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['commerce_pos_receipt'];
+
+  /**
+   * A user with permission to administer site configuration.
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $user;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->user = $this->drupalCreateUser(['administer site configuration']);
+    $this->drupalLogin($this->user);
+  }
+
+  /**
+   * Tests that the home page loads with a 200 response.
+   */
+  public function testLoad() {
+    $this->drupalGet(Url::fromRoute('<front>'));
+    $this->assertResponse(200);
+  }
+
+}
