summaryrefslogtreecommitdiffstats
path: root/server/sonar-web/tests/components/issue-test.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-web/tests/components/issue-test.js')
-rw-r--r--server/sonar-web/tests/components/issue-test.js173
1 files changed, 173 insertions, 0 deletions
diff --git a/server/sonar-web/tests/components/issue-test.js b/server/sonar-web/tests/components/issue-test.js
new file mode 100644
index 00000000000..34b0312b0fc
--- /dev/null
+++ b/server/sonar-web/tests/components/issue-test.js
@@ -0,0 +1,173 @@
+import Issue from '../../src/main/js/components/issue/models/issue';
+
+let sinon = require('sinon'),
+ sinonChai = require('sinon-chai'),
+ chai = require('chai'),
+ expect = chai.expect;
+
+chai.use(sinonChai);
+
+describe('Issue', function () {
+ describe('Model', function () {
+ it('should have correct urlRoot', function () {
+ var issue = new Issue();
+ expect(issue.urlRoot()).to.equal('/api/issues');
+ });
+
+ it('should parse response without root issue object', function () {
+ var issue = new Issue();
+ var example = { a: 1 };
+ expect(issue.parse(example)).to.deep.equal(example);
+ });
+
+ it('should parse response with the root issue object', function () {
+ var issue = new Issue();
+ var example = { a: 1 };
+ expect(issue.parse({ issue: example })).to.deep.equal(example);
+ });
+
+ it('should reset attributes (no attributes initially)', function () {
+ var issue = new Issue();
+ var example = { a: 1 };
+ issue.reset(example);
+ expect(issue.toJSON()).to.deep.equal(example);
+ });
+
+ it('should reset attributes (override attribute)', function () {
+ var issue = new Issue({ a: 2 });
+ var example = { a: 1 };
+ issue.reset(example);
+ expect(issue.toJSON()).to.deep.equal(example);
+ });
+
+ it('should reset attributes (different attributes)', function () {
+ var issue = new Issue({ a: 2 });
+ var example = { b: 1 };
+ issue.reset(example);
+ expect(issue.toJSON()).to.deep.equal(example);
+ });
+
+ it('should unset `textRange` of a closed issue', function () {
+ var issue = new Issue();
+ var result = issue.parse({ issue: { status: 'CLOSED', textRange: { startLine: 5 } } });
+ expect(result.textRange).to.not.be.ok;
+ });
+
+ it('should unset `flows` of a closed issue', function () {
+ var issue = new Issue();
+ var result = issue.parse({ issue: { status: 'CLOSED', flows: [1, 2, 3] } });
+ expect(result.flows).to.deep.equal([]);
+ });
+
+ describe('Actions', function () {
+ it('should assign', function () {
+ var issue = new Issue({ key: 'issue-key' });
+ var spy = sinon.spy();
+ issue._action = spy;
+ issue.assign('admin');
+ expect(spy).to.have.been.calledWith({
+ data: { assignee: 'admin', issue: 'issue-key' },
+ url: '/api/issues/assign'
+ });
+ });
+
+ it('should unassign', function () {
+ var issue = new Issue({ key: 'issue-key' });
+ var spy = sinon.spy();
+ issue._action = spy;
+ issue.assign();
+ expect(spy).to.have.been.calledWith({
+ data: { assignee: undefined, issue: 'issue-key' },
+ url: '/api/issues/assign'
+ });
+ });
+
+ it('should plan', function () {
+ var issue = new Issue({ key: 'issue-key' });
+ var spy = sinon.spy();
+ issue._action = spy;
+ issue.plan('plan');
+ expect(spy).to.have.been.calledWith({ data: { plan: 'plan', issue: 'issue-key' }, url: '/api/issues/plan' });
+ });
+
+ it('should unplan', function () {
+ var issue = new Issue({ key: 'issue-key' });
+ var spy = sinon.spy();
+ issue._action = spy;
+ issue.plan();
+ expect(spy).to.have.been.calledWith({ data: { plan: undefined, issue: 'issue-key' }, url: '/api/issues/plan' });
+ });
+
+ it('should set severity', function () {
+ var issue = new Issue({ key: 'issue-key' });
+ var spy = sinon.spy();
+ issue._action = spy;
+ issue.setSeverity('BLOCKER');
+ expect(spy).to.have.been.calledWith({
+ data: { severity: 'BLOCKER', issue: 'issue-key' },
+ url: '/api/issues/set_severity'
+ });
+ });
+ });
+
+ describe('#getLinearLocations', function () {
+ it('should return single line location', function () {
+ var issue = new Issue({ textRange: { startLine: 1, endLine: 1, startOffset: 0, endOffset: 10 } }),
+ locations = issue.getLinearLocations();
+ expect(locations.length).to.equal(1);
+
+ expect(locations[0].line).to.equal(1);
+ expect(locations[0].from).to.equal(0);
+ expect(locations[0].to).to.equal(10);
+ });
+
+ it('should return location not from 0', function () {
+ var issue = new Issue({ textRange: { startLine: 1, endLine: 1, startOffset: 5, endOffset: 10 } }),
+ locations = issue.getLinearLocations();
+ expect(locations.length).to.equal(1);
+
+ expect(locations[0].line).to.equal(1);
+ expect(locations[0].from).to.equal(5);
+ expect(locations[0].to).to.equal(10);
+ });
+
+ it('should return 2-lines location', function () {
+ var issue = new Issue({ textRange: { startLine: 2, endLine: 3, startOffset: 5, endOffset: 10 } }),
+ locations = issue.getLinearLocations();
+ expect(locations.length).to.equal(2);
+
+ expect(locations[0].line).to.equal(2);
+ expect(locations[0].from).to.equal(5);
+ expect(locations[0].to).to.equal(999999);
+
+ expect(locations[1].line).to.equal(3);
+ expect(locations[1].from).to.equal(0);
+ expect(locations[1].to).to.equal(10);
+ });
+
+ it('should return 3-lines location', function () {
+ var issue = new Issue({ textRange: { startLine: 4, endLine: 6, startOffset: 5, endOffset: 10 } }),
+ locations = issue.getLinearLocations();
+ expect(locations.length).to.equal(3);
+
+ expect(locations[0].line).to.equal(4);
+ expect(locations[0].from).to.equal(5);
+ expect(locations[0].to).to.equal(999999);
+
+ expect(locations[1].line).to.equal(5);
+ expect(locations[1].from).to.equal(0);
+ expect(locations[1].to).to.equal(999999);
+
+ expect(locations[2].line).to.equal(6);
+ expect(locations[2].from).to.equal(0);
+ expect(locations[2].to).to.equal(10);
+ });
+
+ it('should return [] when no location', function () {
+ var issue = new Issue(),
+ locations = issue.getLinearLocations();
+ expect(locations.length).to.equal(0);
+ });
+ });
+ });
+});