2017-06-15 01:57:58 +08:00
|
|
|
/* global QUnit, fixtures */
|
2014-09-27 02:48:34 +08:00
|
|
|
|
2015-04-02 02:18:46 +08:00
|
|
|
import sessionFixtures from 'fixtures/session-fixtures';
|
2015-08-26 00:50:19 +08:00
|
|
|
import siteFixtures from 'fixtures/site-fixtures';
|
2016-04-15 03:23:05 +08:00
|
|
|
import HeaderComponent from 'discourse/components/site-header';
|
2016-05-06 00:49:12 +08:00
|
|
|
import { forceMobile, resetMobile } from 'discourse/lib/mobile';
|
2016-11-23 04:36:18 +08:00
|
|
|
import { resetPluginApi } from 'discourse/lib/plugin-api';
|
2016-12-20 00:19:10 +08:00
|
|
|
import { clearCache as clearOutletCache, resetExtraClasses } from 'discourse/lib/plugin-connectors';
|
2016-11-24 01:57:50 +08:00
|
|
|
import { clearHTMLCache } from 'discourse/helpers/custom-html';
|
2016-12-20 00:19:10 +08:00
|
|
|
import { flushMap } from 'discourse/models/store';
|
2017-03-28 03:34:54 +08:00
|
|
|
import { clearRewrites } from 'discourse/lib/url';
|
2016-12-20 00:19:10 +08:00
|
|
|
|
2016-12-10 02:51:26 +08:00
|
|
|
|
2015-04-02 02:18:46 +08:00
|
|
|
function currentUser() {
|
|
|
|
return Discourse.User.create(sessionFixtures['/session/current.json'].current_user);
|
|
|
|
}
|
|
|
|
|
|
|
|
function logIn() {
|
|
|
|
Discourse.User.resetCurrent(currentUser());
|
|
|
|
}
|
|
|
|
|
|
|
|
const Plugin = $.fn.modal;
|
|
|
|
const Modal = Plugin.Constructor;
|
|
|
|
|
|
|
|
function AcceptanceModal(option, _relatedTarget) {
|
|
|
|
return this.each(function () {
|
|
|
|
var $this = $(this);
|
|
|
|
var data = $this.data('bs.modal');
|
|
|
|
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option === 'object' && option);
|
|
|
|
|
|
|
|
if (!data) $this.data('bs.modal', (data = new Modal(this, options)));
|
|
|
|
data.$body = $('#ember-testing');
|
|
|
|
|
|
|
|
if (typeof option === 'string') data[option](_relatedTarget);
|
|
|
|
else if (options.show) data.show(_relatedTarget);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
window.bootbox.$body = $('#ember-testing');
|
|
|
|
$.fn.modal = AcceptanceModal;
|
|
|
|
|
2015-04-07 02:14:00 +08:00
|
|
|
function acceptance(name, options) {
|
2017-07-06 02:14:30 +08:00
|
|
|
QUnit.module("Acceptance: " + name, {
|
2017-06-15 01:57:58 +08:00
|
|
|
beforeEach() {
|
2016-05-06 00:49:12 +08:00
|
|
|
resetMobile();
|
|
|
|
|
2015-04-02 02:18:46 +08:00
|
|
|
// For now don't do scrolling stuff in Test Mode
|
2017-06-14 03:59:48 +08:00
|
|
|
HeaderComponent.reopen({examineDockHeader: function() { }});
|
2015-04-02 02:18:46 +08:00
|
|
|
|
2016-12-20 00:19:10 +08:00
|
|
|
resetExtraClasses();
|
2016-05-06 00:49:12 +08:00
|
|
|
const siteJson = siteFixtures['site.json'].site;
|
2014-08-01 05:59:52 +08:00
|
|
|
if (options) {
|
2017-06-15 01:57:58 +08:00
|
|
|
if (options.beforeEach) {
|
|
|
|
options.beforeEach.call(this);
|
2014-08-01 05:59:52 +08:00
|
|
|
}
|
|
|
|
|
2016-05-06 00:49:12 +08:00
|
|
|
if (options.mobileView) {
|
|
|
|
forceMobile();
|
|
|
|
}
|
|
|
|
|
2015-04-02 02:18:46 +08:00
|
|
|
if (options.loggedIn) {
|
|
|
|
logIn();
|
2014-08-01 05:59:52 +08:00
|
|
|
}
|
2014-08-01 01:24:07 +08:00
|
|
|
|
2014-08-01 05:59:52 +08:00
|
|
|
if (options.settings) {
|
|
|
|
Discourse.SiteSettings = jQuery.extend(true, Discourse.SiteSettings, options.settings);
|
|
|
|
}
|
2014-09-27 02:48:34 +08:00
|
|
|
|
|
|
|
if (options.site) {
|
|
|
|
Discourse.Site.resetCurrent(Discourse.Site.create(jQuery.extend(true, {}, siteJson, options.site)));
|
|
|
|
}
|
2014-08-01 01:24:07 +08:00
|
|
|
}
|
2014-09-27 02:48:34 +08:00
|
|
|
|
2016-11-24 01:57:50 +08:00
|
|
|
clearOutletCache();
|
|
|
|
clearHTMLCache();
|
2016-11-23 23:41:21 +08:00
|
|
|
resetPluginApi();
|
2014-07-31 06:56:01 +08:00
|
|
|
Discourse.reset();
|
2013-06-21 01:58:54 +08:00
|
|
|
},
|
|
|
|
|
2017-06-15 01:57:58 +08:00
|
|
|
afterEach() {
|
|
|
|
if (options && options.afterEach) {
|
|
|
|
options.afterEach.call(this);
|
2013-11-06 00:42:37 +08:00
|
|
|
}
|
2016-12-20 00:19:10 +08:00
|
|
|
flushMap();
|
2015-05-01 04:04:58 +08:00
|
|
|
Discourse.User.resetCurrent();
|
2015-09-04 04:55:55 +08:00
|
|
|
Discourse.Site.resetCurrent(Discourse.Site.create(jQuery.extend(true, {}, fixtures['site.json'].site)));
|
2013-11-06 00:42:37 +08:00
|
|
|
|
2016-12-20 00:19:10 +08:00
|
|
|
resetExtraClasses();
|
2016-11-24 01:57:50 +08:00
|
|
|
clearOutletCache();
|
|
|
|
clearHTMLCache();
|
2016-11-23 04:36:18 +08:00
|
|
|
resetPluginApi();
|
2017-03-28 03:34:54 +08:00
|
|
|
clearRewrites();
|
2013-06-21 01:58:54 +08:00
|
|
|
Discourse.reset();
|
|
|
|
}
|
|
|
|
});
|
2013-06-21 05:20:08 +08:00
|
|
|
}
|
|
|
|
|
2015-02-07 02:25:48 +08:00
|
|
|
function controllerFor(controller, model) {
|
2014-03-11 14:30:49 +08:00
|
|
|
controller = Discourse.__container__.lookup('controller:' + controller);
|
2013-06-21 05:20:08 +08:00
|
|
|
if (model) { controller.set('model', model ); }
|
|
|
|
return controller;
|
2013-07-16 07:47:13 +08:00
|
|
|
}
|
|
|
|
|
2015-02-07 02:25:48 +08:00
|
|
|
function asyncTestDiscourse(text, func) {
|
2017-06-15 01:57:58 +08:00
|
|
|
QUnit.test(text, function(assert) {
|
|
|
|
const done = assert.async();
|
|
|
|
Ember.run(() => {
|
|
|
|
func.call(this, assert);
|
|
|
|
done();
|
2013-07-16 07:47:13 +08:00
|
|
|
});
|
|
|
|
});
|
2013-11-08 02:46:38 +08:00
|
|
|
}
|
|
|
|
|
2015-02-07 02:25:48 +08:00
|
|
|
function fixture(selector) {
|
2013-11-08 02:46:38 +08:00
|
|
|
if (selector) {
|
|
|
|
return $("#qunit-fixture").find(selector);
|
|
|
|
}
|
|
|
|
return $("#qunit-fixture");
|
|
|
|
}
|
2015-02-07 02:25:48 +08:00
|
|
|
|
2017-06-15 01:57:58 +08:00
|
|
|
QUnit.assert.not = function(actual, message) {
|
|
|
|
this.pushResult({
|
|
|
|
result: !actual,
|
|
|
|
actual,
|
|
|
|
expected: !actual,
|
|
|
|
message
|
|
|
|
});
|
|
|
|
};
|
2015-08-12 00:27:07 +08:00
|
|
|
|
2017-06-15 01:57:58 +08:00
|
|
|
QUnit.assert.blank = function(actual, message) {
|
|
|
|
this.pushResult({
|
|
|
|
result: Ember.isEmpty(actual),
|
|
|
|
actual,
|
|
|
|
message
|
|
|
|
});
|
|
|
|
};
|
2015-08-12 00:27:07 +08:00
|
|
|
|
2017-06-15 01:57:58 +08:00
|
|
|
QUnit.assert.present = function(actual, message) {
|
|
|
|
this.pushResult({
|
|
|
|
result: !Ember.isEmpty(actual),
|
|
|
|
actual,
|
|
|
|
message
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
QUnit.assert.containsInstance = function(collection, klass, message) {
|
|
|
|
const result = klass.detectInstance(_.first(collection));
|
|
|
|
this.pushResult({
|
|
|
|
result,
|
|
|
|
message
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
function waitFor(assert, callback, timeout) {
|
2016-10-07 03:18:05 +08:00
|
|
|
timeout = timeout || 500;
|
2017-06-15 01:57:58 +08:00
|
|
|
|
|
|
|
const done = assert.async();
|
2016-10-07 03:18:05 +08:00
|
|
|
Ember.run.later(() => {
|
|
|
|
callback();
|
2017-06-15 01:57:58 +08:00
|
|
|
done();
|
2016-10-07 03:18:05 +08:00
|
|
|
}, timeout);
|
|
|
|
}
|
|
|
|
|
2015-08-12 00:27:07 +08:00
|
|
|
export { acceptance,
|
|
|
|
controllerFor,
|
|
|
|
asyncTestDiscourse,
|
|
|
|
fixture,
|
|
|
|
logIn,
|
|
|
|
currentUser,
|
2016-10-07 03:18:05 +08:00
|
|
|
waitFor };
|