aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStas Vilchik <vilchiks@gmail.com>2015-03-23 10:37:10 +0100
committerStas Vilchik <vilchiks@gmail.com>2015-03-23 10:37:10 +0100
commit6c220cf23587774804fea19b2d8d108b8120f163 (patch)
tree471357f3988eece3ef9a608e941e1119a2f83825
parentd871fdd2dda38b9768367c3ab6ba71fba3ccb10b (diff)
downloadsonarqube-6c220cf23587774804fea19b2d8d108b8120f163.tar.gz
sonarqube-6c220cf23587774804fea19b2d8d108b8120f163.zip
fix reactivation of a custom rule
-rw-r--r--server/sonar-web/src/main/hbs/coding-rules/rule/coding-rules-custom-rule-creation.hbs5
-rw-r--r--server/sonar-web/src/main/js/coding-rules/rule/custom-rule-creation-view.js7
-rw-r--r--server/sonar-web/src/main/js/common/modal-form.js1
-rw-r--r--server/sonar-web/src/test/js/coding-rules-page-should-create-custom-rules.js83
-rw-r--r--server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/create.json34
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"
+ }
+ ]
+ }
+}