Browse Source

Improved task reload and maintenance message and tests.

Martin Edenhofer 11 years ago
parent
commit
78c6b96aa5

+ 19 - 8
app/assets/javascripts/app/controllers/_application_controller.js.coffee

@@ -24,6 +24,13 @@ class App.Controller extends Spine.Controller
     else
       window.prompt( "Copy to clipboard: Ctrl+C, Enter", text )
 
+  # disable all delay's and interval's
+  disconnectClient: ->
+    App.Delay.reset()
+    App.Interval.reset()
+    App.WebSocket.close( force: true )
+
+
   # add @notify methode to create notification
   notify: (data) ->
     App.Event.trigger 'notify', data
@@ -478,7 +485,7 @@ class App.ErrorModal extends App.ControllerModal
       keyboard: false,
     )
 
-class App.SessionReloadModal extends App.ControllerModal
+class App.SessionMessage extends App.ControllerModal
   constructor: ->
     super
     @render()
@@ -497,15 +504,19 @@ class App.SessionReloadModal extends App.ControllerModal
     )
 
     # reload page on modal hidden
-    @el.on('hidden', =>
-      @reload()
-    )
+    if @forceReload
+      @el.on('hidden', =>
+        @reload()
+      )
 
-  modalHide: (e) ->
-    @reload(e)
+  modalHide: (e) =>
+    if @forceReload
+      @reload(e)
+    @el.modal('hide')
 
-  submit: (e) ->
-    @reload(e)
+  submit: (e) =>
+    if @forceReload
+      @reload(e)
 
   reload: (e) ->
     if e

+ 13 - 9
app/assets/javascripts/app/controllers/maintenance_widget.js.coffee

@@ -12,15 +12,19 @@ class Message extends App.ControllerModal
     @render(@message)
 
   render: (message = {}) ->
-    @html App.view('modal')(
-      title:   message.title,
-      message: message.message
-      detail:  message.detail
-      close:   message.close
-    )
-    @modalShow(
-      backdrop: true,
-      keyboard: true,
+
+    if message.reload
+      @disconnectClient()
+      button = 'Reload application'
+
+    new App.SessionMessage(
+      title:       message.title
+      message:     message.message
+      keyboard:    false
+      backdrop:    true
+      close:       true
+      button:      button
+      forceReload: message.reload
     )
 
 App.Config.set( 'maintenance', App.MaintenanceWidget, 'Widgets' )

+ 9 - 12
app/assets/javascripts/app/controllers/task_widget.js.coffee

@@ -49,19 +49,16 @@ class App.TaskWidget extends App.Controller
 
         # only if new client id isnt own client id
         if data.taskbar_id isnt App.TaskManager.TaskbarId()
-          @error = new App.SessionReloadModal(
-            title:    'Session'
-            message:  'Session taken over... please reload page or work with other browser window.'
-            keyboard: false
-            backdrop: true
-            close:    true
-            button:   'Reload application'
+          @error = new App.SessionMessage(
+            title:       'Session'
+            message:     'Session taken over... please reload page or work with other browser window.'
+            keyboard:    false
+            backdrop:    true
+            close:       true
+            button:      'Reload application'
+            forceReload: true
           )
-
-          # disable all delay's and interval's
-          App.Delay.reset()
-          App.Interval.reset()
-          App.WebSocket.close( force: true )
+          @disconnectClient()
 
   render: ->
 

+ 9 - 3
app/assets/javascripts/app/views/maintenance.jst.eco

@@ -5,18 +5,24 @@
   <div class="control-group">
     <label class="control-label" for="title"><%- @T('Title') %></label>
     <div class="controls">
-      <input type="text" name="title" class="span7" placeholder="<%- @Ti('Title') %>" required>
+      <input type="text" name="title" class="span7" placeholder="<%- @Ti('some title') %>" required>
     </div>
   </div>
   <div class="control-group">
     <label class="control-label" for="message"><%- @T('Message') %></label>
     <div class="controls">
-      <textarea name="message" class="span7" rows="8" placeholder="<%- @Ti('Maintenance Message') %>" required></textarea>
+      <textarea name="message" class="span7" rows="8" placeholder="<%- @Ti('what details') %>" required></textarea>
     </div>
   </div>
   <div class="control-group">
+    <label class="control-label" for="message"><%- @T('Reload application') %></label>
     <div class="controls">
-      <button type="submit" class="btn btn-primary submit"><%- @T('Send Message') %></button>
+      <input name="reload" type="checkbox" value="1">
+    </div>
+  </div>
+  <div class="control-group">
+    <div class="controls">
+      <button type="submit" class="btn btn-primary submit"><%- @T('Send to clients') %></button>
     </div>
   </div>
 </form>

+ 1 - 0
db/seeds.rb

@@ -1811,6 +1811,7 @@ Translation.create_if_not_exists( :locale => 'de', :source => "Back to top", :ta
 Translation.create_if_not_exists( :locale => 'de', :source => "Discard your unsaved changes.", :target => "Verwerfen der ungespeicherten Änderungen."  )
 Translation.create_if_not_exists( :locale => 'de', :source => "Copy to clipboard: Ctrl+C, Enter", :target => "In die Zwischenablage kopieren: Strg+C, Return"  )
 Translation.create_if_not_exists( :locale => 'de', :source => "Copy to clipboard", :target => "In die Zwischenablage kopieren"  )
+Translation.create_if_not_exists( :locale => 'de', :source => "Send to clients", :target => "An Clients senden"  )
 #Translation.create_if_not_exists( :locale => 'de', :source => "", :target => ""  )
 
 # install all packages in auto_install

+ 98 - 42
test/browser/maintenance_message_test.rb

@@ -6,7 +6,7 @@ class MaintenanceMessageTest < TestCase
     message = 'message 1äöüß ' + rand(99999999999999999).to_s
     tests = [
       {
-        :name     => 'start',
+        :name     => 'check #1',
         :instance1 => browser_instance,
         :instance2 => browser_instance,
         :instance1_username => 'master@example.com',
@@ -15,18 +15,6 @@ class MaintenanceMessageTest < TestCase
         :instance2_password => 'test',
         :url      => browser_url,
         :action   => [
-          {
-            :where   => :instance1,
-            :execute => 'check',
-            :css     => '#login',
-            :result  => false,
-          },
-          {
-            :where   => :instance2,
-            :execute => 'check',
-            :css     => '#login',
-            :result  => false,
-          },
           {
             :execute => 'wait',
             :value   => 1,
@@ -36,19 +24,11 @@ class MaintenanceMessageTest < TestCase
             :execute => 'click',
             :css     => 'a[href="#admin"]',
           },
-          {
-            :execute => 'wait',
-            :value   => 1,
-          },
           {
             :where   => :instance1,
             :execute => 'click',
             :css     => 'a[href="#maintenance"]',
           },
-          {
-            :execute => 'wait',
-            :value   => 1,
-          },
           {
             :where   => :instance1,
             :execute => 'set',
@@ -70,6 +50,13 @@ class MaintenanceMessageTest < TestCase
             :execute => 'wait',
             :value   => 5,
           },
+          {
+            :where        => :instance1,
+            :execute      => 'match',
+            :css          => 'body',
+            :value        => message,
+            :match_result => false,
+          },
           {
             :where   => :instance2,
             :execute => 'check',
@@ -77,7 +64,7 @@ class MaintenanceMessageTest < TestCase
             :result  => true,
           },
           {
-            :where   => :instance2,
+            :where        => :instance2,
             :execute      => 'match',
             :css          => 'body',
             :value        => message,
@@ -86,76 +73,145 @@ class MaintenanceMessageTest < TestCase
           {
             :where   => :instance2,
             :execute => 'click',
-            :css     => 'div.modal-backdrop.fade.in',
+            :css     => 'div.modal-header .close',
+          },
+          {
+            :execute => 'wait',
+            :value   => 2,
           },
         ],
       },
       {
-        :name     => 'start',
+        :name     => 'check #2',
         :action   => [
           {
             :where   => :instance1,
-            :execute => 'check',
-            :css     => '#login',
-            :result  => false,
+            :execute => 'click',
+            :css     => 'a[href="#admin"]',
           },
           {
-            :where   => :instance2,
-            :execute => 'check',
-            :css     => '#login',
-            :result  => false,
+            :where   => :instance1,
+            :execute => 'click',
+            :css     => 'a[href="#maintenance"]',
           },
           {
-            :execute => 'wait',
-            :value   => 1,
+            :where   => :instance1,
+            :execute => 'set',
+            :css     => 'input[name="title"]',
+            :value   => message + ' #2',
+          },
+          {
+            :where   => :instance1,
+            :execute => 'set',
+            :css     => 'textarea[name="message"]',
+            :value   => message + ' #2',
           },
           {
             :where   => :instance1,
             :execute => 'click',
-            :css     => 'a[href="#admin"]',
+            :css     => 'button[type="submit"]',
           },
           {
             :execute => 'wait',
-            :value   => 1,
+            :value   => 5,
+          },
+          {
+            :where        => :instance1,
+            :execute      => 'match',
+            :css          => 'body',
+            :value        => message + ' #2',
+            :match_result => false,
           },
           {
             :where   => :instance1,
+            :execute => 'check',
+            :css     => 'div.modal-backdrop.fade.in',
+            :result  => false,
+          },
+          {
+            :where        => :instance2,
+            :execute      => 'match',
+            :css          => 'body',
+            :value        => message + ' #2',
+            :match_result => true,
+          },
+          {
+            :where   => :instance2,
             :execute => 'click',
-            :css     => 'a[href="#maintenance"]',
+            :css     => 'div.modal-header .close',
           },
           {
             :execute => 'wait',
-            :value   => 1,
+            :value   => 2,
+          },
+        ],
+      },
+      {
+        :name     => 'check #3',
+        :action   => [
+          {
+            :where   => :instance1,
+            :execute => 'click',
+            :css     => 'a[href="#admin"]',
+          },
+          {
+            :where   => :instance1,
+            :execute => 'click',
+            :css     => 'a[href="#maintenance"]',
           },
           {
             :where   => :instance1,
             :execute => 'set',
             :css     => 'input[name="title"]',
-            :value   => message,
+            :value   => message + ' #3' ,
           },
           {
             :where   => :instance1,
             :execute => 'set',
             :css     => 'textarea[name="message"]',
-            :value   => message,
+            :value   => message + ' #3',
+          },
+          {
+            :where   => :instance1,
+            :execute => 'setCheck',
+            :css     => 'input[name="reload"][value="1"]',
+          },
+          {
+            :where   => :instance1,
+            :execute => 'click',
+            :css     => 'button[type="submit"]',
           },
           {
             :execute => 'wait',
             :value   => 5,
           },
           {
-            :where   => :instance2,
+            :where   => :instance1,
             :execute => 'check',
             :css     => 'div.modal-backdrop.fade.in',
             :result  => false,
           },
           {
-            :where   => :instance2,
+            :where        => :instance1,
             :execute      => 'match',
             :css          => 'body',
-            :value        => message,
+            :value        => message + ' #3',
             :match_result => false,
           },
+          {
+            :where        => :instance2,
+            :execute      => 'match',
+            :css          => 'body',
+            :value        => message + ' #3',
+            :match_result => true,
+          },
+          {
+            :where        => :instance2,
+            :execute      => 'match',
+            :css          => 'body',
+            :value        => 'Reload application',
+            :match_result => true,
+          },
         ],
       },
     ]

+ 11 - 1
test/browser_test_helper.rb

@@ -248,7 +248,17 @@ class TestCase < Test::Unit::TestCase
     else
       assert( false, "(#{test[:name]}) unknow selector for '#{action[:element]}'" )
     end
-    if action[:execute] == 'set'
+    if action[:execute] == 'setCheck'
+      checked = element.attribute('checked')
+      if !checked
+        element.click
+      end
+    elsif action[:execute] == 'setUncheck'
+      checked = element.attribute('checked')
+      if checked
+        element.click
+      end
+    elsif action[:execute] == 'set'
       element.clear
       if action[:value] == '###stack###'
         element.send_keys( @stack )