discourse/test/javascripts/helpers/qunit-helpers.js.es6
cpradio a7507dad63 Add Acceptance Tests (which found an error)
Tests for populating category and tags

Added acceptance tests for populating the Username and Category through the Advanced Search UI (will work on the other fields later)

Give the combo-box elements ids
Add acceptance tests for the rest of the advanced search UI (except for Tags, tags are evil)
2016-10-08 09:09:37 -04:00

130 lines
3.1 KiB
JavaScript

/* global asyncTest, fixtures */
import sessionFixtures from 'fixtures/session-fixtures';
import siteFixtures from 'fixtures/site-fixtures';
import HeaderComponent from 'discourse/components/site-header';
import { forceMobile, resetMobile } from 'discourse/lib/mobile';
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;
function acceptance(name, options) {
module("Acceptance: " + name, {
setup() {
resetMobile();
// For now don't do scrolling stuff in Test Mode
HeaderComponent.reopen({examineDockHeader: Ember.K});
const siteJson = siteFixtures['site.json'].site;
if (options) {
if (options.setup) {
options.setup.call(this);
}
if (options.mobileView) {
forceMobile();
}
if (options.loggedIn) {
logIn();
}
if (options.settings) {
Discourse.SiteSettings = jQuery.extend(true, Discourse.SiteSettings, options.settings);
}
if (options.site) {
Discourse.Site.resetCurrent(Discourse.Site.create(jQuery.extend(true, {}, siteJson, options.site)));
}
}
Discourse.reset();
},
teardown() {
if (options && options.teardown) {
options.teardown.call(this);
}
Discourse.User.resetCurrent();
Discourse.Site.resetCurrent(Discourse.Site.create(jQuery.extend(true, {}, fixtures['site.json'].site)));
Discourse.reset();
}
});
}
function controllerFor(controller, model) {
controller = Discourse.__container__.lookup('controller:' + controller);
if (model) { controller.set('model', model ); }
return controller;
}
function asyncTestDiscourse(text, func) {
asyncTest(text, function () {
var self = this;
Ember.run(function () {
func.call(self);
});
});
}
function fixture(selector) {
if (selector) {
return $("#qunit-fixture").find(selector);
}
return $("#qunit-fixture");
}
function present(obj, text) {
ok(!Ember.isEmpty(obj), text);
}
function blank(obj, text) {
ok(Ember.isEmpty(obj), text);
}
function waitFor(callback, timeout) {
timeout = timeout || 500;
stop();
Ember.run.later(() => {
callback();
start();
}, timeout);
}
export { acceptance,
controllerFor,
asyncTestDiscourse,
fixture,
logIn,
currentUser,
blank,
present,
waitFor };