PageRenderTime 38ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/jira-project/jira-components/jira-webapp/src/main/webapp/includes/jira/admin/application/app-role-defaults-tests.js

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
JavaScript | 290 lines | 235 code | 55 blank | 0 comment | 5 complexity | 7e1b1ab9c29b324b41cfb319126a24b4 MD5 | raw file
Possible License(s): Apache-2.0
  1. AJS.test.require(["jira.webresources:application-roles"], function () {
  2. require(["underscore", "backbone", "jquery"], function (_, Backbone, $) {
  3. module('CompositeView Tests', {
  4. setup: function () {
  5. this.context = AJS.test.mockableModuleContext();
  6. }
  7. });
  8. test("CompositeView.commit resolves after save", function () {
  9. var ApplicationListView = this.context.require("jira/admin/application/defaults/ApplicationListView");
  10. var collection = mockCollection([{key: "role1"}, {key: "role2"}]);
  11. var compositeView = new ApplicationListView({collection: collection});
  12. compositeView.render();
  13. compositeView.commit().then(function () {
  14. ok("Commit resolved after save");
  15. });
  16. });
  17. test("CompositeView.commit resolves empty list", function () {
  18. var ApplicationListView = this.context.require("jira/admin/application/defaults/ApplicationListView");
  19. var emptyCollection = mockCollection([]);
  20. var compositeView = new ApplicationListView({collection: emptyCollection});
  21. compositeView.render();
  22. compositeView.commit().then(function () {
  23. ok("Commit resolved after empty collection");
  24. });
  25. });
  26. test("CompositeView.commit fails after unsuccessful save", function () {
  27. var ApplicationListView = this.context.require("jira/admin/application/defaults/ApplicationListView");
  28. var collection = mockCollection([{key: "role1"}, {key: "role2"}]);
  29. collection._faulty = true;
  30. var compositeView = new ApplicationListView({collection: collection});
  31. compositeView.render();
  32. compositeView.commit().fail(function() {
  33. ok("Commit rejected after failed save");
  34. });
  35. });
  36. function mockCollection(data) {
  37. var MockCollection = Backbone.Collection.extend({
  38. _faulty: false,
  39. model: Backbone.Model.extend({
  40. defaults: {
  41. name: null,
  42. groups: null,
  43. defaultGroups: null,
  44. selectedByDefault: false,
  45. _faulty: false
  46. },
  47. idAttribute: "key",
  48. update: function () {
  49. if(this.get("_faulty")) {
  50. return new $.Deferred().reject(this.toJSON());
  51. } else {
  52. return new $.Deferred().resolve(this.toJSON());
  53. }
  54. }
  55. }),
  56. updateDefaults: function() {
  57. if(this._faulty) {
  58. return new $.Deferred().reject(this.toJSON());
  59. } else {
  60. return new $.Deferred().resolve(this.toJSON());
  61. }
  62. }
  63. });
  64. return new MockCollection(data);
  65. }
  66. });
  67. });
  68. AJS.test.require(["jira.webresources:application-roles"], function () {
  69. require(["underscore", "backbone", "jquery", "jira/admin/application/defaults/DialogView"], function (_, Backbone, $, DialogView) {
  70. module('DialogView Tests', {
  71. setup: function () {
  72. this.context = AJS.test.mockableModuleContext();
  73. this.applicationCollection = mockCollection([
  74. {key: "roleOne"},
  75. {key: "roleTwo"},
  76. {key: "roleThree", defaultGroups: ["defaultGroup"]}]);
  77. this.createDialogViewAndRenderIt = function(applicationCollection, webPanels) {
  78. var dialogView = new DialogView({
  79. collection: applicationCollection,
  80. webPanels: webPanels || ""
  81. });
  82. dialogView.warnings.show = sinon.spy();
  83. dialogView.render();
  84. return dialogView;
  85. };
  86. },
  87. teardown: function () {
  88. }
  89. });
  90. test("Resolved commit should not display", function() {
  91. var CompositeView = mockCompositeView.call(this, new $.Deferred().resolve().promise());
  92. var collection = mockCollection([]);
  93. var dialogView = new DialogView({
  94. collection: collection
  95. });
  96. dialogView.render();
  97. dialogView.showContents(new CompositeView({ collection: this.applicationCollection }));
  98. dialogView.formSubmit().done(function() {
  99. ok("Form submit succeeded");
  100. strictEqual(dialogView.errors, undefined, "Errors are not visible");
  101. });
  102. });
  103. test("Failed commit should display error", function() {
  104. var CompositeView = mockCompositeView.call(this, new $.Deferred().reject().promise(), []);
  105. var collection = mockCollection([]);
  106. var dialogView = new DialogView({
  107. collection: collection
  108. });
  109. dialogView.render();
  110. dialogView.showContents(new CompositeView({ collection: this.applicationCollection }));
  111. equal(dialogView.errors.$el, null, "Error region not present");
  112. dialogView.formSubmit().fail(function() {
  113. ok("Form submit failed");
  114. equal(dialogView.errors.$el.is(':not(:empty)'), true, "Errors are visible");
  115. });
  116. });
  117. test("Warning should open when one application doesn't have a default group", function() {
  118. var CompositeView = mockCompositeView.call(this);
  119. this.applicationCollection.get("roleOne").set("selectedByDefault", true);
  120. var dialogView = this.createDialogViewAndRenderIt(this.applicationCollection);
  121. dialogView.showContents(new CompositeView({ collection: this.applicationCollection }));
  122. ok(dialogView.warnings.show.calledOnce);
  123. });
  124. test("Warning should open when both applications don't have a default group", function() {
  125. var CompositeView = mockCompositeView.call(this);
  126. this.applicationCollection.get("roleOne").set("selectedByDefault", true);
  127. this.applicationCollection.get("roleTwo").set("selectedByDefault", true);
  128. var dialogView = this.createDialogViewAndRenderIt(this.applicationCollection);
  129. dialogView.showContents(new CompositeView({ collection: this.applicationCollection }));
  130. ok(dialogView.warnings.show.calledOnce);
  131. });
  132. test("Warning should open when at least one application doesn't have a default group", function() {
  133. var CompositeView = mockCompositeView.call(this, null, ["roleOne", "roleTwo", "roleThree"]);
  134. this.applicationCollection.get("roleOne").set("selectedByDefault", true);
  135. this.applicationCollection.get("roleTwo").set("selectedByDefault", true);
  136. this.applicationCollection.get("roleThree").set("selectedByDefault", true);
  137. var dialogView = this.createDialogViewAndRenderIt(this.applicationCollection);
  138. dialogView.showContents(new CompositeView({ collection: this.applicationCollection }));
  139. ok(dialogView.warnings.show.calledOnce);
  140. });
  141. test("Warning shouldn't open when all selected applications have a default group", function() {
  142. var CompositeView = mockCompositeView.call(this);
  143. this.applicationCollection.get("roleThree").set("selectedByDefault", true);
  144. var dialogView = this.createDialogViewAndRenderIt(this.applicationCollection);
  145. dialogView.showContents(new CompositeView({ collection: this.applicationCollection }));
  146. ok(!dialogView.warnings.show.called);
  147. });
  148. test("Dialog should render passed webPanels on showContents", function () {
  149. var CompositeView = mockCompositeView.call(this);
  150. var dialogView = this.createDialogViewAndRenderIt(this.applicationCollection, "fusion <b>awesome</b> content");
  151. dialogView.showContents(new CompositeView({collection: this.applicationCollection}));
  152. $("#qunit-fixture").append(dialogView.$el);
  153. equal($(".app-role-defaults-web-panels").html(), "fusion <b>awesome</b> content");
  154. });
  155. test("Dialog should trigger showContents event on showContents", function () {
  156. var CompositeView = mockCompositeView.call(this);
  157. var dialogView = this.createDialogViewAndRenderIt(this.applicationCollection);
  158. dialogView.dialog = {showContents: sinon.spy()};
  159. var executeOnDialogShow = sinon.spy();
  160. dialogView.on("showContents", executeOnDialogShow);
  161. dialogView.showContents(new CompositeView({collection: this.applicationCollection}));
  162. ok(executeOnDialogShow.called);
  163. });
  164. function mockCompositeView(commitResult) {
  165. var ApplicationListView = this.context.require("jira/admin/application/defaults/ApplicationListView");
  166. return ApplicationListView.extend({
  167. commit: function () {
  168. return commitResult;
  169. }
  170. });
  171. }
  172. function mockCollection(data) {
  173. var MockCollection = Backbone.Collection.extend({
  174. model: Backbone.Model.extend({
  175. defaults: {
  176. name: null,
  177. groups: null,
  178. defaultGroups: null,
  179. selectedByDefault: false
  180. },
  181. idAttribute: "key"
  182. })
  183. });
  184. return new MockCollection(data);
  185. }
  186. });
  187. });
  188. AJS.test.require(["jira.webresources:application-roles"], function () {
  189. require(["underscore", "backbone", "jquery"], function (_, Backbone, $) {
  190. module('Defaults init tests asdasd', {
  191. setup: function () {
  192. this.context = AJS.test.mockableModuleContext();
  193. this.dialogTrigger = $("<a href='#' class='app-role-defaults-show-button'>Dialog trigger</a>");
  194. $("#qunit-fixture").append(this.dialogTrigger);
  195. },
  196. teardown: function () {
  197. },
  198. initDialog: function initDialog() {
  199. var dialogContext = {};
  200. this.context.mock("jira/admin/application/defaults/DialogView", Backbone.View.extend({
  201. initialize: function () {
  202. dialogContext.currentDialog = this;
  203. },
  204. show: function () {},
  205. disable: function () {}
  206. }));
  207. var defaults = this.context.require("jira/admin/application/defaults");
  208. dialogContext.defaults = new defaults({
  209. whenFetched: function () {
  210. return new $.Deferred().promise();
  211. }
  212. });
  213. return dialogContext;
  214. }
  215. });
  216. test("Init should use provided webpanels to init pluginpoint", function () {
  217. var claimStub = sinon.stub(WRM.data, "claim");
  218. claimStub.withArgs("com.atlassian.jira.web.action.admin.application-access:defapp-selector-webpanels").returns("web-panels-content");
  219. var dialogContext = this.initDialog();
  220. this.dialogTrigger.click();
  221. equal(dialogContext.currentDialog.options.webPanels, "web-panels-content");
  222. claimStub.restore();
  223. });
  224. test("Should emit API event on dialog show event", function () {
  225. var defaultsApi = require("jira/admin/application/defaults/api");
  226. this.context.mock("jira/admin/application/defaults/api", defaultsApi);
  227. var dialogContext = this.initDialog();
  228. var executeOnDialogShow = sinon.spy();
  229. defaultsApi.on(defaultsApi.EVENT_ON_SHOW, executeOnDialogShow);
  230. this.dialogTrigger.click();
  231. dialogContext.currentDialog.trigger("showContents");
  232. ok(executeOnDialogShow.called);
  233. });
  234. });
  235. });