diff options
author | Stas Vilchik <vilchiks@gmail.com> | 2015-03-23 10:37:10 +0100 |
---|---|---|
committer | Stas Vilchik <vilchiks@gmail.com> | 2015-03-23 10:37:10 +0100 |
commit | 6c220cf23587774804fea19b2d8d108b8120f163 (patch) | |
tree | 471357f3988eece3ef9a608e941e1119a2f83825 | |
parent | d871fdd2dda38b9768367c3ab6ba71fba3ccb10b (diff) | |
download | sonarqube-6c220cf23587774804fea19b2d8d108b8120f163.tar.gz sonarqube-6c220cf23587774804fea19b2d8d108b8120f163.zip |
fix reactivation of a custom rule
5 files changed, 118 insertions, 12 deletions
diff --git a/server/sonar-web/src/main/hbs/coding-rules/rule/coding-rules-custom-rule-creation.hbs b/server/sonar-web/src/main/hbs/coding-rules/rule/coding-rules-custom-rule-creation.hbs index 5f402c4fd92..660c4a57d51 100644 --- a/server/sonar-web/src/main/hbs/coding-rules/rule/coding-rules-custom-rule-creation.hbs +++ b/server/sonar-web/src/main/hbs/coding-rules/rule/coding-rules-custom-rule-creation.hbs @@ -9,8 +9,6 @@ <div class="modal-body modal-container"> <div class="js-modal-messages"></div> - <div class="alert alert-danger"></div> - <div class="alert alert-warning">{{t 'coding_rules.reactivate.help'}}</div> <table> <tr class="property"> @@ -82,6 +80,7 @@ <button id="coding-rules-custom-rule-creation-create"> {{#if change}}{{t 'save'}}{{else}}{{t 'create'}}{{/if}} </button> - <a id="coding-rules-custom-rule-creation-cancel" class="action">{{t 'cancel'}}</a> + <button id="coding-rules-custom-rule-creation-reactivate" class="hidden">{{t 'coding_rules.reactivate'}}</button> + <a id="coding-rules-custom-rule-creation-cancel">{{t 'cancel'}}</a> </div> </form> diff --git a/server/sonar-web/src/main/js/coding-rules/rule/custom-rule-creation-view.js b/server/sonar-web/src/main/js/coding-rules/rule/custom-rule-creation-view.js index e5aab7c4dae..1443c801805 100644 --- a/server/sonar-web/src/main/js/coding-rules/rule/custom-rule-creation-view.js +++ b/server/sonar-web/src/main/js/coding-rules/rule/custom-rule-creation-view.js @@ -66,8 +66,6 @@ define([ flagKey: function () { this.keyModifiedByUser = true; - // Cannot use @ui.customRuleCreationReactivate.hide() directly since it was not there at initial render - jQuery(this.ui.customRuleCreationReactivate.selector).hide(); }, onRender: function () { @@ -166,8 +164,9 @@ define([ }).fail(function (jqXHR) { if (jqXHR.status === 409) { that.existingRule = jqXHR.responseJSON.rule; - that.$('.alert-warning').removeClass('hidden'); - that.ui.modalFoot.html(Templates['coding-rules-custom-rule-reactivation']()); + that.showErrors([], [{ msg: t('coding_rules.reactivate.help') }]); + that.ui.customRuleCreationCreate.addClass('hidden'); + that.ui.customRuleCreationReactivate.removeClass('hidden'); } else { that.showErrors(jqXHR.responseJSON.errors, jqXHR.responseJSON.warnings); } diff --git a/server/sonar-web/src/main/js/common/modal-form.js b/server/sonar-web/src/main/js/common/modal-form.js index d62e69407e3..c369bdf0ef6 100644 --- a/server/sonar-web/src/main/js/common/modal-form.js +++ b/server/sonar-web/src/main/js/common/modal-form.js @@ -59,6 +59,7 @@ define(['common/modals'], function (ModalView) { container.append(html); }); } + this.ui.messagesContainer.scrollParent().scrollTop(0); } }); diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-create-custom-rules.js b/server/sonar-web/src/test/js/coding-rules-page-should-create-custom-rules.js index 1d6d4cf7fa6..0e1bd000778 100644 --- a/server/sonar-web/src/test/js/coding-rules-page-should-create-custom-rules.js +++ b/server/sonar-web/src/test/js/coding-rules-page-should-create-custom-rules.js @@ -19,14 +19,15 @@ */ /* global casper:false */ -var lib = require('../lib'); +var lib = require('../lib'), + testName = lib.testName('Coding Rules', 'Custom Rule'); lib.initMessages(); lib.changeWorkingDirectory('coding-rules-page-should-create-custom-rules'); lib.configureCasper(); -casper.test.begin('coding-rules-page-should-delete-create-rules', 2, function (test) { +casper.test.begin(testName('Create'), 2, function (test) { casper .start(lib.buildUrl('coding-rules'), function () { lib.setDefaultViewport(); @@ -66,9 +67,9 @@ casper.test.begin('coding-rules-page-should-delete-create-rules', 2, function (t .then(function () { test.assertElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 1); casper.click('.js-create-custom-rule'); - casper.evaluate(function () { - jQuery('.modal form [name="test"]').val('test'); - jQuery('.modal form [name="markdown_description"]').val('test'); + casper.evaluate(function () { + jQuery('.modal form [name="name"]').val('test').keyup(); + jQuery('.modal form [name="markdown_description"]').val('test'); }); casper.click('#coding-rules-custom-rule-creation-create'); lib.waitForElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 2, function () { @@ -84,3 +85,75 @@ casper.test.begin('coding-rules-page-should-delete-create-rules', 2, function (t test.done(); }); }); + + +casper.test.begin(testName('Reactivate'), 3, function (test) { + casper + .start(lib.buildUrl('coding-rules'), function () { + lib.setDefaultViewport(); + + + lib.mockRequestFromFile('/api/rules/app', 'app.json'); + this.customRulesSearchMock = lib.mockRequestFromFile('/api/rules/search', 'search-custom-rules.json', + { data: { template_key: 'squid:ArchitecturalConstraint' } }); + this.searchMock = lib.mockRequestFromFile('/api/rules/search', 'search.json'); + lib.mockRequestFromFile('/api/rules/show', 'show.json'); + this.createMock = lib.mockRequestFromFile('/api/rules/create', 'create.json', { status: 409 }); + lib.mockRequest('/api/issues/search', '{}'); + }) + + .then(function () { + casper.evaluate(function () { + require(['/js/coding-rules/app.js']); + jQuery.ajaxSetup({ dataType: 'json' }); + }); + }) + + .then(function () { + casper.waitForSelector('.coding-rule.selected', function () { + casper.click('.coding-rule.selected .js-rule'); + }); + }) + + .then(function () { + casper.waitForSelector('.js-create-custom-rule'); + }) + + .then(function () { + casper.click('.js-create-custom-rule'); + casper.waitForSelector('.modal'); + }) + + .then(function () { + casper.evaluate(function () { + jQuery('.modal form [name="name"]').val('My Custom Rule').keyup(); + jQuery('.modal form [name="markdown_description"]').val('My Description'); + }); + casper.click('#coding-rules-custom-rule-creation-create'); + casper.waitForSelector('.modal .alert-warning'); + }) + + .then(function () { + test.assertVisible('.modal #coding-rules-custom-rule-creation-reactivate'); + test.assertNotVisible('.modal #coding-rules-custom-rule-creation-create'); + lib.clearRequestMock(this.createMock); + lib.clearRequestMock(this.customRulesSearchMock); + lib.clearRequestMock(this.searchMock); + lib.mockRequestFromFile('/api/rules/create', 'create.json'); + this.customRulesSearchMock = lib.mockRequestFromFile('/api/rules/search', 'search-custom-rules2.json', + { data: { template_key: 'squid:ArchitecturalConstraint' } }); + this.searchMock = lib.mockRequestFromFile('/api/rules/search', 'search.json'); + casper.click('.modal #coding-rules-custom-rule-creation-reactivate'); + lib.waitForElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 2, function () { + test.assert(true); // put dummy assert into wait statement + }); + }) + + .then(function () { + lib.sendCoverage(); + }) + + .run(function () { + test.done(); + }); +}); diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/create.json b/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/create.json new file mode 100644 index 00000000000..ef93a9be8d8 --- /dev/null +++ b/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/create.json @@ -0,0 +1,34 @@ +{ + "rule": { + "key": "squid:My_Custom_Rule", + "repo": "squid", + "name": "My Custom Rule", + "createdAt": "2015-03-23T09:30:40+0100", + "severity": "MAJOR", + "status": "READY", + "internalKey": "ArchitecturalConstraint", + "isTemplate": false, + "templateKey": "squid:ArchitecturalConstraint", + "tags": [], + "sysTags": [], + "lang": "java", + "langName": "Java", + "htmlDesc": "My Description", + "mdDesc": "My Description", + "debtOverloaded": false, + "params": [ + { + "key": "toClasses", + "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration", + "type": "STRING", + "defaultValue": "java.util.Vector" + }, + { + "key": "fromClasses", + "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*", + "type": "STRING", + "defaultValue": "java.util.Hashtable" + } + ] + } +} |