Benutzer:Schnark/js/bandersnatch.js/test.js
aus Wikipedia, der freien Enzyklopädie
< Benutzer:Schnark | js | bandersnatch.js
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
//<nowiki>
/*global mediaWiki, QUnit*/
(function ($, mw, simpleMockAjax, bs) {
"use strict";
function editManyTest (name, expected, duration) {
var assertionCount = 0, title, titles = [], queries = {}, titleData = {};
function getData (title, result) {
var old = (title.charAt(0) === '-') ? '' : title + ' (alt)', edit, queries = {}, key1, val1, key2, val2a, val2b;
edit = {text: title + ' (neu)'};
key1 = 'action=query&prop=info%7Crevisions&meta=tokens&titles=' + encodeURIComponent(title) +
'&rvprop=timestamp%7Ccontent&rvslots=main&rvlimit=1&curtimestamp=true&assert=user&format=json&formatversion=2';
val1 = old ?
'{"curtimestamp":"2001-02-02T14:00:00Z","query":' +
'{"pages":[{"pageid":42,"revisions":[{"timestamp":"2000-01-01T12:00:00Z","slots":{"main":{"content":"' +
old.replace(/"/g, '\\"') + '"}}}]}],"tokens":{"csrftoken":"123+\\\\"}}}' :
'{"curtimestamp":"2001-02-02T14:00:00Z","query":' +
'{"pages":[{"missing":true}],"tokens":{"csrftoken":"123+\\\\"}}}';
key2 = $.param({action: 'edit', title: title, text: edit.text,
summary: result === 'EDIT' ? title + ' (Zusammenfassung)' : 'Zusammenfassung',
basetimestamp: old ? '2000-01-01T12:00:00Z' : '2001-02-02T14:00:00Z',
starttimestamp: '2001-02-02T14:00:00Z', token: '123+\\', format: 'json', formatversion: 2});
key2 += result === 'EDIT' ? '¬minor=' : '&minor=';
key2 += '&maxlag=1';
val2a = '{"error":{"code":"maxlag"}}';
val2b = '{"edit":{"result":"Success"}}';
switch (result || '') {
case '':
return {
assertions: 0, queries: {}
};
case 'abort':
queries[key1] = val1;
return {
assertions: 3, queries: queries, abort: true, old: old, edit: edit, error: bs.error.ABORT
};
case 'logout':
queries[key1] = '{"error":{"code":"assertuserfailed"}}';
return {
assertions: 1, queries: queries, old: old, edit: edit, error: bs.error.LOSTLOGIN
};
case 'conflict':
queries[key1] = val1;
queries[key2] = '{"error":{"code":"editconflict"}}';
return {
assertions: 5, queries: queries, old: old, edit: edit, error: bs.error.EDITCONFLICT
};
case '!verify':
queries[key1] = val1;
return {
assertions: 5, queries: queries, old: old, edit: edit, verify: false, error: bs.error.NOTVERIFIED
};
case 'lag':
queries[key1] = val1;
queries[key2] = [val2a, val2b];
return {
assertions: 7, queries: queries, old: old, edit: edit, summary: 'Zusammenfassung'
};
case 'maxlag':
queries[key1] = val1;
queries[key2] = [val2a, val2a];
return {
assertions: 5, queries: queries, old: old, edit: edit, error: bs.error.MAXLAG
};
case 'edit':
queries[key1] = val1;
queries[key2] = val2b;
return {
assertions: 7, queries: queries, old: old, edit: edit, summary: 'Zusammenfassung'
};
case 'EDIT':
queries[key1] = val1;
queries[key2] = val2b;
edit.summary = title + ' (Zusammenfassung)';
edit.minor = false;
return {
assertions: 7, queries: queries, old: old, edit: edit, summary: title + ' (Zusammenfassung)'
};
case '!edit':
queries[key1] = val1;
return {
assertions: 3, queries: queries, old: old, edit: false, error: bs.error.NOEDIT
};
case '!EDIT':
queries[key1] = val1;
edit.text = old;
return {
assertions: 3, queries: queries, old: old, edit: edit, error: bs.error.NOEDIT
};
}
}
for (title in expected) {
if (expected.hasOwnProperty(title)) {
titles.push(title);
titleData[title] = getData(title, expected[title]);
assertionCount += titleData[title].assertions;
$.extend(queries, titleData[title].queries);
}
}
assertionCount++;
QUnit.test(name, function (assert) {
var n = 0, abort = false, start, cont;
function editF (title, old, callback) {
assert.strictEqual(title, titles[n++], title + ' - korrekte Reihenfolge der Bearbeitungen');
assert.strictEqual(old, titleData[title].old, title + ' - Text vor dem Bearbeiten');
if (titleData[title].abort) {
abort = true;
}
callback(titleData[title].edit);
}
function verifyF (title, old, data, yes, no) {
assert.strictEqual(old, titleData[title].old, title + ' - alter Text beim Verifizieren');
assert.strictEqual(data.text, title + ' (neu)', title + ' - neuer Text');
if (titleData[title].verify === false) {
no();
} else {
yes();
}
}
function abortF () {
return abort;
}
function maxlagF (n) {
if (n >= 2) {
return true;
}
return 1;
}
function onSuccess (title, data) {
assert.strictEqual(data.newText, title + ' (neu)', title + ' - neuer Text nach Bearbeiten');
assert.strictEqual(data.summary, titleData[title].summary, title + ' - Zusammenfassung');
assert.strictEqual(titleData[title].error, undefined, title + ' sollte tatsächlich bearbeitet werden');
}
function onError (title, code) {
assert.strictEqual(code, titleData[title].error, title + ' - Grund für Fehler');
}
function onFinish () {
var dur = mw.now() - start;
assert.ok(dur >= 1000 * duration,
'Bearbeitungen dauerten so lange wie erwartet (' + Math.round(dur / 1000) + '/' + duration + ')');
cont();
simpleMockAjax(false, assert);
}
assert.expect(assertionCount);
cont = assert.async();
simpleMockAjax(true, assert).answerWith(queries);
start = mw.now();
bs.editMany(titles, 1000, {summary: 'Zusammenfassung', minor: true},
editF, verifyF, abortF, maxlagF, onSuccess, onError, onFinish);
});
}
QUnit.module('Bandersnatch');
editManyTest('Erfolgreiche Bearbeitungen an existierenden Artikeln', {A: 'edit', B: 'edit', C: 'edit'}, 2);
editManyTest('Komplexe Bearbeitungen', {A: 'EDIT', '-B': 'edit', '-C': 'EDIT'}, 2);
editManyTest('Probleme beim Bearbeiten', {A: '!EDIT', '-B': '!edit', '-C': '!verify', 'D': 'conflict'}, 0);
editManyTest('Server-Lag', {A: 'lag', B: 'maxlag', '-C': 'lag', D: 'lag', E: 'edit'}, 6);
editManyTest('Abbruch', {A: 'edit', B: 'abort', C: false, D: false}, 0);
editManyTest('Logout', {A: 'edit', B: 'logout', C: false, D: false}, 0);
})(jQuery, mediaWiki, mediaWiki.libs.qunit.simpleMockAjax, mediaWiki.libs.qunit.bandersnatch);
//</nowiki>