TestFlow.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. "use strict";
  2. /**
  3.  * Licensed Materials - Property of IBM
  4.  * IBM Cognos Products: Cognos Analytics
  5.  * Copyright IBM Corp. 2015, 2016
  6.  * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7.  */
  8. define(['jquery', 'doT', 'underscore', 'bi/admin/common/ui/WidgetView', 'bi/commons/utils/Utils', 'bi/admin/nls/StringResource', 'text!bi/admin/common/ui/testflow/templates/TestFlowTemplate.html'], function ($, dot, _, WidgetView, Utils, StringResource, template) {
  9. 'use strict'; //NOSONAR: meant to be strict
  10. var TestFlowStates = {
  11. 'INIT': 'init',
  12. 'TESTING': 'testing',
  13. 'CANCELED': 'canceled',
  14. 'FAILED': 'failed',
  15. 'SUCCESS': 'success'
  16. };
  17. var TestFlow = WidgetView.extend({
  18. widgetName: 'testflow',
  19. state: TestFlowStates.INIT,
  20. times: 0,
  21. init: function init(options) {
  22. TestFlow.inherited('init', this, arguments);
  23. var query = '[data-bi-testflow]';
  24. if (this.element.is(query)) {
  25. this._create();
  26. this._initEvents();
  27. this._updateUIState(true);
  28. }
  29. },
  30. _create: function _create() {
  31. var tempInfo = {
  32. strings: {
  33. test: StringResource.get('test'),
  34. testing: StringResource.get('testing'),
  35. cancel: StringResource.get('cancel'),
  36. canceled: StringResource.get('canceled'),
  37. failed: StringResource.get('testingFailed'),
  38. success: StringResource.get('success'),
  39. retry: StringResource.get('retry')
  40. }
  41. };
  42. var sHtml = dot.template(template)(tempInfo);
  43. this.$el.append(sHtml);
  44. var $workingIndicator = $(Utils.getLoadingAnimation(1));
  45. $workingIndicator.addClass('loginWorking');
  46. this.$el.find('#indicator').append($workingIndicator[0]);
  47. },
  48. _updateTimes: function _updateTimes() {
  49. if (this.state === TestFlowStates.TESTING) {
  50. this.$el.find('#times').text("(" + this.times++ + ")");
  51. window.setTimeout(function () {
  52. this._updateTimes();
  53. }.bind(this), 1000);
  54. } else {
  55. this.times = 0;
  56. }
  57. },
  58. _initEvents: function _initEvents() {
  59. this.$el.find('#test').on('primaryaction', function () {
  60. this.trigger('startTest');
  61. }.bind(this));
  62. this.$el.find('#cancel').on('primaryaction', function () {
  63. this.trigger('cancel');
  64. }.bind(this));
  65. this.$el.find('#retry').on('primaryaction', function () {
  66. this.trigger('startTest');
  67. }.bind(this));
  68. this.$el.find('#more').on('primaryaction', function (e) {
  69. this._toggleDetail($(e.target));
  70. }.bind(this));
  71. },
  72. _toggleDetail: function _toggleDetail() {
  73. var hasShow = this.$el.hasClass('showdetail');
  74. var hasHide = this.$el.hasClass('hidedetail');
  75. if (!hasShow && !hasHide) {
  76. this.$el.addClass('showdetail');
  77. } else {
  78. if (hasShow) {
  79. this.$el.removeClass('showdetail');
  80. this.$el.addClass('hidedetail');
  81. } else {
  82. if (hasHide) {
  83. this.$el.removeClass('hidedetail');
  84. this.$el.addClass('showdetail');
  85. }
  86. }
  87. }
  88. },
  89. _renderMessages: function _renderMessages(messages) {
  90. var $primText = this.$el.find('#primaryText');
  91. $primText.text('');
  92. var $detail = this.$el.find('#detail');
  93. $detail.empty();
  94. this.$el.addClass('nodetail');
  95. if (_.isArray(messages) && !_.isEmpty(messages)) {
  96. var pt = _.first(messages) || StringResource.get('unknown');
  97. $primText.text(pt);
  98. var detail = _.rest(messages, 1);
  99. var sHtml = "";
  100. _.each(detail, function (msg) {
  101. sHtml = sHtml + "<div class='msg'>" + _.escape(msg) + "</div>";
  102. });
  103. $detail.append(sHtml);
  104. if (sHtml) {
  105. this.$el.removeClass('nodetail');
  106. }
  107. } else {
  108. $primText.text(StringResource.get('unknown'));
  109. }
  110. },
  111. start: function start() {
  112. this.state = TestFlowStates.TESTING;
  113. this._updateUIState(true);
  114. this._updateTimes();
  115. },
  116. cancel: function cancel() {
  117. this.state = TestFlowStates.CANCELED;
  118. this._updateUIState(true);
  119. },
  120. failed: function failed(messages) {
  121. this._renderMessages(messages);
  122. this.state = TestFlowStates.FAILED;
  123. this._updateUIState(false);
  124. },
  125. success: function success(messages) {
  126. this._renderMessages(messages);
  127. this.state = TestFlowStates.SUCCESS;
  128. this._updateUIState(true);
  129. },
  130. _updateUIState: function _updateUIState(hideDetail) {
  131. if (hideDetail) {
  132. this.$el.removeClass('showdetail hidedetail');
  133. }
  134. this.$el.find('td').hide();
  135. switch (this.state) {
  136. case TestFlowStates.INIT:
  137. this.$el.find('.bi-admin-testflow-test').show();
  138. break;
  139. case TestFlowStates.TESTING:
  140. this.$el.find('.bi-admin-testflow-testing').show();
  141. this.$el.find('.bi-admin-testflow-cancel').show();
  142. break;
  143. case TestFlowStates.CANCELED:
  144. this.$el.find('.bi-admin-testflow-canceled').show();
  145. this.$el.find('.bi-admin-testflow-retry').show();
  146. break;
  147. case TestFlowStates.FAILED:
  148. this.$el.find('.bi-admin-testflow-failed').show();
  149. this.$el.find('.bi-admin-testflow-retry').show();
  150. break;
  151. case TestFlowStates.SUCCESS:
  152. this.$el.find('.bi-admin-testflow-success').show();
  153. this.$el.find('.bi-admin-testflow-success #more').hide();
  154. this.$el.find('.bi-admin-testflow-test').show();
  155. break;
  156. }
  157. }
  158. });
  159. return TestFlow;
  160. });