From 1923cb518d33d213361aa60087c695834b17a1a5 Mon Sep 17 00:00:00 2001
From: Eike Cochu <eike@cochu.com>
Date: Thu, 17 Dec 2015 04:07:27 +0100
Subject: [PATCH] removed ember submodule, added into main repo

---
 vipra-ui                                      |  1 -
 vipra-ui/.bowerrc                             |  4 ++
 vipra-ui/.editorconfig                        | 34 ++++++++++++
 vipra-ui/.ember-cli                           | 10 ++++
 vipra-ui/.gitignore                           | 17 ++++++
 vipra-ui/.jshintrc                            | 32 +++++++++++
 vipra-ui/.travis.yml                          | 23 ++++++++
 vipra-ui/.watchmanconfig                      |  3 ++
 vipra-ui/README.md                            | 53 +++++++++++++++++++
 vipra-ui/app/adapters/application.js          |  6 +++
 vipra-ui/app/app.js                           | 18 +++++++
 vipra-ui/app/components/.gitkeep              |  0
 vipra-ui/app/controllers/.gitkeep             |  0
 vipra-ui/app/helpers/.gitkeep                 |  0
 vipra-ui/app/index.html                       | 25 +++++++++
 vipra-ui/app/models/.gitkeep                  |  0
 vipra-ui/app/models/article.js                |  8 +++
 vipra-ui/app/router.js                        | 12 +++++
 vipra-ui/app/routes/.gitkeep                  |  0
 vipra-ui/app/routes/articles.js               |  7 +++
 vipra-ui/app/routes/index.js                  |  4 ++
 vipra-ui/app/styles/app.css                   |  0
 vipra-ui/app/templates/application.hbs        |  1 +
 vipra-ui/app/templates/articles.hbs           |  5 ++
 vipra-ui/app/templates/components/.gitkeep    |  0
 vipra-ui/app/templates/index.hbs              |  3 ++
 vipra-ui/bower.json                           | 17 ++++++
 vipra-ui/config/environment.js                | 47 ++++++++++++++++
 vipra-ui/ember-cli-build.js                   | 24 +++++++++
 vipra-ui/package.json                         | 39 ++++++++++++++
 vipra-ui/public/crossdomain.xml               | 15 ++++++
 vipra-ui/public/robots.txt                    |  3 ++
 vipra-ui/testem.json                          | 12 +++++
 vipra-ui/tests/.jshintrc                      | 52 ++++++++++++++++++
 vipra-ui/tests/helpers/destroy-app.js         |  5 ++
 .../tests/helpers/module-for-acceptance.js    | 23 ++++++++
 vipra-ui/tests/helpers/resolver.js            | 11 ++++
 vipra-ui/tests/helpers/start-app.js           | 18 +++++++
 vipra-ui/tests/index.html                     | 34 ++++++++++++
 vipra-ui/tests/integration/.gitkeep           |  0
 vipra-ui/tests/test-helper.js                 |  6 +++
 vipra-ui/tests/unit/.gitkeep                  |  0
 .../tests/unit/adapters/application-test.js   | 12 +++++
 vipra-ui/tests/unit/models/article-test.js    | 12 +++++
 vipra-ui/tests/unit/routes/articles-test.js   | 11 ++++
 vipra-ui/tests/unit/routes/index-test.js      | 11 ++++
 vipra-ui/vendor/.gitkeep                      |  0
 47 files changed, 617 insertions(+), 1 deletion(-)
 delete mode 160000 vipra-ui
 create mode 100644 vipra-ui/.bowerrc
 create mode 100644 vipra-ui/.editorconfig
 create mode 100644 vipra-ui/.ember-cli
 create mode 100644 vipra-ui/.gitignore
 create mode 100644 vipra-ui/.jshintrc
 create mode 100644 vipra-ui/.travis.yml
 create mode 100644 vipra-ui/.watchmanconfig
 create mode 100644 vipra-ui/README.md
 create mode 100644 vipra-ui/app/adapters/application.js
 create mode 100644 vipra-ui/app/app.js
 create mode 100644 vipra-ui/app/components/.gitkeep
 create mode 100644 vipra-ui/app/controllers/.gitkeep
 create mode 100644 vipra-ui/app/helpers/.gitkeep
 create mode 100644 vipra-ui/app/index.html
 create mode 100644 vipra-ui/app/models/.gitkeep
 create mode 100644 vipra-ui/app/models/article.js
 create mode 100644 vipra-ui/app/router.js
 create mode 100644 vipra-ui/app/routes/.gitkeep
 create mode 100644 vipra-ui/app/routes/articles.js
 create mode 100644 vipra-ui/app/routes/index.js
 create mode 100644 vipra-ui/app/styles/app.css
 create mode 100644 vipra-ui/app/templates/application.hbs
 create mode 100644 vipra-ui/app/templates/articles.hbs
 create mode 100644 vipra-ui/app/templates/components/.gitkeep
 create mode 100644 vipra-ui/app/templates/index.hbs
 create mode 100644 vipra-ui/bower.json
 create mode 100644 vipra-ui/config/environment.js
 create mode 100644 vipra-ui/ember-cli-build.js
 create mode 100644 vipra-ui/package.json
 create mode 100644 vipra-ui/public/crossdomain.xml
 create mode 100644 vipra-ui/public/robots.txt
 create mode 100644 vipra-ui/testem.json
 create mode 100644 vipra-ui/tests/.jshintrc
 create mode 100644 vipra-ui/tests/helpers/destroy-app.js
 create mode 100644 vipra-ui/tests/helpers/module-for-acceptance.js
 create mode 100644 vipra-ui/tests/helpers/resolver.js
 create mode 100644 vipra-ui/tests/helpers/start-app.js
 create mode 100644 vipra-ui/tests/index.html
 create mode 100644 vipra-ui/tests/integration/.gitkeep
 create mode 100644 vipra-ui/tests/test-helper.js
 create mode 100644 vipra-ui/tests/unit/.gitkeep
 create mode 100644 vipra-ui/tests/unit/adapters/application-test.js
 create mode 100644 vipra-ui/tests/unit/models/article-test.js
 create mode 100644 vipra-ui/tests/unit/routes/articles-test.js
 create mode 100644 vipra-ui/tests/unit/routes/index-test.js
 create mode 100644 vipra-ui/vendor/.gitkeep

diff --git a/vipra-ui b/vipra-ui
deleted file mode 160000
index 2d493e72..00000000
--- a/vipra-ui
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 2d493e72d110ff0b42761f58d1e4b00fa6b15ccd
diff --git a/vipra-ui/.bowerrc b/vipra-ui/.bowerrc
new file mode 100644
index 00000000..959e1696
--- /dev/null
+++ b/vipra-ui/.bowerrc
@@ -0,0 +1,4 @@
+{
+  "directory": "bower_components",
+  "analytics": false
+}
diff --git a/vipra-ui/.editorconfig b/vipra-ui/.editorconfig
new file mode 100644
index 00000000..47c54384
--- /dev/null
+++ b/vipra-ui/.editorconfig
@@ -0,0 +1,34 @@
+# EditorConfig helps developers define and maintain consistent
+# coding styles between different editors and IDEs
+# editorconfig.org
+
+root = true
+
+
+[*]
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+indent_style = space
+indent_size = 2
+
+[*.js]
+indent_style = space
+indent_size = 2
+
+[*.hbs]
+insert_final_newline = false
+indent_style = space
+indent_size = 2
+
+[*.css]
+indent_style = space
+indent_size = 2
+
+[*.html]
+indent_style = space
+indent_size = 2
+
+[*.{diff,md}]
+trim_trailing_whitespace = false
diff --git a/vipra-ui/.ember-cli b/vipra-ui/.ember-cli
new file mode 100644
index 00000000..4d87e572
--- /dev/null
+++ b/vipra-ui/.ember-cli
@@ -0,0 +1,10 @@
+{
+  /**
+    Ember CLI sends analytics information by default. The data is completely
+    anonymous, but there are times when you might want to disable this behavior.
+
+    Setting `disableAnalytics` to true will prevent any data from being sent.
+  */
+  "disableAnalytics": false,
+  "liveReload": false
+}
diff --git a/vipra-ui/.gitignore b/vipra-ui/.gitignore
new file mode 100644
index 00000000..86fceae7
--- /dev/null
+++ b/vipra-ui/.gitignore
@@ -0,0 +1,17 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+
+# compiled output
+/dist
+/tmp
+
+# dependencies
+/node_modules
+/bower_components
+
+# misc
+/.sass-cache
+/connect.lock
+/coverage/*
+/libpeerconnection.log
+npm-debug.log
+testem.log
diff --git a/vipra-ui/.jshintrc b/vipra-ui/.jshintrc
new file mode 100644
index 00000000..08096eff
--- /dev/null
+++ b/vipra-ui/.jshintrc
@@ -0,0 +1,32 @@
+{
+  "predef": [
+    "document",
+    "window",
+    "-Promise"
+  ],
+  "browser": true,
+  "boss": true,
+  "curly": true,
+  "debug": false,
+  "devel": true,
+  "eqeqeq": true,
+  "evil": true,
+  "forin": false,
+  "immed": false,
+  "laxbreak": false,
+  "newcap": true,
+  "noarg": true,
+  "noempty": false,
+  "nonew": false,
+  "nomen": false,
+  "onevar": false,
+  "plusplus": false,
+  "regexp": false,
+  "undef": true,
+  "sub": true,
+  "strict": false,
+  "white": false,
+  "eqnull": true,
+  "esnext": true,
+  "unused": true
+}
diff --git a/vipra-ui/.travis.yml b/vipra-ui/.travis.yml
new file mode 100644
index 00000000..66dd1076
--- /dev/null
+++ b/vipra-ui/.travis.yml
@@ -0,0 +1,23 @@
+---
+language: node_js
+node_js:
+  - "0.12"
+
+sudo: false
+
+cache:
+  directories:
+    - node_modules
+
+before_install:
+  - export PATH=/usr/local/phantomjs-2.0.0/bin:$PATH
+  - "npm config set spin false"
+  - "npm install -g npm@^2"
+
+install:
+  - npm install -g bower
+  - npm install
+  - bower install
+
+script:
+  - npm test
diff --git a/vipra-ui/.watchmanconfig b/vipra-ui/.watchmanconfig
new file mode 100644
index 00000000..e7834e3e
--- /dev/null
+++ b/vipra-ui/.watchmanconfig
@@ -0,0 +1,3 @@
+{
+  "ignore_dirs": ["tmp", "dist"]
+}
diff --git a/vipra-ui/README.md b/vipra-ui/README.md
new file mode 100644
index 00000000..b5cb0438
--- /dev/null
+++ b/vipra-ui/README.md
@@ -0,0 +1,53 @@
+# Vipra-ui
+
+This README outlines the details of collaborating on this Ember application.
+A short introduction of this app could easily go here.
+
+## Prerequisites
+
+You will need the following things properly installed on your computer.
+
+* [Git](http://git-scm.com/)
+* [Node.js](http://nodejs.org/) (with NPM)
+* [Bower](http://bower.io/)
+* [Ember CLI](http://www.ember-cli.com/)
+* [PhantomJS](http://phantomjs.org/)
+
+## Installation
+
+* `git clone <repository-url>` this repository
+* change into the new directory
+* `npm install`
+* `bower install`
+
+## Running / Development
+
+* `ember server`
+* Visit your app at [http://localhost:4200](http://localhost:4200).
+
+### Code Generators
+
+Make use of the many generators for code, try `ember help generate` for more details
+
+### Running Tests
+
+* `ember test`
+* `ember test --server`
+
+### Building
+
+* `ember build` (development)
+* `ember build --environment production` (production)
+
+### Deploying
+
+Specify what it takes to deploy your app.
+
+## Further Reading / Useful Links
+
+* [ember.js](http://emberjs.com/)
+* [ember-cli](http://www.ember-cli.com/)
+* Development Browser Extensions
+  * [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi)
+  * [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/)
+
diff --git a/vipra-ui/app/adapters/application.js b/vipra-ui/app/adapters/application.js
new file mode 100644
index 00000000..dff62265
--- /dev/null
+++ b/vipra-ui/app/adapters/application.js
@@ -0,0 +1,6 @@
+import DS from 'ember-data';
+
+export default DS.JSONAPIAdapter.extend({
+  host: 'http://localhost:8080',
+  namespace: 'vipra-rest/rest'
+});
diff --git a/vipra-ui/app/app.js b/vipra-ui/app/app.js
new file mode 100644
index 00000000..8b234d6d
--- /dev/null
+++ b/vipra-ui/app/app.js
@@ -0,0 +1,18 @@
+import Ember from 'ember';
+import Resolver from 'ember/resolver';
+import loadInitializers from 'ember/load-initializers';
+import config from './config/environment';
+
+let App;
+
+Ember.MODEL_FACTORY_INJECTIONS = true;
+
+App = Ember.Application.extend({
+  modulePrefix: config.modulePrefix,
+  podModulePrefix: config.podModulePrefix,
+  Resolver
+});
+
+loadInitializers(App, config.modulePrefix);
+
+export default App;
diff --git a/vipra-ui/app/components/.gitkeep b/vipra-ui/app/components/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/vipra-ui/app/controllers/.gitkeep b/vipra-ui/app/controllers/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/vipra-ui/app/helpers/.gitkeep b/vipra-ui/app/helpers/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/vipra-ui/app/index.html b/vipra-ui/app/index.html
new file mode 100644
index 00000000..5262fdc4
--- /dev/null
+++ b/vipra-ui/app/index.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>VipraUi</title>
+    <meta name="description" content="">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    {{content-for 'head'}}
+
+    <link rel="stylesheet" href="assets/vendor.css">
+    <link rel="stylesheet" href="assets/vipra-ui.css">
+
+    {{content-for 'head-footer'}}
+  </head>
+  <body>
+    {{content-for 'body'}}
+
+    <script src="assets/vendor.js"></script>
+    <script src="assets/vipra-ui.js"></script>
+
+    {{content-for 'body-footer'}}
+  </body>
+</html>
diff --git a/vipra-ui/app/models/.gitkeep b/vipra-ui/app/models/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/vipra-ui/app/models/article.js b/vipra-ui/app/models/article.js
new file mode 100644
index 00000000..064292d2
--- /dev/null
+++ b/vipra-ui/app/models/article.js
@@ -0,0 +1,8 @@
+import DS from 'ember-data';
+
+export default DS.Model.extend({
+  title: DS.attr(),
+  text: DS.attr(),
+  url: DS.attr(),
+  date: DS.attr()
+});
diff --git a/vipra-ui/app/router.js b/vipra-ui/app/router.js
new file mode 100644
index 00000000..3bf38c00
--- /dev/null
+++ b/vipra-ui/app/router.js
@@ -0,0 +1,12 @@
+import Ember from 'ember';
+import config from './config/environment';
+
+const Router = Ember.Router.extend({
+  location: config.locationType
+});
+
+Router.map(function() {
+  this.route('articles');
+});
+
+export default Router;
diff --git a/vipra-ui/app/routes/.gitkeep b/vipra-ui/app/routes/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/vipra-ui/app/routes/articles.js b/vipra-ui/app/routes/articles.js
new file mode 100644
index 00000000..2009e33b
--- /dev/null
+++ b/vipra-ui/app/routes/articles.js
@@ -0,0 +1,7 @@
+import Ember from 'ember';
+
+export default Ember.Route.extend({
+  model() {
+    return this.store.findAll('article');
+  }
+});
diff --git a/vipra-ui/app/routes/index.js b/vipra-ui/app/routes/index.js
new file mode 100644
index 00000000..26d9f312
--- /dev/null
+++ b/vipra-ui/app/routes/index.js
@@ -0,0 +1,4 @@
+import Ember from 'ember';
+
+export default Ember.Route.extend({
+});
diff --git a/vipra-ui/app/styles/app.css b/vipra-ui/app/styles/app.css
new file mode 100644
index 00000000..e69de29b
diff --git a/vipra-ui/app/templates/application.hbs b/vipra-ui/app/templates/application.hbs
new file mode 100644
index 00000000..e2147cab
--- /dev/null
+++ b/vipra-ui/app/templates/application.hbs
@@ -0,0 +1 @@
+{{outlet}}
\ No newline at end of file
diff --git a/vipra-ui/app/templates/articles.hbs b/vipra-ui/app/templates/articles.hbs
new file mode 100644
index 00000000..35225d4a
--- /dev/null
+++ b/vipra-ui/app/templates/articles.hbs
@@ -0,0 +1,5 @@
+<h1>Articles</h1>
+
+{{#each model as |article|}}
+  <p>{{article.title}}</p>
+{{/each}}
\ No newline at end of file
diff --git a/vipra-ui/app/templates/components/.gitkeep b/vipra-ui/app/templates/components/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/vipra-ui/app/templates/index.hbs b/vipra-ui/app/templates/index.hbs
new file mode 100644
index 00000000..2f733f8f
--- /dev/null
+++ b/vipra-ui/app/templates/index.hbs
@@ -0,0 +1,3 @@
+<h1>Vipra</h1>
+
+{{#link-to 'articles'}}Browse articles{{/link-to}}
\ No newline at end of file
diff --git a/vipra-ui/bower.json b/vipra-ui/bower.json
new file mode 100644
index 00000000..e011d589
--- /dev/null
+++ b/vipra-ui/bower.json
@@ -0,0 +1,17 @@
+{
+  "name": "vipra-ui",
+  "dependencies": {
+    "ember": "2.2.0",
+    "ember-cli-shims": "0.0.6",
+    "ember-cli-test-loader": "0.2.1",
+    "ember-data": "^2.2.1",
+    "ember-load-initializers": "0.1.7",
+    "ember-qunit": "0.4.16",
+    "ember-load-initializers": "0.1.7",
+    "ember-qunit-notifications": "0.1.0",
+    "ember-resolver": "~0.1.20",
+    "jquery": "^1.11.3",
+    "loader.js": "ember-cli/loader.js#3.5.0",
+    "qunit": "~1.20.0"
+  }
+}
diff --git a/vipra-ui/config/environment.js b/vipra-ui/config/environment.js
new file mode 100644
index 00000000..01ab460b
--- /dev/null
+++ b/vipra-ui/config/environment.js
@@ -0,0 +1,47 @@
+/* jshint node: true */
+
+module.exports = function(environment) {
+  var ENV = {
+    modulePrefix: 'vipra-ui',
+    environment: environment,
+    baseURL: '/',
+    locationType: 'auto',
+    EmberENV: {
+      FEATURES: {
+        // Here you can enable experimental features on an ember canary build
+        // e.g. 'with-controller': true
+      }
+    },
+
+    APP: {
+      // Here you can pass flags/options to your application instance
+      // when it is created
+    }
+  };
+
+  if (environment === 'development') {
+    // ENV.APP.LOG_RESOLVER = true;
+    // ENV.APP.LOG_ACTIVE_GENERATION = true;
+    // ENV.APP.LOG_TRANSITIONS = true;
+    // ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
+    // ENV.APP.LOG_VIEW_LOOKUPS = true;
+  }
+
+  if (environment === 'test') {
+    // Testem prefers this...
+    ENV.baseURL = '/';
+    ENV.locationType = 'none';
+
+    // keep test console output quieter
+    ENV.APP.LOG_ACTIVE_GENERATION = false;
+    ENV.APP.LOG_VIEW_LOOKUPS = false;
+
+    ENV.APP.rootElement = '#ember-testing';
+  }
+
+  if (environment === 'production') {
+
+  }
+
+  return ENV;
+};
diff --git a/vipra-ui/ember-cli-build.js b/vipra-ui/ember-cli-build.js
new file mode 100644
index 00000000..2537ce2c
--- /dev/null
+++ b/vipra-ui/ember-cli-build.js
@@ -0,0 +1,24 @@
+/*jshint node:true*/
+/* global require, module */
+var EmberApp = require('ember-cli/lib/broccoli/ember-app');
+
+module.exports = function(defaults) {
+  var app = new EmberApp(defaults, {
+    // Add options here
+  });
+
+  // Use `app.import` to add additional libraries to the generated
+  // output files.
+  //
+  // If you need to use different assets in different
+  // environments, specify an object as the first parameter. That
+  // object's keys should be the environment name and the values
+  // should be the asset to use in that environment.
+  //
+  // If the library that you are including contains AMD or ES6
+  // modules that you would like to import into your application
+  // please specify an object with the list of modules as keys
+  // along with the exports of each module as its value.
+
+  return app.toTree();
+};
diff --git a/vipra-ui/package.json b/vipra-ui/package.json
new file mode 100644
index 00000000..24ae137d
--- /dev/null
+++ b/vipra-ui/package.json
@@ -0,0 +1,39 @@
+{
+  "name": "vipra-ui",
+  "version": "0.0.0",
+  "description": "Small description for vipra-ui goes here",
+  "private": true,
+  "directories": {
+    "doc": "doc",
+    "test": "tests"
+  },
+  "scripts": {
+    "build": "ember build",
+    "start": "ember server",
+    "test": "ember test"
+  },
+  "repository": "",
+  "engines": {
+    "node": ">= 0.10.0"
+  },
+  "author": "",
+  "license": "MIT",
+  "devDependencies": {
+    "broccoli-asset-rev": "^2.2.0",
+    "ember-cli": "1.13.13",
+    "ember-cli-app-version": "^1.0.0",
+    "ember-cli-babel": "^5.1.5",
+    "ember-cli-dependency-checker": "^1.1.0",
+    "ember-cli-htmlbars": "^1.0.1",
+    "ember-cli-htmlbars-inline-precompile": "^0.3.1",
+    "ember-cli-ic-ajax": "0.2.4",
+    "ember-cli-inject-live-reload": "^1.3.1",
+    "ember-cli-qunit": "^1.0.4",
+    "ember-cli-release": "0.2.8",
+    "ember-cli-sri": "^1.2.0",
+    "ember-cli-uglify": "^1.2.0",
+    "ember-data": "1.13.15",
+    "ember-disable-proxy-controllers": "^1.0.1",
+    "ember-export-application-global": "^1.0.4"
+  }
+}
diff --git a/vipra-ui/public/crossdomain.xml b/vipra-ui/public/crossdomain.xml
new file mode 100644
index 00000000..0c16a7a0
--- /dev/null
+++ b/vipra-ui/public/crossdomain.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
+<cross-domain-policy>
+  <!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
+
+  <!-- Most restrictive policy: -->
+  <site-control permitted-cross-domain-policies="none"/>
+
+  <!-- Least restrictive policy: -->
+  <!--
+  <site-control permitted-cross-domain-policies="all"/>
+  <allow-access-from domain="*" to-ports="*" secure="false"/>
+  <allow-http-request-headers-from domain="*" headers="*" secure="false"/>
+  -->
+</cross-domain-policy>
diff --git a/vipra-ui/public/robots.txt b/vipra-ui/public/robots.txt
new file mode 100644
index 00000000..f5916452
--- /dev/null
+++ b/vipra-ui/public/robots.txt
@@ -0,0 +1,3 @@
+# http://www.robotstxt.org
+User-agent: *
+Disallow:
diff --git a/vipra-ui/testem.json b/vipra-ui/testem.json
new file mode 100644
index 00000000..0f35392c
--- /dev/null
+++ b/vipra-ui/testem.json
@@ -0,0 +1,12 @@
+{
+  "framework": "qunit",
+  "test_page": "tests/index.html?hidepassed",
+  "disable_watching": true,
+  "launch_in_ci": [
+    "PhantomJS"
+  ],
+  "launch_in_dev": [
+    "PhantomJS",
+    "Chrome"
+  ]
+}
diff --git a/vipra-ui/tests/.jshintrc b/vipra-ui/tests/.jshintrc
new file mode 100644
index 00000000..6ec0b7c1
--- /dev/null
+++ b/vipra-ui/tests/.jshintrc
@@ -0,0 +1,52 @@
+{
+  "predef": [
+    "document",
+    "window",
+    "location",
+    "setTimeout",
+    "$",
+    "-Promise",
+    "define",
+    "console",
+    "visit",
+    "exists",
+    "fillIn",
+    "click",
+    "keyEvent",
+    "triggerEvent",
+    "find",
+    "findWithAssert",
+    "wait",
+    "DS",
+    "andThen",
+    "currentURL",
+    "currentPath",
+    "currentRouteName"
+  ],
+  "node": false,
+  "browser": false,
+  "boss": true,
+  "curly": true,
+  "debug": false,
+  "devel": false,
+  "eqeqeq": true,
+  "evil": true,
+  "forin": false,
+  "immed": false,
+  "laxbreak": false,
+  "newcap": true,
+  "noarg": true,
+  "noempty": false,
+  "nonew": false,
+  "nomen": false,
+  "onevar": false,
+  "plusplus": false,
+  "regexp": false,
+  "undef": true,
+  "sub": true,
+  "strict": false,
+  "white": false,
+  "eqnull": true,
+  "esnext": true,
+  "unused": true
+}
diff --git a/vipra-ui/tests/helpers/destroy-app.js b/vipra-ui/tests/helpers/destroy-app.js
new file mode 100644
index 00000000..c3d4d1ab
--- /dev/null
+++ b/vipra-ui/tests/helpers/destroy-app.js
@@ -0,0 +1,5 @@
+import Ember from 'ember';
+
+export default function destroyApp(application) {
+  Ember.run(application, 'destroy');
+}
diff --git a/vipra-ui/tests/helpers/module-for-acceptance.js b/vipra-ui/tests/helpers/module-for-acceptance.js
new file mode 100644
index 00000000..ed23003d
--- /dev/null
+++ b/vipra-ui/tests/helpers/module-for-acceptance.js
@@ -0,0 +1,23 @@
+import { module } from 'qunit';
+import startApp from '../helpers/start-app';
+import destroyApp from '../helpers/destroy-app';
+
+export default function(name, options = {}) {
+  module(name, {
+    beforeEach() {
+      this.application = startApp();
+
+      if (options.beforeEach) {
+        options.beforeEach.apply(this, arguments);
+      }
+    },
+
+    afterEach() {
+      destroyApp(this.application);
+
+      if (options.afterEach) {
+        options.afterEach.apply(this, arguments);
+      }
+    }
+  });
+}
diff --git a/vipra-ui/tests/helpers/resolver.js b/vipra-ui/tests/helpers/resolver.js
new file mode 100644
index 00000000..ebfb4e4d
--- /dev/null
+++ b/vipra-ui/tests/helpers/resolver.js
@@ -0,0 +1,11 @@
+import Resolver from 'ember/resolver';
+import config from '../../config/environment';
+
+const resolver = Resolver.create();
+
+resolver.namespace = {
+  modulePrefix: config.modulePrefix,
+  podModulePrefix: config.podModulePrefix
+};
+
+export default resolver;
diff --git a/vipra-ui/tests/helpers/start-app.js b/vipra-ui/tests/helpers/start-app.js
new file mode 100644
index 00000000..e098f1d5
--- /dev/null
+++ b/vipra-ui/tests/helpers/start-app.js
@@ -0,0 +1,18 @@
+import Ember from 'ember';
+import Application from '../../app';
+import config from '../../config/environment';
+
+export default function startApp(attrs) {
+  let application;
+
+  let attributes = Ember.merge({}, config.APP);
+  attributes = Ember.merge(attributes, attrs); // use defaults, but you can override;
+
+  Ember.run(() => {
+    application = Application.create(attributes);
+    application.setupForTesting();
+    application.injectTestHelpers();
+  });
+
+  return application;
+}
diff --git a/vipra-ui/tests/index.html b/vipra-ui/tests/index.html
new file mode 100644
index 00000000..ffe2debf
--- /dev/null
+++ b/vipra-ui/tests/index.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>VipraUi Tests</title>
+    <meta name="description" content="">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    {{content-for 'head'}}
+    {{content-for 'test-head'}}
+
+    <link rel="stylesheet" href="assets/vendor.css">
+    <link rel="stylesheet" href="assets/vipra-ui.css">
+    <link rel="stylesheet" href="assets/test-support.css">
+
+    {{content-for 'head-footer'}}
+    {{content-for 'test-head-footer'}}
+  </head>
+  <body>
+    {{content-for 'body'}}
+    {{content-for 'test-body'}}
+
+    <script src="assets/vendor.js"></script>
+    <script src="assets/test-support.js"></script>
+    <script src="assets/vipra-ui.js"></script>
+    <script src="testem.js" integrity=""></script>
+    <script src="assets/tests.js"></script>
+    <script src="assets/test-loader.js"></script>
+
+    {{content-for 'body-footer'}}
+    {{content-for 'test-body-footer'}}
+  </body>
+</html>
diff --git a/vipra-ui/tests/integration/.gitkeep b/vipra-ui/tests/integration/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/vipra-ui/tests/test-helper.js b/vipra-ui/tests/test-helper.js
new file mode 100644
index 00000000..e6cfb70f
--- /dev/null
+++ b/vipra-ui/tests/test-helper.js
@@ -0,0 +1,6 @@
+import resolver from './helpers/resolver';
+import {
+  setResolver
+} from 'ember-qunit';
+
+setResolver(resolver);
diff --git a/vipra-ui/tests/unit/.gitkeep b/vipra-ui/tests/unit/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/vipra-ui/tests/unit/adapters/application-test.js b/vipra-ui/tests/unit/adapters/application-test.js
new file mode 100644
index 00000000..f0a2101e
--- /dev/null
+++ b/vipra-ui/tests/unit/adapters/application-test.js
@@ -0,0 +1,12 @@
+import { moduleFor, test } from 'ember-qunit';
+
+moduleFor('adapter:application', 'Unit | Adapter | application', {
+  // Specify the other units that are required for this test.
+  // needs: ['serializer:foo']
+});
+
+// Replace this with your real tests.
+test('it exists', function(assert) {
+  let adapter = this.subject();
+  assert.ok(adapter);
+});
diff --git a/vipra-ui/tests/unit/models/article-test.js b/vipra-ui/tests/unit/models/article-test.js
new file mode 100644
index 00000000..0afadacc
--- /dev/null
+++ b/vipra-ui/tests/unit/models/article-test.js
@@ -0,0 +1,12 @@
+import { moduleForModel, test } from 'ember-qunit';
+
+moduleForModel('article', 'Unit | Model | article', {
+  // Specify the other units that are required for this test.
+  needs: []
+});
+
+test('it exists', function(assert) {
+  let model = this.subject();
+  // let store = this.store();
+  assert.ok(!!model);
+});
diff --git a/vipra-ui/tests/unit/routes/articles-test.js b/vipra-ui/tests/unit/routes/articles-test.js
new file mode 100644
index 00000000..14d8ec84
--- /dev/null
+++ b/vipra-ui/tests/unit/routes/articles-test.js
@@ -0,0 +1,11 @@
+import { moduleFor, test } from 'ember-qunit';
+
+moduleFor('route:articles', 'Unit | Route | articles', {
+  // Specify the other units that are required for this test.
+  // needs: ['controller:foo']
+});
+
+test('it exists', function(assert) {
+  let route = this.subject();
+  assert.ok(route);
+});
diff --git a/vipra-ui/tests/unit/routes/index-test.js b/vipra-ui/tests/unit/routes/index-test.js
new file mode 100644
index 00000000..5d0f50da
--- /dev/null
+++ b/vipra-ui/tests/unit/routes/index-test.js
@@ -0,0 +1,11 @@
+import { moduleFor, test } from 'ember-qunit';
+
+moduleFor('route:index', 'Unit | Route | index', {
+  // Specify the other units that are required for this test.
+  // needs: ['controller:foo']
+});
+
+test('it exists', function(assert) {
+  let route = this.subject();
+  assert.ok(route);
+});
diff --git a/vipra-ui/vendor/.gitkeep b/vipra-ui/vendor/.gitkeep
new file mode 100644
index 00000000..e69de29b
-- 
GitLab