summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorwinniehell <git@winniehell.de>2016-08-27 01:06:57 +0200
committerwinniehell <git@winniehell.de>2016-10-28 14:02:17 +0200
commit8afc2873304bd7de759fe3abf63a46f1541b4dc6 (patch)
treeacfa8b15033b09065b111ece5e98c912bdd8e64f /spec
parent4370d68f034f66f8f0243d1de7f4c9c0330a3b79 (diff)
downloadgitlab-ce-8afc2873304bd7de759fe3abf63a46f1541b4dc6.tar.gz
Clean up issue_spec.js
Diffstat (limited to 'spec')
-rw-r--r--spec/javascripts/issue_spec.js161
1 files changed, 102 insertions, 59 deletions
diff --git a/spec/javascripts/issue_spec.js b/spec/javascripts/issue_spec.js
index c27fb856081..d0c44b6346d 100644
--- a/spec/javascripts/issue_spec.js
+++ b/spec/javascripts/issue_spec.js
@@ -4,6 +4,56 @@
/*= require issue */
(function() {
+ var INVALID_URL = 'http://goesnowhere.nothing/whereami';
+ var $boxClosed, $boxOpen, $btnClose, $btnReopen;
+
+ function expectErrorMessage() {
+ var $flashMessage = $('div.flash-alert');
+ expect($flashMessage).toExist();
+ expect($flashMessage).toBeVisible();
+ expect($flashMessage).toHaveText('Unable to update this issue at this time.');
+ }
+
+ function expectIssueState(isIssueOpen) {
+ expectVisibility($boxClosed, !isIssueOpen);
+ expectVisibility($boxOpen, isIssueOpen);
+
+ expectVisibility($btnClose, isIssueOpen);
+ expectVisibility($btnReopen, !isIssueOpen);
+ }
+
+ function expectPendingRequest(req, $triggeredButton) {
+ expect(req.type).toBe('PUT');
+ expect(req.url).toBe($triggeredButton.attr('href'));
+ expect($triggeredButton).toHaveProp('disabled', true);
+ }
+
+ function expectVisibility($element, shouldBeVisible) {
+ if (shouldBeVisible) {
+ expect($element).not.toHaveClass('hidden');
+ } else {
+ expect($element).toHaveClass('hidden');
+ }
+ }
+
+ function findElements() {
+ $boxClosed = $('div.status-box-closed');
+ expect($boxClosed).toExist();
+ expect($boxClosed).toHaveText('Closed');
+
+ $boxOpen = $('div.status-box-open');
+ expect($boxOpen).toExist();
+ expect($boxOpen).toHaveText('Open');
+
+ $btnClose = $('.btn-close.btn-grouped');
+ expect($btnClose).toExist();
+ expect($btnClose).toHaveText('Close issue');
+
+ $btnReopen = $('.btn-reopen.btn-grouped');
+ expect($btnReopen).toExist();
+ expect($btnReopen).toHaveText('Reopen issue');
+ }
+
describe('Issue', function() {
return describe('task lists', function() {
fixture.preload('issues_show.html');
@@ -27,93 +77,86 @@
});
});
- describe('reopen/close issue', function() {
+ describe('close issue', function() {
fixture.preload('issues_show.html');
+
beforeEach(function() {
fixture.load('issues_show.html');
- return this.issue = new Issue();
+ findElements();
+ this.issue = new Issue();
+
+ expectIssueState(true);
});
+
it('closes an issue', function() {
- var $btnClose, $btnReopen;
spyOn(jQuery, 'ajax').and.callFake(function(req) {
- expect(req.type).toBe('PUT');
- expect(req.url).toBe('http://gitlab.com/issues/6/close');
- return req.success({
+ expectPendingRequest(req, $btnClose);
+ req.success({
id: 34
});
});
- $btnClose = $('a.btn-close');
- $btnReopen = $('a.btn-reopen');
- expect($btnReopen).toBeHidden();
- expect($btnClose.text()).toBe('Close');
- expect(typeof $btnClose.prop('disabled')).toBe('undefined');
+
$btnClose.trigger('click');
- expect($btnReopen).toBeVisible();
- expect($btnClose).toBeHidden();
- expect($('div.status-box-closed')).toBeVisible();
- return expect($('div.status-box-open')).toBeHidden();
+
+ expectIssueState(false);
+ expect($btnClose).toHaveProp('disabled', false);
});
+
it('fails to close an issue with success:false', function() {
- var $btnClose, $btnReopen;
spyOn(jQuery, 'ajax').and.callFake(function(req) {
- expect(req.type).toBe('PUT');
- expect(req.url).toBe('http://goesnowhere.nothing/whereami');
- return req.success({
+ expectPendingRequest(req, $btnClose);
+ req.success({
saved: false
});
});
- $btnClose = $('a.btn-close');
- $btnReopen = $('a.btn-reopen');
- $btnClose.attr('href', 'http://goesnowhere.nothing/whereami');
- expect($btnReopen).toBeHidden();
- expect($btnClose.text()).toBe('Close');
- expect(typeof $btnClose.prop('disabled')).toBe('undefined');
+
+ $btnClose.attr('href', INVALID_URL);
$btnClose.trigger('click');
- expect($btnReopen).toBeHidden();
- expect($btnClose).toBeVisible();
- expect($('div.status-box-closed')).toBeHidden();
- expect($('div.status-box-open')).toBeVisible();
- expect($('div.flash-alert')).toBeVisible();
- return expect($('div.flash-alert').text()).toBe('Unable to update this issue at this time.');
+
+ expectIssueState(true);
+ expect($btnClose).toHaveProp('disabled', false);
+ expectErrorMessage();
});
+
it('fails to closes an issue with HTTP error', function() {
- var $btnClose, $btnReopen;
spyOn(jQuery, 'ajax').and.callFake(function(req) {
- expect(req.type).toBe('PUT');
- expect(req.url).toBe('http://goesnowhere.nothing/whereami');
- return req.error();
+ expectPendingRequest(req, $btnClose);
+ req.error();
});
- $btnClose = $('a.btn-close');
- $btnReopen = $('a.btn-reopen');
- $btnClose.attr('href', 'http://goesnowhere.nothing/whereami');
- expect($btnReopen).toBeHidden();
- expect($btnClose.text()).toBe('Close');
- expect(typeof $btnClose.prop('disabled')).toBe('undefined');
+
+ $btnClose.attr('href', INVALID_URL);
$btnClose.trigger('click');
- expect($btnReopen).toBeHidden();
- expect($btnClose).toBeVisible();
- expect($('div.status-box-closed')).toBeHidden();
- expect($('div.status-box-open')).toBeVisible();
- expect($('div.flash-alert')).toBeVisible();
- return expect($('div.flash-alert').text()).toBe('Unable to update this issue at this time.');
+
+ expectIssueState(true);
+ expect($btnClose).toHaveProp('disabled', true);
+ expectErrorMessage();
+ });
+ });
+
+ describe('reopen issue', function() {
+ fixture.preload('issues_show.html');
+
+ beforeEach(function() {
+ fixture.load('issues_show.html');
+ findElements();
+ this.issue = new Issue();
+
+ // TODO: fixture is an open issue, we should replace it by a closed issue
+ expectIssueState(true);
});
- return it('reopens an issue', function() {
- var $btnClose, $btnReopen;
+
+ it('reopens an issue', function() {
spyOn(jQuery, 'ajax').and.callFake(function(req) {
- expect(req.type).toBe('PUT');
- expect(req.url).toBe('http://gitlab.com/issues/6/reopen');
- return req.success({
+ expectPendingRequest(req, $btnReopen);
+ req.success({
id: 34
});
});
- $btnClose = $('a.btn-close');
- $btnReopen = $('a.btn-reopen');
- expect($btnReopen.text()).toBe('Reopen');
+
$btnReopen.trigger('click');
- expect($btnReopen).toBeHidden();
- expect($btnClose).toBeVisible();
- expect($('div.status-box-open')).toBeVisible();
- return expect($('div.status-box-closed')).toBeHidden();
+
+ expectIssueState(true);
+ expect($btnReopen).toHaveProp('disabled', false);
});
});