discourse/test/javascripts/test_helper.js

176 lines
5.1 KiB
JavaScript
Raw Normal View History

/*global document, sinon, QUnit, Logster */
//= require env
2015-08-11 05:11:27 +08:00
//= require probes
2015-04-30 02:57:08 +08:00
//= require jquery.debug
//= require jquery.ui.widget
//= require handlebars
2015-08-12 05:34:02 +08:00
//= require ember.debug
//= require ember-template-compiler
//= require message-bus
//= require ember-qunit
//= require fake_xml_http_request
//= require route-recognizer
//= require pretender
2016-11-16 01:41:12 +08:00
//= require discourse-loader
2016-07-05 02:15:51 +08:00
//= require preload-store
//= require locales/i18n
//= require locales/en
// Stuff we need to load first
2016-07-04 01:33:05 +08:00
//= require vendor
//= require ember-shim
//= require pretty-text-bundle
//= require markdown-it-bundle
2016-11-15 10:30:03 +08:00
//= require application
//= require plugin
2016-07-04 01:33:05 +08:00
//= require htmlparser.js
//= require admin
//= require sinon-1.7.1
//= require sinon-qunit-1.0.0
2013-06-21 01:58:54 +08:00
//= require helpers/assertions
//= require helpers/select-kit-helper
//= require helpers/qunit-helpers
2013-06-21 01:58:54 +08:00
//= require_tree ./fixtures
//= require_tree ./lib
//= require_tree .
//= require plugin_tests
//= require_self
2015-03-13 14:45:55 +08:00
//
//= require jquery.magnific-popup.min.js
window.inTestEnv = true;
// Stop the message bus so we don't get ajax calls
window.MessageBus.stop();
// Trick JSHint into allow document.write
var d = document;
d.write('<script src="/javascripts/ace/ace.js"></script>');
d.write('<div id="ember-testing-container"><div id="ember-testing"></div></div>');
d.write('<style>#ember-testing-container { position: absolute; background: white; bottom: 0; right: 0; width: 640px; height: 384px; overflow: auto; z-index: 9999; border: 1px solid #ccc; } #ember-testing { zoom: 50%; }</style>');
2017-06-15 01:57:58 +08:00
Ember.Test.adapter = window.QUnitAdapter.create();
Discourse.rootElement = '#ember-testing';
Discourse.setupForTesting();
Discourse.injectTestHelpers();
Discourse.start();
2013-07-05 23:53:09 +08:00
// disable logster error reporting
if (window.Logster) {
Logster.enabled = false;
} else {
window.Logster = { enabled: false };
}
var origDebounce = Ember.run.debounce,
pretender = require('helpers/create-pretender', null, null, false),
fixtures = require('fixtures/site-fixtures', null, null, false).default,
flushMap = require('discourse/models/store', null, null, false).flushMap,
2015-08-08 03:08:27 +08:00
ScrollingDOMMethods = require('discourse/mixins/scrolling', null, null, false).ScrollingDOMMethods,
2015-08-11 05:11:27 +08:00
_DiscourseURL = require('discourse/lib/url', null, null, false).default,
applyPretender = require('helpers/qunit-helpers', null, null, false).applyPretender,
server;
function dup(obj) {
return jQuery.extend(true, {}, obj);
}
function resetSite(siteSettings, extras) {
2016-07-05 02:15:51 +08:00
var createStore = require('helpers/create-store').default;
var siteAttrs = $.extend({}, fixtures['site.json'].site, extras || {});
2016-07-05 02:15:51 +08:00
siteAttrs.store = createStore();
siteAttrs.siteSettings = siteSettings;
2016-07-05 02:15:51 +08:00
Discourse.Site.resetCurrent(Discourse.Site.create(siteAttrs));
}
2014-07-31 06:56:01 +08:00
QUnit.testStart(function(ctx) {
server = pretender.default();
var helper = {
parsePostData: pretender.parsePostData,
response: pretender.response,
success: pretender.success
};
applyPretender(server, helper);
2013-07-05 23:53:09 +08:00
// Allow our tests to change site settings and have them reset before the next test
Discourse.SiteSettings = dup(Discourse.SiteSettingsOriginal);
Discourse.BaseUri = "";
2015-04-16 16:15:06 +08:00
Discourse.BaseUrl = "localhost";
2015-08-08 03:08:27 +08:00
Discourse.Session.resetCurrent();
Discourse.User.resetCurrent();
resetSite(Discourse.SiteSettings);
2015-08-11 05:11:27 +08:00
_DiscourseURL.redirectedTo = null;
_DiscourseURL.redirectTo = function(url) {
_DiscourseURL.redirectedTo = url;
};
2016-07-05 02:15:51 +08:00
var ps = require('preload-store').default;
ps.reset();
2014-07-31 05:53:14 +08:00
2014-07-31 06:56:01 +08:00
window.sandbox = sinon.sandbox.create();
window.sandbox.stub(ScrollingDOMMethods, "screenNotFull");
2015-08-08 03:08:27 +08:00
window.sandbox.stub(ScrollingDOMMethods, "bindOnScroll");
window.sandbox.stub(ScrollingDOMMethods, "unbindOnScroll");
2014-07-31 06:56:01 +08:00
// Unless we ever need to test this, let's leave it off.
$.fn.autocomplete = function() { };
2014-07-31 06:56:01 +08:00
// Don't debounce in test unless we're testing debouncing
if (ctx.module.indexOf('debounce') === -1) {
Ember.run.debounce = Ember.run;
}
});
2013-07-05 23:53:09 +08:00
2014-07-31 05:53:14 +08:00
QUnit.testDone(function() {
2014-07-31 06:56:01 +08:00
Ember.run.debounce = origDebounce;
window.sandbox.restore();
2014-08-01 02:17:18 +08:00
// Destroy any modals
$('.modal-backdrop').remove();
flushMap();
server.shutdown();
2014-07-31 05:53:14 +08:00
});
2014-08-01 00:05:47 +08:00
// Load ES6 tests
var helpers = require("helpers/qunit-helpers");
// TODO: Replace with proper imports rather than globals
window.asyncTestDiscourse = helpers.asyncTestDiscourse;
window.controllerFor = helpers.controllerFor;
window.fixture = helpers.fixture;
function getUrlParameter(name) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
var results = regex.exec(location.search);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
};
var skipCore = (getUrlParameter('qunit_skip_core') == '1');
var pluginPath = getUrlParameter('qunit_single_plugin') ? "\/"+getUrlParameter('qunit_single_plugin')+"\/" : "\/plugins\/";
Object.keys(requirejs.entries).forEach(function(entry) {
var isTest = (/\-test/).test(entry);
var regex = new RegExp(pluginPath)
var isPlugin = regex.test(entry);
if (isTest && (!skipCore || isPlugin)) {
2014-08-01 00:05:47 +08:00
require(entry, null, null, true);
}
});
// forces 0 as duration for all jquery animations
jQuery.fx.off = true;
2016-07-05 02:15:51 +08:00
resetSite();