From 4cd71972bef1f0aa29385e6ff647ca65887063c3 Mon Sep 17 00:00:00 2001
From: Robin Ward <robin.ward@gmail.com>
Date: Thu, 20 Jun 2013 13:58:54 -0400
Subject: [PATCH] Cleaned up QUnit test structure

---
 .jshintrc                                     | 17 ++++++++-
 config/jshint.yml                             | 15 ++++++++
 lib/discourse_iife.rb                         |  3 +-
 test/javascripts/components/bbcode_test.js    |  2 +-
 .../components/click_track_test.js            |  2 -
 test/javascripts/components/formatter_test.js |  2 -
 .../components/key_value_store_test.js        |  2 -
 test/javascripts/components/markdown_test.js  |  2 +-
 test/javascripts/components/onebox_test.js    |  2 -
 .../components/preload_store_test.js          |  2 -
 test/javascripts/components/utilities_test.js |  2 -
 test/javascripts/helpers/assertions.js        | 32 ++++++++++++++++
 test/javascripts/helpers/qunit_helpers.js     | 11 ++++++
 test/javascripts/integration/header_test.js   | 12 +-----
 .../integration/list_topics_test.js           | 12 +-----
 test/javascripts/mixins/presence_test.js      |  2 -
 .../mixins/selected_posts_count_test.js       |  1 -
 test/javascripts/models/category_test.js      |  2 -
 test/javascripts/models/composer_test.js      |  2 -
 test/javascripts/models/nav_item_test.js      |  2 -
 test/javascripts/models/report_test.js        |  2 -
 test/javascripts/models/site_test.js          |  2 -
 test/javascripts/models/user_action_test.js   |  2 -
 test/javascripts/test_helper.js               | 37 ++-----------------
 24 files changed, 83 insertions(+), 87 deletions(-)
 create mode 100644 test/javascripts/helpers/assertions.js
 create mode 100644 test/javascripts/helpers/qunit_helpers.js

diff --git a/.jshintrc b/.jshintrc
index b9b9f7c81..3317474ba 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -31,7 +31,22 @@
     "PreloadStore",
     "Handlebars",
     "I18n",
-    "bootbox"],
+    "bootbox",
+    "module",
+    "integration",
+    "test",
+    "ok",
+    "expect",
+    "equal",
+    "blank",
+    "present",
+    "visit",
+    "count",
+    "exists",
+    "asyncTest",
+    "find",
+    "resolvingPromise",
+    "sinon"],
   "browser":true,
   "rhino":false,
   "devel":true,
diff --git a/config/jshint.yml b/config/jshint.yml
index 5f75dc0a2..74439de04 100644
--- a/config/jshint.yml
+++ b/config/jshint.yml
@@ -77,6 +77,21 @@ predef:
   - bootbox
   - moment
   - _
+  - module
+  - integration
+  - test
+  - ok
+  - expect
+  - equal
+  - blank
+  - present
+  - visit
+  - count
+  - exists
+  - asyncTest
+  - find
+  - resolvingPromise
+  - sinon
 
 browser:  true      # true if the standard browser globals should be predefined
 rhino:    false     # true if the Rhino environment globals should be predefined
diff --git a/lib/discourse_iife.rb b/lib/discourse_iife.rb
index 867c11b94..c79bff4ee 100644
--- a/lib/discourse_iife.rb
+++ b/lib/discourse_iife.rb
@@ -8,8 +8,9 @@ class DiscourseIIFE < Sprockets::Processor
     # Only discourse or admin paths
     return data unless (path =~ /\/javascripts\/discourse/ || path =~ /\/javascripts\/admin/ || path =~ /\/test\/javascripts/)
 
-    # Ignore the js helper
+    # Ignore the js helpers
     return data if (path =~ /test\_helper\.js/)
+    return data if (path =~ /javascripts\/helpers\//)
 
     # Ignore translations
     return data if (path =~ /\/translations/)
diff --git a/test/javascripts/components/bbcode_test.js b/test/javascripts/components/bbcode_test.js
index ee8253329..20b9ed117 100644
--- a/test/javascripts/components/bbcode_test.js
+++ b/test/javascripts/components/bbcode_test.js
@@ -1,4 +1,4 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true equal:true present:true md5:true */
+/*global md5:true */
 
 module("Discourse.BBCode");
 
diff --git a/test/javascripts/components/click_track_test.js b/test/javascripts/components/click_track_test.js
index e5af1a84c..6cab96c7d 100644
--- a/test/javascripts/components/click_track_test.js
+++ b/test/javascripts/components/click_track_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true equal:true exists:true count:true equal:true present:true sinon:true blank:true */
-
 module("Discourse.ClickTrack", {
   setup: function() {
 
diff --git a/test/javascripts/components/formatter_test.js b/test/javascripts/components/formatter_test.js
index 1895ca246..85b1b137e 100644
--- a/test/javascripts/components/formatter_test.js
+++ b/test/javascripts/components/formatter_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true equal:true exists:true count:true equal:true present:true md5:true */
-
 module("Discourse.Formatter");
 
 var format = "tiny";
diff --git a/test/javascripts/components/key_value_store_test.js b/test/javascripts/components/key_value_store_test.js
index e6137a56e..0ddf9652d 100644
--- a/test/javascripts/components/key_value_store_test.js
+++ b/test/javascripts/components/key_value_store_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true equal:true exists:true count:true equal:true present:true md5:true */
-
 var store = Discourse.KeyValueStore;
 
 module("Discourse.KeyValueStore", {
diff --git a/test/javascripts/components/markdown_test.js b/test/javascripts/components/markdown_test.js
index 19599f6bd..4096e24fb 100644
--- a/test/javascripts/components/markdown_test.js
+++ b/test/javascripts/components/markdown_test.js
@@ -1,4 +1,4 @@
-/*global module:true test:true ok:true visit:true equal:true exists:true count:true equal:true present:true md5:true sanitizeHtml:true */
+/*global sanitizeHtml:true */
 
 module("Discourse.Markdown");
 
diff --git a/test/javascripts/components/onebox_test.js b/test/javascripts/components/onebox_test.js
index 3fcb37640..63159c744 100644
--- a/test/javascripts/components/onebox_test.js
+++ b/test/javascripts/components/onebox_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true equal:true exists:true count:true equal:true present:true md5:true resolvingPromise:true */
-
 module("Discourse.Onebox", {
   setup: function() {
     this.anchor = $("<a href='http://bla.com'></a>")[0];
diff --git a/test/javascripts/components/preload_store_test.js b/test/javascripts/components/preload_store_test.js
index 36c056a7f..c6576380e 100644
--- a/test/javascripts/components/preload_store_test.js
+++ b/test/javascripts/components/preload_store_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true equal:true count:true present:true asyncTest:true blank:true */
-
 module("Discourse.PreloadStore", {
   setup: function() {
     PreloadStore.store('bane', 'evil');
diff --git a/test/javascripts/components/utilities_test.js b/test/javascripts/components/utilities_test.js
index 227af0309..2f1d8ef10 100644
--- a/test/javascripts/components/utilities_test.js
+++ b/test/javascripts/components/utilities_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true equal:true */
-
 module("Discourse.Utilities");
 
 var utils = Discourse.Utilities;
diff --git a/test/javascripts/helpers/assertions.js b/test/javascripts/helpers/assertions.js
new file mode 100644
index 000000000..3740920a2
--- /dev/null
+++ b/test/javascripts/helpers/assertions.js
@@ -0,0 +1,32 @@
+// Test helpers
+var resolvingPromise = Ember.Deferred.promise(function (p) {
+  p.resolve();
+})
+
+function exists(selector) {
+  return !!count(selector);
+}
+
+function count(selector) {
+  return find(selector).length;
+}
+
+function objBlank(obj) {
+  if (obj === undefined) return true;
+
+  switch (typeof obj) {
+  case "string":
+    return obj.trim().length === 0;
+  case "object":
+    return $.isEmptyObject(obj);
+  }
+  return false;
+}
+
+function present(obj, text) {
+  equal(objBlank(obj), false, text);
+}
+
+function blank(obj, text) {
+  equal(objBlank(obj), true, text);
+}
\ No newline at end of file
diff --git a/test/javascripts/helpers/qunit_helpers.js b/test/javascripts/helpers/qunit_helpers.js
new file mode 100644
index 000000000..b219aa794
--- /dev/null
+++ b/test/javascripts/helpers/qunit_helpers.js
@@ -0,0 +1,11 @@
+function integration(name) {
+  module(name, {
+    setup: function() {
+      Ember.run(Discourse, Discourse.advanceReadiness);
+    },
+
+    teardown: function() {
+      Discourse.reset();
+    }
+  });
+}
\ No newline at end of file
diff --git a/test/javascripts/integration/header_test.js b/test/javascripts/integration/header_test.js
index 23a95a590..3ed5d2490 100644
--- a/test/javascripts/integration/header_test.js
+++ b/test/javascripts/integration/header_test.js
@@ -1,14 +1,4 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true */
-
-module("Header", {
-  setup: function() {
-    Ember.run(Discourse, Discourse.advanceReadiness);
-  },
-
-  teardown: function() {
-    Discourse.reset();
-  }
-});
+integration("Header");
 
 test("/", function() {
 
diff --git a/test/javascripts/integration/list_topics_test.js b/test/javascripts/integration/list_topics_test.js
index 5b94fdad4..4dda40d99 100644
--- a/test/javascripts/integration/list_topics_test.js
+++ b/test/javascripts/integration/list_topics_test.js
@@ -1,14 +1,4 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true */
-
-module("List Topics", {
-  setup: function() {
-    Ember.run(Discourse, Discourse.advanceReadiness);
-  },
-
-  teardown: function() {
-    Discourse.reset();
-  }
-});
+integration("List Topics");
 
 test("/", function() {
 
diff --git a/test/javascripts/mixins/presence_test.js b/test/javascripts/mixins/presence_test.js
index abaf493c0..6ae3c48da 100644
--- a/test/javascripts/mixins/presence_test.js
+++ b/test/javascripts/mixins/presence_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true */
-
 module("Discourse.Presence");
 
 var testObj = Em.Object.createWithMixins(Discourse.Presence, {
diff --git a/test/javascripts/mixins/selected_posts_count_test.js b/test/javascripts/mixins/selected_posts_count_test.js
index b6450b4ad..313da9e63 100644
--- a/test/javascripts/mixins/selected_posts_count_test.js
+++ b/test/javascripts/mixins/selected_posts_count_test.js
@@ -1,4 +1,3 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true equal:true */
 module("Discourse.SelectedPostsCount");
 
 var buildTestObj = function(params, topicParams) {
diff --git a/test/javascripts/models/category_test.js b/test/javascripts/models/category_test.js
index c38da8386..9fd9d3037 100644
--- a/test/javascripts/models/category_test.js
+++ b/test/javascripts/models/category_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true equal:true */
-
 module("Discourse.Category");
 
 test('slugFor', function(){
diff --git a/test/javascripts/models/composer_test.js b/test/javascripts/models/composer_test.js
index 4cf15fac0..17f415a18 100644
--- a/test/javascripts/models/composer_test.js
+++ b/test/javascripts/models/composer_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true equal:true */
-
 module("Discourse.Composer");
 
 
diff --git a/test/javascripts/models/nav_item_test.js b/test/javascripts/models/nav_item_test.js
index 23f0a75c4..ecc6763c0 100644
--- a/test/javascripts/models/nav_item_test.js
+++ b/test/javascripts/models/nav_item_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true equal:true */
-
 module("Discourse.NavItem", {
   setup: function() {
     this.site = Discourse.Site.instance();
diff --git a/test/javascripts/models/report_test.js b/test/javascripts/models/report_test.js
index 2544d2e1c..58d8e9ca7 100644
--- a/test/javascripts/models/report_test.js
+++ b/test/javascripts/models/report_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true equal:true blank:true */
-
 module("Discourse.Report");
 
 function reportWithData(data) {
diff --git a/test/javascripts/models/site_test.js b/test/javascripts/models/site_test.js
index 9a9e96ceb..7f08c211c 100644
--- a/test/javascripts/models/site_test.js
+++ b/test/javascripts/models/site_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true present:true equal:true */
-
 module("Discourse.Site");
 
 test('instance', function(){
diff --git a/test/javascripts/models/user_action_test.js b/test/javascripts/models/user_action_test.js
index 567c02716..49a5c030a 100644
--- a/test/javascripts/models/user_action_test.js
+++ b/test/javascripts/models/user_action_test.js
@@ -1,5 +1,3 @@
-/*global module:true test:true ok:true visit:true expect:true exists:true count:true present:true equal:true */
-
 module("Discourse.UserAction");
 
 test("collapsing likes", function () {
diff --git a/test/javascripts/test_helper.js b/test/javascripts/test_helper.js
index 7689a0ad3..d40c49033 100644
--- a/test/javascripts/test_helper.js
+++ b/test/javascripts/test_helper.js
@@ -36,11 +36,12 @@
 //= require sinon-1.7.1.js
 //= require sinon-qunit-1.0.0.js
 
+//= require helpers/qunit_helpers
+//= require helpers/assertions
+//= require_tree ./fixtures
 //= require_tree .
 //= require_self
 
-//= require_tree ./fixtures
-
 // sinon settings
 sinon.config = {
     injectIntoThis: true,
@@ -65,35 +66,3 @@ Discourse.Router.map(function() {
   return Discourse.routeBuilder.call(this);
 });
 
-// Test helpers
-var resolvingPromise = Ember.Deferred.promise(function (p) {
-  p.resolve();
-})
-
-function exists(selector) {
-  return !!count(selector);
-}
-
-function count(selector) {
-  return find(selector).length;
-}
-
-function objBlank(obj) {
-  if (obj === undefined) return true;
-
-  switch (typeof obj) {
-  case "string":
-    return obj.trim().length === 0;
-  case "object":
-    return $.isEmptyObject(obj);
-  }
-  return false;
-}
-
-function present(obj, text) {
-  equal(objBlank(obj), false, text);
-}
-
-function blank(obj, text) {
-  equal(objBlank(obj), true, text);
-}