ae3f869fd1
On the first load, the merge request tabs would be requested in JSON format to render the HTML. This would cause the "Reload with full diff" button to create a link to diff.json. Closes #2041
88 lines
2.9 KiB
CoffeeScript
88 lines
2.9 KiB
CoffeeScript
#= require merge_request_tabs
|
|
|
|
describe 'MergeRequestTabs', ->
|
|
stubLocation = (stubs) ->
|
|
defaults = {pathname: '', search: '', hash: ''}
|
|
$.extend(defaults, stubs)
|
|
|
|
fixture.preload('merge_request_tabs.html')
|
|
|
|
beforeEach ->
|
|
@class = new MergeRequestTabs()
|
|
@spies = {
|
|
ajax: spyOn($, 'ajax').and.callFake ->
|
|
history: spyOn(history, 'replaceState').and.callFake ->
|
|
}
|
|
|
|
describe '#activateTab', ->
|
|
beforeEach ->
|
|
fixture.load('merge_request_tabs.html')
|
|
@subject = @class.activateTab
|
|
|
|
it 'shows the first tab when action is show', ->
|
|
@subject('show')
|
|
expect($('#notes')).toHaveClass('active')
|
|
|
|
it 'shows the notes tab when action is notes', ->
|
|
@subject('notes')
|
|
expect($('#notes')).toHaveClass('active')
|
|
|
|
it 'shows the commits tab when action is commits', ->
|
|
@subject('commits')
|
|
expect($('#commits')).toHaveClass('active')
|
|
|
|
it 'shows the diffs tab when action is diffs', ->
|
|
@subject('diffs')
|
|
expect($('#diffs')).toHaveClass('active')
|
|
|
|
describe '#setCurrentAction', ->
|
|
beforeEach ->
|
|
@subject = @class.setCurrentAction
|
|
|
|
it 'changes from commits', ->
|
|
@class._location = stubLocation(pathname: '/foo/bar/merge_requests/1/commits')
|
|
|
|
expect(@subject('notes')).toBe('/foo/bar/merge_requests/1')
|
|
expect(@subject('diffs')).toBe('/foo/bar/merge_requests/1/diffs')
|
|
|
|
it 'changes from diffs', ->
|
|
@class._location = stubLocation(pathname: '/foo/bar/merge_requests/1/diffs')
|
|
|
|
expect(@subject('notes')).toBe('/foo/bar/merge_requests/1')
|
|
expect(@subject('commits')).toBe('/foo/bar/merge_requests/1/commits')
|
|
|
|
it 'changes from diffs.html', ->
|
|
@class._location = stubLocation(pathname: '/foo/bar/merge_requests/1/diffs.html')
|
|
|
|
expect(@subject('notes')).toBe('/foo/bar/merge_requests/1')
|
|
expect(@subject('commits')).toBe('/foo/bar/merge_requests/1/commits')
|
|
|
|
it 'changes from notes', ->
|
|
@class._location = stubLocation(pathname: '/foo/bar/merge_requests/1')
|
|
|
|
expect(@subject('diffs')).toBe('/foo/bar/merge_requests/1/diffs')
|
|
expect(@subject('commits')).toBe('/foo/bar/merge_requests/1/commits')
|
|
|
|
it 'includes search parameters and hash string', ->
|
|
@class._location = stubLocation({
|
|
pathname: '/foo/bar/merge_requests/1/diffs'
|
|
search: '?view=parallel'
|
|
hash: '#L15-35'
|
|
})
|
|
|
|
expect(@subject('show')).toBe('/foo/bar/merge_requests/1?view=parallel#L15-35')
|
|
|
|
it 'replaces the current history state', ->
|
|
@class._location = stubLocation(pathname: '/foo/bar/merge_requests/1')
|
|
new_state = @subject('commits')
|
|
|
|
expect(@spies.history).toHaveBeenCalledWith(
|
|
{turbolinks: true, url: new_state},
|
|
document.title,
|
|
new_state
|
|
)
|
|
|
|
it 'treats "show" like "notes"', ->
|
|
@class._location = stubLocation(pathname: '/foo/bar/merge_requests/1/commits')
|
|
|
|
expect(@subject('show')).toBe('/foo/bar/merge_requests/1')
|