version_view_test.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. var App = require('app');
  19. require('views/main/admin/stack_upgrade/upgrade_wizard_view');
  20. describe('App.mainAdminStackVersionsView', function () {
  21. var view = App.MainAdminStackVersionsView.create({
  22. controller: {
  23. currentVersion: {
  24. repository_version: "2.2.1.0",
  25. runningCheckRequests: []
  26. },
  27. load: Em.K
  28. }
  29. });
  30. describe("#filterBy()", function () {
  31. var versions = [
  32. Em.Object.create({
  33. status: "INIT",
  34. repositoryVersion: "2.2.1.1"
  35. }),
  36. Em.Object.create({
  37. status: "INSTALLING",
  38. repositoryVersion: "2.2.1.1"
  39. }),
  40. Em.Object.create({
  41. status: "INSTALLED",
  42. repositoryVersion: "2.2.0.1"
  43. }),
  44. Em.Object.create({
  45. status: "INSTALLED",
  46. repositoryVersion: "2.2.2.1"
  47. }),
  48. Em.Object.create({
  49. status: "INSTALL_FAILED",
  50. repositoryVersion: "2.2.1.1"
  51. }),
  52. Em.Object.create({
  53. status: "OUT_OF_SYNC",
  54. repositoryVersion: "2.2.1.1"
  55. }),
  56. Em.Object.create({
  57. status: "UPGRADING",
  58. repositoryVersion: "2.2.1.1"
  59. }),
  60. Em.Object.create({
  61. status: "UPGRADED",
  62. repositoryVersion: "2.2.1.1"
  63. }),
  64. Em.Object.create({
  65. status: "CURRENT",
  66. repositoryVersion: "2.2.1.1"
  67. })
  68. ],
  69. testCases = [
  70. {
  71. filter: Em.Object.create({
  72. value: ''
  73. }),
  74. filteredVersions: [
  75. Em.Object.create({
  76. status: "INIT",
  77. repositoryVersion: "2.2.1.1"
  78. }),
  79. Em.Object.create({
  80. status: "INSTALLING",
  81. repositoryVersion: "2.2.1.1"
  82. }),
  83. Em.Object.create({
  84. status: "INSTALLED",
  85. repositoryVersion: "2.2.2.1"
  86. }),
  87. Em.Object.create({
  88. status: "INSTALL_FAILED",
  89. repositoryVersion: "2.2.1.1"
  90. }),
  91. Em.Object.create({
  92. status: "OUT_OF_SYNC",
  93. repositoryVersion: "2.2.1.1"
  94. }),
  95. Em.Object.create({
  96. status: "UPGRADING",
  97. repositoryVersion: "2.2.1.1"
  98. }),
  99. Em.Object.create({
  100. status: "UPGRADED",
  101. repositoryVersion: "2.2.1.1"
  102. }),
  103. Em.Object.create({
  104. status: "CURRENT",
  105. repositoryVersion: "2.2.1.1"
  106. })
  107. ]
  108. },
  109. {
  110. filter: Em.Object.create({
  111. value: 'NOT_INSTALLED'
  112. }),
  113. filteredVersions: [
  114. Em.Object.create({
  115. status: "INIT",
  116. repositoryVersion: "2.2.1.1"
  117. }),
  118. Em.Object.create({
  119. status: "INSTALLING",
  120. repositoryVersion: "2.2.1.1"
  121. }),
  122. Em.Object.create({
  123. status: "INSTALL_FAILED",
  124. repositoryVersion: "2.2.1.1"
  125. }),
  126. Em.Object.create({
  127. status: "OUT_OF_SYNC",
  128. repositoryVersion: "2.2.1.1"
  129. })
  130. ]
  131. },
  132. {
  133. filter: Em.Object.create({
  134. value: 'INSTALLED'
  135. }),
  136. filteredVersions: [
  137. ]
  138. },
  139. {
  140. filter: Em.Object.create({
  141. value: 'UPGRADE_READY'
  142. }),
  143. filteredVersions: [
  144. Em.Object.create({
  145. status: "INSTALLED",
  146. repositoryVersion: "2.2.2.1"
  147. })
  148. ]
  149. },
  150. {
  151. filter: Em.Object.create({
  152. value: 'CURRENT'
  153. }),
  154. filteredVersions: [
  155. Em.Object.create({
  156. status: "CURRENT",
  157. repositoryVersion: "2.2.1.1"
  158. })
  159. ]
  160. },
  161. {
  162. filter: Em.Object.create({
  163. value: 'UPGRADING'
  164. }),
  165. filteredVersions: [
  166. Em.Object.create({
  167. status: "UPGRADING",
  168. repositoryVersion: "2.2.1.1"
  169. })
  170. ]
  171. },
  172. {
  173. filter: Em.Object.create({
  174. value: 'UPGRADED'
  175. }),
  176. filteredVersions: [
  177. Em.Object.create({
  178. status: "UPGRADED",
  179. repositoryVersion: "2.2.1.1"
  180. })
  181. ]
  182. },
  183. {
  184. noCurrentVersion: true,
  185. filter: Em.Object.create({
  186. value: ''
  187. }),
  188. filteredVersions: versions,
  189. message: 'no current version'
  190. },
  191. {
  192. displayOlderVersions: true,
  193. filter: Em.Object.create({
  194. value: ''
  195. }),
  196. filteredVersions: versions,
  197. message: 'display older versions'
  198. }
  199. ];
  200. afterEach(function () {
  201. App.get.restore();
  202. });
  203. testCases.forEach(function(t) {
  204. var msg = t.filter.get('value') ? t.filter.get('value') : "All";
  205. it(t.message || "filter By " + msg, function () {
  206. sinon.stub(App, 'get', function (key) {
  207. return key == 'supports.displayOlderVersions' ? Boolean(t.displayOlderVersions) : Em.get(App, key);
  208. });
  209. view.set('controller.currentVersion', t.noCurrentVersion ? null : {repository_version: '2.2.1.1'});
  210. expect(view.filterBy(versions, t.filter)).to.eql(t.filteredVersions);
  211. });
  212. });
  213. });
  214. describe("#didInsertElement()", function() {
  215. before(function () {
  216. sinon.stub(view, 'observesCategories', Em.K);
  217. });
  218. after(function () {
  219. view.observesCategories.restore();
  220. });
  221. it("", function() {
  222. view.didInsertElement();
  223. expect(view.observesCategories.calledOnce).to.be.true;
  224. });
  225. });
  226. describe("#observesCategories()", function () {
  227. var mock = {format: Em.K};
  228. before(function () {
  229. sinon.stub(Em.I18n, 't').returns(mock);
  230. sinon.stub(mock, 'format').returns('label');
  231. sinon.stub(view, 'filterBy').returns([]);
  232. sinon.stub(view, 'filterVersions');
  233. });
  234. after(function () {
  235. Em.I18n.t.restore();
  236. mock.format.restore();
  237. view.filterBy.restore();
  238. view.filterVersions.restore();
  239. });
  240. it("", function () {
  241. view.set('categories', [
  242. Em.Object.create({
  243. labelKey: 'labelKey',
  244. value: 'value',
  245. isSelected: false
  246. })
  247. ]);
  248. view.observesCategories();
  249. expect(view.get('categories')[0].get('label')).to.equal('label');
  250. expect(view.filterVersions.calledOnce).to.be.true;
  251. });
  252. });
  253. describe("#selectCategory()", function() {
  254. before(function () {
  255. sinon.stub(view, 'filterVersions');
  256. });
  257. after(function () {
  258. view.filterVersions.restore();
  259. });
  260. it("", function() {
  261. var event = {
  262. context: Em.Object.create({
  263. isSelected: false
  264. })
  265. };
  266. view.set('categories', [
  267. Em.Object.create({
  268. isSelected: true
  269. }),
  270. event.context
  271. ]);
  272. view.selectCategory(event);
  273. expect(view.get('categories')[0].get('isSelected')).to.be.false;
  274. expect(event.context.get('isSelected')).to.be.true;
  275. expect(view.filterVersions.calledWith(event.context)).to.be.true;
  276. });
  277. });
  278. describe("#filterVersions()", function() {
  279. before(function () {
  280. sinon.stub(view, 'filterBy').returns([{id: 1}]);
  281. sinon.stub(view, 'observesCategories', Em.K);
  282. });
  283. after(function () {
  284. view.filterBy.restore();
  285. view.observesCategories.restore();
  286. });
  287. it("", function() {
  288. view.set('repoVersions', [Em.Object.create({id: 1})]);
  289. view.filterVersions();
  290. expect(view.get('repoVersions')[0].get('isVisible')).to.be.true;
  291. });
  292. });
  293. describe("#goToVersions()", function() {
  294. before(function () {
  295. sinon.spy(App, 'showConfirmationPopup');
  296. sinon.stub(window.location, 'replace', Em.K);
  297. var data = {
  298. components: [{
  299. 'RootServiceComponents': {
  300. 'component_version': '1.9.0'
  301. }
  302. }, {
  303. 'RootServiceComponents': {
  304. 'component_version': '2.1.0'
  305. }
  306. }, {
  307. 'RootServiceComponents': {
  308. 'component_version': '2.0.0'
  309. }
  310. }]
  311. };
  312. sinon.stub(App.ajax, 'send').returns({
  313. then: function(callback) {
  314. callback(data);
  315. }
  316. });
  317. });
  318. after(function () {
  319. App.showConfirmationPopup.restore();
  320. window.location.replace.restore();
  321. App.ajax.send.restore();
  322. });
  323. it("should go to link using the version retrieved by query", function() {
  324. var popup = view.goToVersions();
  325. expect(App.showConfirmationPopup.calledOnce).to.be.true;
  326. popup.onPrimary();
  327. expect(App.ajax.send.calledOnce).to.be.true;
  328. expect(window.location.replace.calledWith('/views/ADMIN_VIEW/2.1.0/INSTANCE/#/stackVersions')).to.be.true;
  329. });
  330. });
  331. describe("#willInsertElement()", function() {
  332. before(function () {
  333. sinon.stub(view, 'poll', Em.K);
  334. });
  335. after(function () {
  336. view.poll.restore();
  337. });
  338. it("", function() {
  339. view.willInsertElement();
  340. expect(view.poll.calledOnce).to.be.true;
  341. });
  342. });
  343. describe("#willDestroyElement()", function() {
  344. var abort = sinon.spy(),
  345. request = {
  346. abort: abort
  347. };
  348. before(function () {
  349. sinon.stub(window, 'clearTimeout', Em.K);
  350. view.set('controller.runningCheckRequests', [request, request]);
  351. });
  352. after(function () {
  353. window.clearTimeout.restore();
  354. });
  355. it("", function() {
  356. view.willDestroyElement();
  357. expect(window.clearTimeout.calledOnce).to.be.true;
  358. expect(abort.calledTwice).to.be.true;
  359. expect(view.get('controller.runningCheckRequests')).to.have.length(0);
  360. });
  361. });
  362. describe("#doPolling()", function() {
  363. before(function () {
  364. sinon.stub(window, 'setTimeout', Em.K);
  365. });
  366. after(function () {
  367. window.setTimeout.restore();
  368. });
  369. it("", function() {
  370. view.doPolling();
  371. expect(window.setTimeout.calledOnce).to.be.true;
  372. });
  373. });
  374. describe("#poll()", function() {
  375. beforeEach(function () {
  376. this.mock = sinon.stub(App.router, 'get');
  377. sinon.stub(view.get('controller'), 'load').returns({done: Em.K});
  378. });
  379. afterEach(function () {
  380. this.mock.restore();
  381. view.get('controller').load.restore();
  382. });
  383. it("update is working", function() {
  384. this.mock.returns(Em.Object.create({isWorking: true}));
  385. view.poll();
  386. expect(view.get('controller').load.calledOnce).to.be.true;
  387. });
  388. it("update is not working", function() {
  389. this.mock.returns(Em.Object.create({isWorking: false}));
  390. view.poll();
  391. expect(view.get('controller').load.called).to.be.false;
  392. });
  393. });
  394. });