Performance improvements.

This commit is contained in:
Martin Edenhofer 2016-10-16 20:35:55 +02:00
parent a1dd76ffd6
commit c85ff7b775
6 changed files with 333 additions and 327 deletions

View file

@ -1137,18 +1137,16 @@ class App.ObserverController extends App.Controller
#console.trace()
@log 'debug', 'new', @object_id, @model
object = App[@model].fullLocal(@object_id)
if !object
App[@model].full(@object_id, @maybeRender)
if App[@model].exists(@object_id)
@maybeRender( App[@model].fullLocal(@object_id) )
else
@maybeRender(object)
App[@model].full(@object_id, @maybeRender)
# rerender, e. g. on language change
if @globalRerender
@bind('ui:rerender', =>
@lastAttributres = undefined
object = App[@model].fullLocal(@object_id)
@maybeRender(object)
@maybeRender( App[@model].fullLocal(@object_id) )
)
subscribe: (object, typeOfChange) =>

View file

@ -41,7 +41,6 @@ class App.TicketZoomSidebar extends App.ObserverController
organization_id: true
render: (ticket) =>
editTicket = (el) =>
el.append('<form><fieldset class="edit"></fieldset></form><div class="tags"></div><div class="links"></div>')
@ -91,7 +90,7 @@ class App.TicketZoomSidebar extends App.ObserverController
callback: editTicket
}
]
if !@permissionCheck('ticket.customer')
if @permissionCheck('ticket.agent')
@sidebarItems[0]['actions'] = [
{
name: 'ticket-history'
@ -109,7 +108,7 @@ class App.TicketZoomSidebar extends App.ObserverController
callback: changeCustomer
},
]
if !@permissionCheck('ticket.customer')
if @permissionCheck('ticket.agent')
editCustomer = (e, el) =>
new App.ControllerGenericEdit(
id: ticket.customer_id

View file

@ -490,7 +490,7 @@ class Model extends Module
trigger: ->
Events.trigger.apply this, arguments # fire off the instance event
return true if arguments[0] is 'refresh' # Don't trigger refresh events, because ... ?
#return true if arguments[0] is 'refresh' # Don't trigger refresh events, because ... ?
@constructor.trigger arguments... # fire off the class event
Model::on = Model::bind

View file

@ -414,8 +414,7 @@ class App.Model extends Spine.Model
App.Log.debug('Model', "local change #{@className}", items)
for item in items
for key, callback of App[ @className ].SUBSCRIPTION_ITEM[ item.id ]
item = App[ @className ]._fillUp(item)
callback(item, 'change')
callback(App[ @className ]._fillUp(item), 'change')
)
@bind(
'destroy'
@ -427,8 +426,7 @@ class App.Model extends Spine.Model
App.Log.debug('Model', "local destroy #{@className}", items)
for item in items
for key, callback of App[ @className ].SUBSCRIPTION_ITEM[ item.id ]
item = App[ @className ]._fillUp(item)
callback(item, 'destroy')
callback(App[ @className ]._fillUp(item), 'destroy')
)
@changeTable = {}
@ -444,10 +442,9 @@ class App.Model extends Spine.Model
for key, callback of App[ @className ].SUBSCRIPTION_ITEM[ item.id ]
# only trigger callbacks if object has changed
if !@changeTable[key] || @changeTable[key] isnt item.updated_at
if !@changeTable[key] || @changeTable[key] < item.updated_at
@changeTable[key] = item.updated_at
item = App[ @className ]._fillUp(item)
callback(item, 'refresh')
callback(App[@className]._fillUp(item), 'refresh')
)
# subscribe and render data after server change

View file

@ -6,14 +6,14 @@ App.Ajax.request({
url: '/assets/tests/ajax-test.json',
success: function (data) {
test( "ajax get 200", function() {
ok( true, "File found!" );
equal( data.success, true, "content parsable and ok!" );
equal( data.success2, undefined, "content parsable and ok!" );
ok( true, "File found!")
equal(data.success, true, "content parsable and ok!")
equal(data.success2, undefined, "content parsable and ok!")
});
},
error: function (data) {
test( "ajax", function() {
ok( false, "Failed!" );
ok( false, "Failed!")
});
}
});
@ -27,15 +27,15 @@ App.Ajax.request({
test( "ajax - queue - ajax get 200 1/2", function() {
// check queue
ok( !window.testAjax, 'ajax - queue - check queue' );
ok( !window.testAjax, 'ajax - queue - check queue')
window.testAjax = true;
equal( data.success, true, "ajax - queue - content parsable and ok!" );
equal( data.success2, undefined, "ajax - queue - content parsable and ok!" );
equal(data.success, true, "ajax - queue - content parsable and ok!")
equal(data.success2, undefined, "ajax - queue - content parsable and ok!")
});
},
error: function (data) {
test( "ajax", function() {
ok( false, "Failed!" );
ok( false, "Failed!")
});
}
});
@ -46,16 +46,16 @@ App.Ajax.request({
success: function (data) {
test( "ajax - queue - ajax get 200 2/2", function() {
// check queue
ok( window.testAjax, 'ajax - queue - check queue' )
ok( window.testAjax, 'ajax - queue - check queue')
window.testAjax = undefined;
equal( data.success, true, "content parsable and ok!" );
equal( data.success2, undefined, "content parsable and ok!" );
equal(data.success, true, "content parsable and ok!")
equal(data.success2, undefined, "content parsable and ok!")
});
},
error: function (data) {
test( "ajax", function() {
ok( false, "Failed!" );
ok( false, "Failed!")
});
}
});
@ -68,15 +68,15 @@ App.Ajax.request({
test( "ajax - parallel - ajax get 200 1/2", function() {
// check queue
ok( window.testAjaxQ, 'ajax - parallel - check queue' );
ok( window.testAjaxQ, 'ajax - parallel - check queue')
window.testAjaxQ = undefined;
equal( data.success, true, "ajax - parallel - content parsable and ok!" );
equal( data.success2, undefined, "ajax - parallel - content parsable and ok!" );
equal(data.success, true, "ajax - parallel - content parsable and ok!")
equal(data.success2, undefined, "ajax - parallel - content parsable and ok!")
});
},
error: function (data) {
test( "ajax", function() {
ok( false, "Failed!" );
ok( false, "Failed!")
});
}
});
@ -86,27 +86,27 @@ App.Ajax.request({
success: function (data) {
test( "ajax - parallel - ajax get 200 2/2", function() {
// check queue
ok( !window.testAjaxQ, 'ajax - parallel - check queue' )
ok( !window.testAjaxQ, 'ajax - parallel - check queue')
window.testAjaxQ = true;
equal( data.success, true, "content parsable and ok!" );
equal( data.success2, undefined, "content parsable and ok!" );
equal(data.success, true, "content parsable and ok!")
equal(data.success2, undefined, "content parsable and ok!")
});
},
error: function (data) {
test( "ajax", function() {
ok( false, "Failed!" );
ok( false, "Failed!")
});
}
});
// delay
window.testDelay1 = false
App.Delay.set( function() {
test( "delay - test 1 - 1/3 - should not be executed, will be reset by next set()", function() {
App.Delay.set(function() {
test('delay - test 1 - 1/3 - should not be executed, will be reset by next set()', function() {
// check
ok( false, 'delay - test 1 - 1/3 - should not be executed, will be reset by next set()' );
ok(false, 'delay - test 1 - 1/3 - should not be executed, will be reset by next set()')
window.testDelay1 = true;
});
},
@ -114,11 +114,11 @@ App.Delay.set( function() {
'delay-test1',
'level'
);
App.Delay.set( function() {
test( "delay - test 1 - 2/3", function() {
App.Delay.set(function() {
test('delay - test 1 - 2/3', function() {
// check
ok( !window.testDelay1, 'delay - test 1 - 2/3' );
ok(!window.testDelay1, 'delay - test 1 - 2/3')
window.testDelay1 = 1;
});
},
@ -126,11 +126,11 @@ App.Delay.set( function() {
'delay-test1',
'level'
);
App.Delay.set( function() {
test( "delay - test 1 - 2/3", function() {
App.Delay.set(function() {
test('delay - test 1 - 2/3', function() {
// check
ok( window.testDelay1, 'delay - test 1 - 2/3' );
ok(window.testDelay1, 'delay - test 1 - 2/3')
window.testDelay1 = false;
});
},
@ -139,41 +139,41 @@ App.Delay.set( function() {
'level'
);
App.Delay.set( function() {
test( "delay - test 2 - 1/3", function() {
App.Delay.set(function() {
test('delay - test 2 - 1/3', function() {
// check
ok( !window.testDelay2, 'delay - test 2 - 1/3' );
ok(!window.testDelay2, 'delay - test 2 - 1/3')
window.testDelay2 = 1;
});
},
2000
);
App.Delay.set( function() {
test( "delay - test 2 - 2/3", function() {
App.Delay.set(function() {
test('delay - test 2 - 2/3', function() {
// check
ok( !window.testDelay2, 'delay - test 2 - 2/3' );
ok(!window.testDelay2, 'delay - test 2 - 2/3')
});
},
1000
);
App.Delay.set( function() {
test( "delay - test 2 - 3/3", function() {
App.Delay.set(function() {
test('delay - test 2 - 3/3', function() {
// check
ok( window.testDelay2, 'delay - test 2 - 3/3' );
ok(window.testDelay2, 'delay - test 2 - 3/3')
});
},
3000
);
window.testDelay3 = 1;
App.Delay.set( function() {
test( "delay - test 3 - 1/1", function() {
App.Delay.set(function() {
test('delay - test 3 - 1/1', function() {
// check
ok( false, 'delay - test 3 - 1/1' );
ok(false, 'delay - test 3 - 1/1')
});
},
1000,
@ -181,11 +181,11 @@ App.Delay.set( function() {
);
App.Delay.clear('delay3')
App.Delay.set( function() {
test( "delay - test 4 - 1/1", function() {
App.Delay.set(function() {
test('delay - test 4 - 1/1', function() {
// check
ok( false, 'delay - test 4 - 1/1' );
ok(false, 'delay - test 4 - 1/1')
});
},
1000,
@ -197,27 +197,27 @@ App.Delay.clearLevel('Page')
// interval 1
window.testInterval1 = 1
App.Interval.set( function() {
App.Interval.set(function() {
window.testInterval1 += 1;
},
2000,
'interval-test1'
);
App.Delay.set( function() {
test( "interval - test 1 - 1/2", function() {
App.Delay.set(function() {
test('interval - test 1 - 1/2', function() {
// check
equal( window.testInterval1, 4, 'interval - test 1' );
equal(window.testInterval1, 4, 'interval - test 1')
App.Interval.clear('interval-test1')
});
},
5200
);
App.Delay.set( function() {
test( "interval - test 1 - 2/2", function() {
App.Delay.set(function() {
test('interval - test 1 - 2/2', function() {
// check
equal( window.testInterval1, 4, 'interval - test after clear' );
equal(window.testInterval1, 4, 'interval - test after clear')
});
},
6500
@ -226,28 +226,28 @@ App.Delay.set( function() {
// interval 2
window.testInterval2 = 1
App.Interval.set( function() {
App.Interval.set(function() {
window.testInterval2 += 1;
},
2000,
undefined,
'someLevel'
);
App.Delay.set( function() {
test( "interval - test 2 - 1/2", function() {
App.Delay.set(function() {
test('interval - test 2 - 1/2', function() {
// check
equal( window.testInterval2, 4, 'interval - test 2' );
equal(window.testInterval2, 4, 'interval - test 2')
App.Interval.clearLevel('someLevel')
});
},
5200
);
App.Delay.set( function() {
test( "interval - test 2 - 2/2", function() {
App.Delay.set(function() {
test('interval - test 2 - 2/2', function() {
// check
equal( window.testInterval2, 4, 'interval - test 2 - after clear' );
equal(window.testInterval2, 4, 'interval - test 2 - after clear')
});
},
6900
@ -255,190 +255,190 @@ App.Delay.set( function() {
// i18n
test( "i18n", function() {
test('i18n', function() {
// de
App.i18n.set('de-de');
var translated = App.i18n.translateContent('yes');
equal( translated, 'ja', 'de-de - yes / ja translated correctly' );
App.i18n.set('de-de')
var translated = App.i18n.translateContent('yes')
equal(translated, 'ja', 'de-de - yes / ja translated correctly')
translated = App.i18n.translatePlain('yes');
equal( translated, 'ja', 'de-de - yes / ja translated correctly' );
translated = App.i18n.translatePlain('yes')
equal(translated, 'ja', 'de-de - yes / ja translated correctly')
translated = App.i18n.translateInline('yes');
equal( translated, 'ja', 'de-de - yes / ja translated correctly' );
translated = App.i18n.translateInline('yes')
equal(translated, 'ja', 'de-de - yes / ja translated correctly')
translated = App.i18n.translateContent('%s ago', 123);
equal( translated, 'vor 123', 'de-de - %s' );
equal(translated, 'vor 123', 'de-de - %s')
translated = App.i18n.translateContent('%s ago', '<b>quote</b>');
equal( translated, 'vor &lt;b&gt;quote&lt;/b&gt;', 'de-de - %s - quote' );
translated = App.i18n.translateContent('%s ago', '<b>quote</b>')
equal(translated, 'vor &lt;b&gt;quote&lt;/b&gt;', 'de-de - %s - quote')
translated = App.i18n.translateContent('%s %s test', 123, 'xxx |B|');
equal( translated, '123 xxx |B| test', 'de-de - %s %s' );
translated = App.i18n.translateContent('%s %s test', 123, 'xxx |B|')
equal(translated, '123 xxx |B| test', 'de-de - %s %s')
translated = App.i18n.translateContent('|%s| %s test', 123, 'xxx');
equal( translated, '<b>123</b> xxx test', 'de-de - *%s* %s' );
translated = App.i18n.translateContent('|%s| %s test', 123, 'xxx')
equal(translated, '<b>123</b> xxx test', 'de-de - *%s* %s')
translated = App.i18n.translateContent('||%s|| %s test', 123, 'xxx');
equal( translated, '<i>123</i> xxx test', 'de-de - *%s* %s' );
translated = App.i18n.translateContent('||%s|| %s test', 123, 'xxx')
equal(translated, '<i>123</i> xxx test', 'de-de - *%s* %s')
translated = App.i18n.translateContent('_%s_ %s test', 123, 'xxx');
equal( translated, '<u>123</u> xxx test', 'de-de - _%s_ %s' );
translated = App.i18n.translateContent('_%s_ %s test', 123, 'xxx')
equal(translated, '<u>123</u> xxx test', 'de-de - _%s_ %s')
translated = App.i18n.translateContent('§%s§ %s test', 123, 'xxx');
equal( translated, '<kbd>123</kbd> xxx test', 'de-de - §%s§ %s' );
translated = App.i18n.translateContent('§%s§ %s test', 123, 'xxx')
equal(translated, '<kbd>123</kbd> xxx test', 'de-de - §%s§ %s')
translated = App.i18n.translateContent('//%s// %s test', 123, 'xxx');
equal( translated, '<del>123</del> xxx test', 'de-de - //%s// %s' );
translated = App.i18n.translateContent('//%s// %s test', 123, 'xxx')
equal(translated, '<del>123</del> xxx test', 'de-de - //%s// %s')
translated = App.i18n.translateContent('\'%s\' %s test', 123, 'xxx');
equal( translated, '&#39;123&#39; xxx test', 'de-de - \'%s\' %s' );
translated = App.i18n.translateContent('\'%s\' %s test', 123, 'xxx')
equal(translated, '&#39;123&#39; xxx test', 'de-de - \'%s\' %s')
translated = App.i18n.translateContent('<test&now>//*äöüß');
equal( translated, '&lt;test&amp;now&gt;//*äöüß', 'de - <test&now>//*äöüß' );
translated = App.i18n.translateContent('<test&now>//*äöüß')
equal(translated, '&lt;test&amp;now&gt;//*äöüß', 'de - <test&now>//*äöüß')
translated = App.i18n.translateContent('some link [to what ever](http://lalala)');
equal( translated, 'some link <a href="http://lalala" target="_blank">to what ever</a>', 'de-de - link' );
translated = App.i18n.translateContent('some link [to what ever](http://lalala)')
equal(translated, 'some link <a href="http://lalala" target="_blank">to what ever</a>', 'de-de - link')
translated = App.i18n.translateContent('some link [to what ever](%s)', 'http://lalala');
equal( translated, 'some link <a href="http://lalala" target="_blank">to what ever</a>', 'de-de - link' );
translated = App.i18n.translateContent('some link [to what ever](%s)', 'http://lalala')
equal(translated, 'some link <a href="http://lalala" target="_blank">to what ever</a>', 'de-de - link')
translated = App.i18n.translateContent('Enables user authentication via %s. Register your app first at [%s](%s).', 'XXX', 'YYY', 'http://lalala');
equal( translated, 'Aktivieren der Benutzeranmeldung über XXX. Registriere Deine Anwendung zuerst über <a href="http://lalala" target="_blank">YYY</a>.', 'en-us - link' );
translated = App.i18n.translateContent('Enables user authentication via %s. Register your app first at [%s](%s).', 'XXX', 'YYY', 'http://lalala')
equal(translated, 'Aktivieren der Benutzeranmeldung über XXX. Registriere Deine Anwendung zuerst über <a href="http://lalala" target="_blank">YYY</a>.', 'en-us - link')
var time_local = new Date();
var offset = time_local.getTimezoneOffset();
var timestamp = App.i18n.translateTimestamp('2012-11-06T21:07:24Z', offset);
equal( timestamp, '06.11.2012 21:07', 'de-de - timestamp translated correctly' );
equal(timestamp, '06.11.2012 21:07', 'de-de - timestamp translated correctly')
// en
App.i18n.set('en-us');
translated = App.i18n.translateContent('yes');
equal( translated, 'yes', 'en-us - yes translated correctly' );
App.i18n.set('en-us')
translated = App.i18n.translateContent('yes')
equal(translated, 'yes', 'en-us - yes translated correctly')
translated = App.i18n.translatePlain('yes');
equal( translated, 'yes', 'en-us - yes translated correctly' );
translated = App.i18n.translatePlain('yes')
equal(translated, 'yes', 'en-us - yes translated correctly')
translated = App.i18n.translateInline('yes');
equal( translated, 'yes', 'en-us - yes translated correctly' );
translated = App.i18n.translateInline('yes')
equal(translated, 'yes', 'en-us - yes translated correctly')
translated = App.i18n.translateContent('%s ago', 123);
equal( translated, '123 ago', 'en-us - %s' );
equal(translated, '123 ago', 'en-us - %s')
translated = App.i18n.translateContent('%s ago', '<b>quote</b>');
equal( translated, '&lt;b&gt;quote&lt;/b&gt; ago', 'en-us - %s - qupte' );
translated = App.i18n.translateContent('%s ago', '<b>quote</b>')
equal(translated, '&lt;b&gt;quote&lt;/b&gt; ago', 'en-us - %s - qupte')
translated = App.i18n.translateContent('%s %s test', 123, 'xxx');
equal( translated, '123 xxx test', 'en-us - %s %s' );
translated = App.i18n.translateContent('%s %s test', 123, 'xxx')
equal(translated, '123 xxx test', 'en-us - %s %s')
translated = App.i18n.translateContent('|%s| %s test', 123, 'xxx |B|');
equal( translated, '<b>123</b> xxx |B| test', 'en-us - *%s* %s' );
translated = App.i18n.translateContent('|%s| %s test', 123, 'xxx |B|')
equal(translated, '<b>123</b> xxx |B| test', 'en-us - *%s* %s')
translated = App.i18n.translateContent('||%s|| %s test', 123, 'xxx');
equal( translated, '<i>123</i> xxx test', 'en-us - *%s* %s' );
translated = App.i18n.translateContent('||%s|| %s test', 123, 'xxx')
equal(translated, '<i>123</i> xxx test', 'en-us - *%s* %s')
translated = App.i18n.translateContent('_%s_ %s test', 123, 'xxx');
equal( translated, '<u>123</u> xxx test', 'en-us - _%s_ %s' );
translated = App.i18n.translateContent('_%s_ %s test', 123, 'xxx')
equal(translated, '<u>123</u> xxx test', 'en-us - _%s_ %s')
translated = App.i18n.translateContent('§%s§ %s test', 123, 'xxx');
equal( translated, '<kbd>123</kbd> xxx test', 'en-us - §%s§ %s' );
translated = App.i18n.translateContent('§%s§ %s test', 123, 'xxx')
equal(translated, '<kbd>123</kbd> xxx test', 'en-us - §%s§ %s')
translated = App.i18n.translateContent('Here you can search for ticket, customers and organizations. Use the wildcard §*§ to find everything. E. g. §smi*§ or §rosent*l§. You also can use ||double quotes|| for searching phrases §"some phrase"§.');
equal( translated, 'Here you can search for ticket, customers and organizations. Use the wildcard <kbd>*</kbd> to find everything. E. g. <kbd>smi*</kbd> or <kbd>rosent*l</kbd>. You also can use <i>double quotes</i> for searching phrases <kbd>&quot;some phrase&quot;</kbd>.', 'en-us - §§ §§ §§ || §§' );
translated = App.i18n.translateContent('Here you can search for ticket, customers and organizations. Use the wildcard §*§ to find everything. E. g. §smi*§ or §rosent*l§. You also can use ||double quotes|| for searching phrases §"some phrase"§.')
equal(translated, 'Here you can search for ticket, customers and organizations. Use the wildcard <kbd>*</kbd> to find everything. E. g. <kbd>smi*</kbd> or <kbd>rosent*l</kbd>. You also can use <i>double quotes</i> for searching phrases <kbd>&quot;some phrase&quot;</kbd>.', 'en-us - §§ §§ §§ || §§')
translated = App.i18n.translateContent('//%s// %s test', 123, 'xxx');
equal( translated, '<del>123</del> xxx test', 'en-us - //%s// %s' );
translated = App.i18n.translateContent('//%s// %s test', 123, 'xxx')
equal(translated, '<del>123</del> xxx test', 'en-us - //%s// %s')
translated = App.i18n.translateContent('\'%s\' %s test', 123, 'xxx');
equal( translated, '&#39;123&#39; xxx test', 'en-us - \'%s\' %s' );
translated = App.i18n.translateContent('\'%s\' %s test', 123, 'xxx')
equal(translated, '&#39;123&#39; xxx test', 'en-us - \'%s\' %s')
translated = App.i18n.translateContent('<test&now>');
equal( translated, '&lt;test&amp;now&gt;', 'en-us - <test&now>' );
translated = App.i18n.translateContent('<test&now>')
equal(translated, '&lt;test&amp;now&gt;', 'en-us - <test&now>')
translated = App.i18n.translateContent('some link [to what ever](http://lalala)');
equal( translated, 'some link <a href="http://lalala" target="_blank">to what ever</a>', 'en-us - link' );
translated = App.i18n.translateContent('some link [to what ever](http://lalala)')
equal(translated, 'some link <a href="http://lalala" target="_blank">to what ever</a>', 'en-us - link')
translated = App.i18n.translateContent('some link [to what ever](%s)', 'http://lalala');
equal( translated, 'some link <a href="http://lalala" target="_blank">to what ever</a>', 'en-us - link' );
translated = App.i18n.translateContent('some link [to what ever](%s)', 'http://lalala')
equal(translated, 'some link <a href="http://lalala" target="_blank">to what ever</a>', 'en-us - link')
translated = App.i18n.translateContent('Enables user authentication via %s. Register your app first at [%s](%s).', 'XXX', 'YYY', 'http://lalala');
equal( translated, 'Enables user authentication via XXX. Register your app first at <a href="http://lalala" target="_blank">YYY</a>.', 'en-us - link' );
translated = App.i18n.translateContent('Enables user authentication via %s. Register your app first at [%s](%s).', 'XXX', 'YYY', 'http://lalala')
equal(translated, 'Enables user authentication via XXX. Register your app first at <a href="http://lalala" target="_blank">YYY</a>.', 'en-us - link')
timestamp = App.i18n.translateTimestamp('2012-11-06T21:07:24Z', offset);
equal( timestamp, '11/06/2012 21:07', 'en - timestamp translated correctly' );
timestamp = App.i18n.translateTimestamp('2012-11-06T21:07:24Z', offset)
equal(timestamp, '11/06/2012 21:07', 'en - timestamp translated correctly')
// locale alias test
// de
App.i18n.set('de');
var translated = App.i18n.translateContent('yes');
equal( translated, 'ja', 'de - yes / ja translated correctly' );
App.i18n.set('de')
var translated = App.i18n.translateContent('yes')
equal(translated, 'ja', 'de - yes / ja translated correctly')
// locale detection test
// de-ch
App.i18n.set('de-ch');
var translated = App.i18n.translateContent('yes');
equal( translated, 'ja', 'de - yes / ja translated correctly' );
App.i18n.set('de-ch')
var translated = App.i18n.translateContent('yes')
equal(translated, 'ja', 'de - yes / ja translated correctly')
});
// events
test( "events simple", function() {
test('events simple', function() {
// single bind
App.Event.bind( 'test1', function(data) {
ok( true, 'event received - single bind');
equal( data.success, true, 'event received - data ok - single bind');
App.Event.bind('test1', function(data) {
ok(true, 'event received - single bind')
equal(data.success, true, 'event received - data ok - single bind')
});
App.Event.bind( 'test2', function(data) {
ok( false, 'should not be triggered - single bind');
App.Event.bind('test2', function(data) {
ok(false, 'should not be triggered - single bind')
});
App.Event.trigger( 'test1', { success: true } );
App.Event.trigger('test1', { success: true })
App.Event.unbind( 'test1')
App.Event.bind( 'test1', function(data) {
ok( false, 'should not be triggered - single bind');
App.Event.unbind('test1')
App.Event.bind('test1', function(data) {
ok(false, 'should not be triggered - single bind')
});
App.Event.unbind( 'test1');
App.Event.trigger( 'test1', { success: true } );
App.Event.unbind('test1')
App.Event.trigger('test1', { success: true })
// multi bind
App.Event.bind( 'test1-1 test1-2', function(data) {
ok( true, 'event received - multi bind');
equal( data.success, true, 'event received - data ok - multi bind');
App.Event.bind('test1-1 test1-2', function(data) {
ok(true, 'event received - multi bind')
equal(data.success, true, 'event received - data ok - multi bind')
});
App.Event.bind( 'test1-3', function(data) {
ok( false, 'should not be triggered - multi bind');
App.Event.bind('test1-3', function(data) {
ok(false, 'should not be triggered - multi bind')
});
App.Event.trigger( 'test1-2', { success: true } );
App.Event.trigger('test1-2', { success: true })
App.Event.unbind( 'test1-1')
App.Event.bind( 'test1-1', function(data) {
ok( false, 'should not be triggered - multi bind');
App.Event.unbind('test1-1')
App.Event.bind('test1-1', function(data) {
ok(false, 'should not be triggered - multi bind')
});
App.Event.trigger( 'test1-2', { success: true } );
App.Event.trigger('test1-2', { success: true })
});
test( "events level", function() {
test('events level', function() {
// bind with level
App.Event.bind( 'test3', function(data) {
ok( false, 'should not be triggered!');
}, 'test-level' );
App.Event.bind('test3', function(data) {
ok(false, 'should not be triggered!')
}, 'test-level')
// unbind with level
App.Event.unbindLevel( 'test-level' );
App.Event.unbindLevel( 'test-level')
// bind with level
App.Event.bind( 'test3', function(data) {
ok( true, 'event received');
equal( data.success, true, 'event received - data ok - level bind');
}, 'test-level' );
App.Event.trigger( 'test3', { success: true} );
App.Event.bind('test3', function(data) {
ok(true, 'event received')
equal(data.success, true, 'event received - data ok - level bind')
}, 'test-level')
App.Event.trigger('test3', { success: true})
});
// session store
test( "session store", function() {
test('session store', function() {
var tests = [
'some 123äöüßadajsdaiosjdiaoidj',
@ -449,16 +449,16 @@ test( "session store", function() {
// write/get
App.SessionStorage.clear()
_.each(tests, function(test) {
App.SessionStorage.set( 'test1', test );
var item = App.SessionStorage.get( 'test1' );
deepEqual( test, item, 'write/get - compare stored and actual data' )
App.SessionStorage.set('test1', test)
var item = App.SessionStorage.get('test1')
deepEqual(test, item, 'write/get - compare stored and actual data')
});
// undefined/get
App.SessionStorage.clear()
_.each(tests, function(test) {
var item = App.SessionStorage.get( 'test1' );
deepEqual( undefined, item, 'undefined/get - compare not existing data and actual data' )
var item = App.SessionStorage.get('test1')
deepEqual(undefined, item, 'undefined/get - compare not existing data and actual data')
});
// write/get/delete
@ -470,21 +470,21 @@ test( "session store", function() {
App.SessionStorage.clear()
_.each(tests, function(test) {
App.SessionStorage.set( test.key, test.value );
App.SessionStorage.set(test.key, test.value)
});
_.each(tests, function(test) {
var item = App.SessionStorage.get( test.key );
deepEqual( test.value, item, 'write/get/delete - compare stored and actual data' );
App.SessionStorage.delete( test.key );
item = App.SessionStorage.get( test.key );
deepEqual( undefined, item, 'write/get/delete - compare deleted data' );
var item = App.SessionStorage.get(test.key)
deepEqual(test.value, item, 'write/get/delete - compare stored and actual data')
App.SessionStorage.delete( test.key)
item = App.SessionStorage.get(test.key)
deepEqual(undefined, item, 'write/get/delete - compare deleted data')
});
});
// config
test( "config", function() {
test('config', function() {
// simple
var tests = [
@ -494,12 +494,12 @@ test( "config", function() {
];
_.each(tests, function(test) {
App.Config.set( test.key, test.value )
App.Config.set(test.key, test.value )
});
_.each(tests, function(test) {
var item = App.Config.get( test.key )
deepEqual( item, test.value, 'set/get tests' );
var item = App.Config.get(test.key )
deepEqual(item, test.value, 'set/get tests')
});
// group
@ -510,24 +510,24 @@ test( "config", function() {
];
var group = {};
_.each(test_groups, function(test) {
App.Config.set( test.key, test.value, 'group1' );
App.Config.set(test.key, test.value, 'group1')
group[test.key] = test.value
});
// verify whole group
var item = App.Config.get( 'group1' );
deepEqual( item, group, 'group - verify group hash');
var item = App.Config.get('group1')
deepEqual(item, group, 'group - verify group hash')
// verify each setting
_.each(test_groups, function(test) {
var item = App.Config.get( test.key, 'group1' );
deepEqual( item, test.value, 'group set/get tests' );
var item = App.Config.get(test.key, 'group1')
deepEqual(item, test.value, 'group set/get tests')
});
});
// clone
test( "clone", function() {
test('clone', function() {
// simple
var tests = [
@ -578,7 +578,7 @@ test( "clone", function() {
_.each(tests, function(test) {
var item = clone( test )
deepEqual( item, test, 'clone' );
deepEqual(item, test, 'clone')
});
// complex test
@ -597,8 +597,7 @@ test( "clone", function() {
// modify source later, should not have any result
source[0].name = 'some new name'
deepEqual( result, reference, 'clone' );
deepEqual(result, reference, 'clone')
// full test
var source = [
@ -617,97 +616,110 @@ test( "clone", function() {
source[0].name = 'some new name'
source[2].fn = 'some new name'
deepEqual( result[0], reference[0], 'clone full' );
deepEqual( result[1], reference[1], 'clone full' );
deepEqual(result[0], reference[0], 'clone full')
deepEqual(result[1], reference[1], 'clone full')
equal( typeof reference[2].fn, 'function')
equal( typeof result[2].fn, 'function')
equal(typeof reference[2].fn, 'function')
equal(typeof result[2].fn, 'function')
equal( reference[2].fn(), 'test')
equal( result[2].fn(), 'test')
equal(reference[2].fn(), 'test')
equal(result[2].fn(), 'test')
});
// diff
test( "diff", function() {
test('difference', function() {
// simple
var tests = [
{
object1: {
key1: 123,
key2: 1234
},
object2: {
key1: 123,
key2: 1235
},
result: {
key2: 1235
}
},
{
object1: {
key1: 123,
key2: 123
},
object2: {
key1: 123,
key2: 123
},
result: {}
},
{
object1: {
key1: 123,
key2: 123
},
object2: {
key1: 123,
key2: 123
},
result: {}
},
{
object1: {
key1: 123,
key2: [1,3,5]
},
object2: {
key1: 123,
key2: 123
},
result: {
key2: 123
}
},
{
object1: {
key1: 123,
key2: [1,3,5]
},
object2: {
key1: 123,
},
result: {}
},
{
object1: {
key1: 123,
},
object2: {
key1: 123,
key2: 124
},
result: {}
},
];
var object1 = {
key1: 123,
key2: 1234
}
var object2 = {
key1: 123,
key2: 1235
}
var result = {
key2: 1235
}
var item = difference(object1, object2)
deepEqual(item, result)
_.each(tests, function(test) {
var item = difference( test.object1, test.object2 )
deepEqual( item, test.result, 'tests simple' );
});
object1 = {
key1: 123,
key2: 123
}
object2 = {
key1: 123,
key2: 123
}
result = {}
item = difference(object1, object2)
deepEqual(item, result)
object1 = {
key1: 123,
key2: [1,3,5]
}
object2 = {
key1: 123,
key2: 123
}
result = {
key2: 123
}
item = difference(object1, object2)
deepEqual(item, result)
object1 = {
key1: 123,
key2: [1,3,5]
}
object2 = {
key1: 123,
}
result = {}
item = difference(object1, object2)
deepEqual(item, result)
object1 = {
key1: 123,
}
object2 = {
key1: 123,
key2: 124
}
result = {}
item = difference(object1, object2)
deepEqual(item, result)
object1 = {
customer_id: 1,
organization_id: 2,
}
object2 = {
customer_id: 1,
organization_id: null,
}
result = {
organization_id: null,
}
item = difference(object1, object2)
deepEqual(item, result)
object1 = {
customer_id: 1,
organization_id: null,
}
object2 = {
customer_id: 1,
organization_id: 2,
}
result = {
organization_id: 2,
}
item = difference(object1, object2)
deepEqual(item, result)
});
@ -718,14 +730,14 @@ App.Auth.login({
password: 'not_existing',
},
success: function(data) {
test( "auth - not existing user", function() {
ok( false, 'ok' )
test('auth - not existing user', function() {
ok(false, 'ok')
})
},
error: function() {
test( "auth - not existing user", function() {
ok( true, 'ok' )
authWithSession();
test('auth - not existing user', function() {
ok(true, 'ok')
authWithSession()
})
}
});
@ -737,15 +749,15 @@ var authWithSession = function() {
password: 'test',
},
success: function(data) {
test( "auth - existing user", function() {
ok( true, 'authenticated')
var user = App.Session.get('login');
equal( 'nicole.braun@zammad.org', user, 'session login' )
test('auth - existing user', function() {
ok(true, 'authenticated')
var user = App.Session.get('login')
equal('nicole.braun@zammad.org', user, 'session login')
})
},
error: function() {
test( "auth - existing user", function() {
ok( false, 'not authenticated' )
test('auth - existing user', function() {
ok(false, 'not authenticated')
})
}
});

View file

@ -40,7 +40,7 @@ class AgentTicketAttachmentTest < TestCase
# add attachment, attachment check should quiet
file_upload(
css: '.active .attachmentPlaceholder-inputHolder input',
css: '.content.active .attachmentPlaceholder-inputHolder input',
files: ['test/fixtures/upload2.jpg', 'test/fixtures/upload1.txt'],
)
@ -54,13 +54,13 @@ class AgentTicketAttachmentTest < TestCase
# check if ticket is shown and attachment exists
location_check(url: '#ticket/zoom/')
sleep 2
ticket_number = @browser.find_elements({ css: '.active .ticketZoom-header .ticket-number' })[0].text
ticket_number = @browser.find_elements({ css: '.content.active .ticketZoom-header .ticket-number' })[0].text
match(
css: '.active .ticket-article-item:nth-child(1) .attachments',
css: '.content.active .ticket-article-item:nth-child(1) .attachments',
value: 'upload2.jpg',
)
match(
css: '.active .ticket-article-item:nth-child(1) .attachments',
css: '.content.active .ticket-article-item:nth-child(1) .attachments',
value: 'upload1.txt',
)
@ -77,7 +77,7 @@ class AgentTicketAttachmentTest < TestCase
)
# submit form
click(css: '.active .js-submit')
click(css: '.content.active .js-submit')
sleep 2
# check warning
@ -86,12 +86,12 @@ class AgentTicketAttachmentTest < TestCase
# add attachment, attachment check should quiet
file_upload(
css: '.active .attachmentPlaceholder-inputHolder input',
css: '.content.active .attachmentPlaceholder-inputHolder input',
files: ['test/fixtures/upload1.txt'],
)
# submit form
click(css: '.active .js-submit')
click(css: '.content.active .js-submit')
sleep 2
# no warning
@ -113,34 +113,34 @@ class AgentTicketAttachmentTest < TestCase
# check content and edit screen in instance 1
match(
css: '.active div.ticket-article',
css: '.content.active div.ticket-article',
value: 'test 6 - ticket 1-1',
)
match_not(
css: '.active .ticket-article-item:nth-child(3) .attachments',
css: '.content.active .ticket-article-item:nth-child(3) .attachments',
value: 'upload2.jpg',
)
match(
css: '.active .ticket-article-item:nth-child(3) .attachments',
css: '.content.active .ticket-article-item:nth-child(3) .attachments',
value: 'upload1.txt',
)
# add attachment without body
file_upload(
css: '.active .attachmentPlaceholder-inputHolder input',
css: '.content.active .attachmentPlaceholder-inputHolder input',
files: ['test/fixtures/upload2.jpg', 'test/fixtures/upload1.txt'],
)
# submit form
click(css: '.active .js-submit')
click(css: '.content.active .js-submit')
sleep 2
# check warning
match(
css: '.active .modal',
css: '.content.active .modal',
value: 'missing',
)
click(css: '.active .modal .js-cancel')
click(css: '.content.active .modal .js-cancel')
sleep 2
ticket_update(
@ -151,7 +151,7 @@ class AgentTicketAttachmentTest < TestCase
)
# submit form
click(css: '.active .js-submit')
click(css: '.content.active .js-submit')
sleep 2
# discard changes should gone away
@ -166,11 +166,11 @@ class AgentTicketAttachmentTest < TestCase
},
)
match(
css: '.active .ticket-article-item:nth-child(4) .attachments',
css: '.content.active .ticket-article-item:nth-child(4) .attachments',
value: 'upload2.jpg',
)
match(
css: '.active .ticket-article-item:nth-child(4) .attachments',
css: '.content.active .ticket-article-item:nth-child(4) .attachments',
value: 'upload1.txt',
)
#
@ -216,10 +216,10 @@ class AgentTicketAttachmentTest < TestCase
)
# check if customer has changed in second browser
click(browser: browser1, css: '.active .tabsSidebar-tab[data-tab="customer"]')
click(browser: browser1, css: '.content.active .tabsSidebar-tab[data-tab="customer"]')
watch_for(
browser: browser1,
css: '.active .tabsSidebar',
css: '.content.active .tabsSidebar',
value: user_email,
)
@ -228,17 +228,17 @@ class AgentTicketAttachmentTest < TestCase
#
# modify customer
click(browser: browser1, css: '.active .sidebar[data-tab="customer"] .js-actions .dropdown-toggle')
click(browser: browser1, css: '.active .sidebar[data-tab="customer"] .js-actions [data-type="customer-edit"]')
click(browser: browser1, css: '.content.active .sidebar[data-tab="customer"] .js-actions .dropdown-toggle')
click(browser: browser1, css: '.content.active .sidebar[data-tab="customer"] .js-actions [data-type="customer-edit"]')
sleep 2
set(browser: browser1, css: '.modal [name="address"]', value: 'some new address')
click(browser: browser1, css: '.modal .js-submit')
# verify is customer has chnaged other browser too
click(browser: browser2, css: '.active .tabsSidebar-tab[data-tab="customer"]')
click(browser: browser2, css: '.content.active .tabsSidebar-tab[data-tab="customer"]')
watch_for(
browser: browser2,
css: '.active .sidebar[data-tab="customer"]',
css: '.content.active .sidebar[data-tab="customer"]',
value: 'some new address',
)
@ -247,8 +247,8 @@ class AgentTicketAttachmentTest < TestCase
#
# change org of customer, check if org is shown in sidebar
click(browser: browser1, css: '.active .sidebar[data-tab="customer"] .js-actions .dropdown-toggle')
click(browser: browser1, css: '.active .sidebar[data-tab="customer"] .js-actions [data-type="customer-edit"]')
click(browser: browser1, css: '.content.active .sidebar[data-tab="customer"] .js-actions .dropdown-toggle')
click(browser: browser1, css: '.content.active .sidebar[data-tab="customer"] .js-actions [data-type="customer-edit"]')
sleep 2
set(browser: browser1, css: '.modal .js-input', value: 'zammad')
click(browser: browser1, css: '.modal .js-input')
@ -258,10 +258,10 @@ class AgentTicketAttachmentTest < TestCase
# check if org has changed in second browser
sleep 3
click(browser: browser2, css: '.active .tabsSidebar-tab[data-tab="organization"]')
click(browser: browser2, css: '.content.active .tabsSidebar-tab[data-tab="organization"]')
watch_for(
browser: browser2,
css: '.active .sidebar[data-tab="organization"]',
css: '.content.active .sidebar[data-tab="organization"]',
value: 'Zammad Foundation',
)