|
@@ -0,0 +1,76 @@
|
|
|
+/*global converse */
|
|
|
+(function (root, factory) {
|
|
|
+ define([
|
|
|
+ "jquery",
|
|
|
+ "underscore",
|
|
|
+ "mock",
|
|
|
+ "test_utils",
|
|
|
+ "utils",
|
|
|
+ "transcripts"
|
|
|
+ ], factory
|
|
|
+ );
|
|
|
+} (this, function ($, _, mock, test_utils, utils, transcripts) {
|
|
|
+ var Strophe = converse_api.env.Strophe;
|
|
|
+ var IGNORED_TAGS = [
|
|
|
+ 'stream:features',
|
|
|
+ 'auth',
|
|
|
+ 'challenge',
|
|
|
+ 'success',
|
|
|
+ 'stream:features',
|
|
|
+ 'response'
|
|
|
+ ];
|
|
|
+
|
|
|
+ function traverseElement (el, _stanza) {
|
|
|
+ if (typeof _stanza !== 'undefined') {
|
|
|
+ if (el.nodeType === 3) {
|
|
|
+ _stanza.t(el.nodeValue);
|
|
|
+ return _stanza;
|
|
|
+ } else {
|
|
|
+ _stanza = _stanza.c(el.nodeName.toLowerCase(), getAttributes(el));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ _stanza = new Strophe.Builder(
|
|
|
+ el.nodeName.toLowerCase(),
|
|
|
+ getAttributes(el)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ _.each(el.childNodes, _.partial(traverseElement, _, _stanza));
|
|
|
+ return _stanza.up();
|
|
|
+ }
|
|
|
+
|
|
|
+ function getAttributes (el) {
|
|
|
+ var attributes = {};
|
|
|
+ _.each(el.attributes, function (att) {
|
|
|
+ attributes[att.nodeName] = att.nodeValue;
|
|
|
+ });
|
|
|
+ return attributes;
|
|
|
+ }
|
|
|
+
|
|
|
+ return describe("Transcripts of chat logs", function () {
|
|
|
+ beforeEach(function () {
|
|
|
+ test_utils.openChatRoom("discuss", 'conference.conversejs.org', 'jc');
|
|
|
+ test_utils.openChatRoom("dummy", 'rooms.localhost', 'jc');
|
|
|
+ test_utils.openChatRoom("prosody", 'conference.prosody.im', 'jc');
|
|
|
+ });
|
|
|
+
|
|
|
+ it("can be used to replay conversations", function () {
|
|
|
+ spyOn(converse, 'areDesktopNotificationsEnabled').andReturn(true);
|
|
|
+ _.each(transcripts, function (transcript) {
|
|
|
+ var text = transcript();
|
|
|
+ var xml = Strophe.xmlHtmlNode(text);
|
|
|
+ $(xml).children('log').children('body').each(function (i, el) {
|
|
|
+ $(el).children().each(function (i, el) {
|
|
|
+ if (el.nodeType === 3) {
|
|
|
+ return; // Ignore text
|
|
|
+ }
|
|
|
+ if (_.contains(IGNORED_TAGS, el.nodeName.toLowerCase())) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ var _stanza = traverseElement(el);
|
|
|
+ converse.connection._dataRecv(test_utils.createRequest(_stanza));
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+}));
|