summaryrefslogtreecommitdiff
path: root/spec/javascripts/merge_request_spec.js.coffee
blob: e21bfde38ad156b36a8eca835879e0b24c93a941 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#= require merge_request

describe 'MergeRequest', ->
  describe 'task lists', ->
    fixture.preload('merge_requests_show.html')

    beforeEach ->
      fixture.load('merge_requests_show.html')
      @merge = new MergeRequest({})

    it 'modifies the Markdown field', ->
      spyOn(jQuery, 'ajax').and.stub()

      $('input[type=checkbox]').attr('checked', true).trigger('change')
      expect($('.js-task-list-field').val()).toBe('- [x] Task List Item')

    it 'submits an ajax request on tasklist:changed', ->
      spyOn(jQuery, 'ajax').and.callFake (req) ->
        expect(req.type).toBe('PATCH')
        expect(req.url).toBe('/foo')
        expect(req.data.merge_request.description).not.toBe(null)

      $('.js-task-list-field').trigger('tasklist:changed')

  describe 'reopen/close merge request', ->
    fixture.preload('merge_requests_show.html')
    beforeEach ->
      fixture.load('merge_requests_show.html')
      @merge_request = new MergeRequest({})
    it 'closes a merge request', ->
      $.ajax = (obj) ->
        expect(obj.type).toBe('PUT')
        expect(obj.url).toBe('http://gitlab.com/merge_requests/6/close')
        obj.success saved:true

      $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()
      expect($('div.status-box-open')).toBeHidden()

    it 'fails to close a merge request with success:false', ->

      $.ajax = (obj) ->
        expect(obj.type).toBe('PUT')
        expect(obj.url).toBe('http://goesnowhere.nothing/whereami')
        obj.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.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()
      expect($('div.flash-alert').text()).toBe('Unable to update this merge request at this time.')

    it 'fails to closes an issue with HTTP error', ->

      $.ajax = (obj) ->
        expect(obj.type).toBe('PUT')
        expect(obj.url).toBe('http://goesnowhere.nothing/whereami')
        obj.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.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()
      expect($('div.flash-alert').text()).toBe('Unable to update this merge request at this time.')    
    
    it 'reopens a merge request', ->
      $.ajax = (obj) ->
        expect(obj.type).toBe('PUT')
        expect(obj.url).toBe('http://gitlab.com/merge_requests/6/reopen')
        obj.success saved: true

      $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()
      expect($('div.status-box-closed')).toBeHidden()