jam-cloud/web/spec/javascripts/sync_viewer_spec.js.coffee

231 lines
8.5 KiB
CoffeeScript

describe "SyncViewer", ->
beforeEach ->
this.fixtures = fixture.load("syncViewer.html", "user_sync_track1.json"); # append these fixtures which were already cached
this.server = sinon.fakeServer.create();
window.jamClient = sinon.stub()
this.syncViewer = new JK.SyncViewer()
this.syncViewer.init()
$('body').append(this.syncViewer.root)
this.track1 = this.fixtures[1]["entries"][0]
window.gon = {}
window.gon.isNativeClient = true
callback = sinon.spy()
window.jamClient.GetLocalRecordingState = sinon.stub().returns({recordings: []})
window.jamClient.GetRecordingManagerState = sinon.stub().returns({running: false})
window.jamClient.IsNativeClient = sinon.stub().returns(true)
afterEach ->
this.server.restore();
it "display state correctly", ->
$track = this.syncViewer.createTrack(this.track1)
this.syncViewer.updateTrackState($track)
expect($track.find('.client-state .msg')).toContainText('MISSING')
expect($track.find('.upload-state .msg')).toContainText('PENDING UPLOAD')
this.track1.fully_uploaded = true
this.syncViewer.updateTrackState($track)
expect($track.find('.upload-state .msg')).toContainText('UPLOADED')
describe "no track", ->
beforeEach ->
this.syncViewer.load()
this.server.requests[0].respond(
200,
{ "Content-Type": "application/json" },
JSON.stringify({ next: null, entries: []})
);
it "loads empty", ->
expect(this.syncViewer.list.find('.no-syncs')).toExist();
describe "one track", ->
beforeEach ->
this.syncViewer.load()
this.server.requests[0].respond(
200,
{ "Content-Type": "application/json" },
JSON.stringify({ next: null, entries: [this.track1]})
);
it "loads single track", ->
expect(this.syncViewer.list.find('.no-syncs')).not.toExist();
$track = this.syncViewer.list.find('.recorded-track')
expect($track).toHaveLength(1);
expect($track.find('.client-state .msg')).toContainText('MISSING')
expect($track.find('.upload-state .msg')).toContainText('PENDING UPLOAD')
it "handles recorded_track upload progress events correctly", ->
commandMetadata = {queue: 'upload', type: 'recorded_track', action: 'upload', recording_id: this.track1.recording_id, track_id: this.track1.client_track_id}
cmd = {commandId: '1', commandType: 'upload', commandMetadata: commandMetadata }
# first we should see that recording manager is paused
expect(this.syncViewer.downloadProgress).toHaveClass('paused')
expect(this.syncViewer.uploadProgress).toHaveClass('paused')
# send in a start command
this.syncViewer.fileManagerCmdStart(null, cmd)
expect(this.syncViewer.downloadProgress).toHaveClass('paused')
expect(this.syncViewer.uploadProgress).toHaveClass('busy')
$recordedTrackProgress = this.syncViewer.uploadProgress.find('.recorded-track.sync')
expect($recordedTrackProgress).toHaveLength(1)
expect($recordedTrackProgress.find('.progress')).toBeHidden()
cmd.percentage = 50 # half way done
this.syncViewer.fileManagerCmdProgress(null, cmd)
expect($recordedTrackProgress.find('.progress')).toBeVisible()
# command is over; progress element should be removed now
this.syncViewer.fileManagerCmdStop(null, cmd)
expect(this.syncViewer.downloadProgress).toHaveClass('paused')
expect(this.syncViewer.uploadProgress).toHaveClass('paused')
expect($recordedTrackProgress).not.toBeInDOM() # got removed
it "handles mix download progress events correctly", ->
commandMetadata = {queue: 'download', type: 'mix', action: 'download'}
cmd = {commandId: '1', commandType: 'download', commandMetadata: commandMetadata }
# first we should see that recording manager is paused
expect(this.syncViewer.downloadProgress).toHaveClass('paused')
expect(this.syncViewer.uploadProgress).toHaveClass('paused')
# send in a start command
this.syncViewer.fileManagerCmdStart(null, cmd)
expect(this.syncViewer.downloadProgress).toHaveClass('busy')
expect(this.syncViewer.uploadProgress).toHaveClass('paused')
$progress = this.syncViewer.downloadProgress.find('.generic.sync')
expect($progress).toHaveLength(1)
expect($progress.find('span.text')).toHaveText('DOWNLOADING MIX')
cmd.percentage = 50 # half way done
this.syncViewer.fileManagerCmdProgress(null, cmd)
# nothing happens in percentage update
# command is over; progress element should be removed now
this.syncViewer.fileManagerCmdStop(null, cmd)
expect(this.syncViewer.downloadProgress).toHaveClass('paused')
expect(this.syncViewer.uploadProgress).toHaveClass('paused')
expect($progress).not.toBeInDOM() # got removed
it "handles recorded track convert progress events correctly", ->
commandMetadata = {queue: 'upload', type: 'recorded_track', action: 'convert'}
cmd = {commandId: '1', commandType: 'upload', commandMetadata: commandMetadata }
# first we should see that recording manager is paused
expect(this.syncViewer.downloadProgress).toHaveClass('paused')
expect(this.syncViewer.uploadProgress).toHaveClass('paused')
# send in a start command
this.syncViewer.fileManagerCmdStart(null, cmd)
expect(this.syncViewer.uploadProgress).toHaveClass('busy')
expect(this.syncViewer.downloadProgress).toHaveClass('paused')
$progress = this.syncViewer.uploadProgress.find('.generic.sync')
expect($progress).toHaveLength(1)
expect($progress.find('span.text')).toHaveText('COMPRESSING TRACK')
cmd.percentage = 50 # half way done
this.syncViewer.fileManagerCmdProgress(null, cmd)
# nothing happens in percentage update
# command is over; progress element should be removed now
this.syncViewer.fileManagerCmdStop(null, cmd)
expect(this.syncViewer.downloadProgress).toHaveClass('paused')
expect(this.syncViewer.uploadProgress).toHaveClass('paused')
expect($progress).not.toBeInDOM() # got removed
it "handles stream mix upload progress events correctly", ->
commandMetadata = {queue: 'upload', type: 'stream_mix', action: 'upload'}
cmd = {commandId: '1', commandType: 'upload', commandMetadata: commandMetadata }
# first we should see that recording manager is paused
expect(this.syncViewer.downloadProgress).toHaveClass('paused')
expect(this.syncViewer.uploadProgress).toHaveClass('paused')
# send in a start command
this.syncViewer.fileManagerCmdStart(null, cmd)
expect(this.syncViewer.uploadProgress).toHaveClass('busy')
expect(this.syncViewer.downloadProgress).toHaveClass('paused')
$progress = this.syncViewer.uploadProgress.find('.generic.sync')
expect($progress).toHaveLength(1)
expect($progress.find('span.text')).toHaveText('UPLOADING STREAM MIX')
cmd.percentage = 50 # half way done
this.syncViewer.fileManagerCmdProgress(null, cmd)
# nothing happens in percentage update
# command is over; progress element should be removed now
this.syncViewer.fileManagerCmdStop(null, cmd)
expect(this.syncViewer.downloadProgress).toHaveClass('paused')
expect(this.syncViewer.uploadProgress).toHaveClass('paused')
expect($progress).not.toBeInDOM() # got removed
it "displays hover info over recorded-track", ->
$track = this.syncViewer.list.find('.recorded-track')
# should show over client state
$clientState = $track.find('.client-state')
expect($clientState).toHaveLength(1);
$clientState.btOn()
$hoverHelp = $('.help-hover-recorded-tracks')
expect($hoverHelp).toHaveLength(1);
# also verify that the message is correct about client state and upload state
expect($hoverHelp.find('.client-state .msg')).toContainText('MISSING')
expect($hoverHelp.find('.upload-state .msg')).toContainText('PENDING UPLOAD')
$clientState.btOff()
# as well as show over upload state
$uploadState = $track.find('.upload-state')
expect($uploadState).toHaveLength(1);
$uploadState.btOn()
$hoverHelp = $('.help-hover-recorded-tracks')
expect($hoverHelp).toHaveLength(1);
# also verify that the message is correct about client state and upload state
expect($hoverHelp.find('.client-state .msg')).toContainText('MISSING')
expect($hoverHelp.find('.upload-state .msg')).toContainText('PENDING UPLOAD')
$uploadState.btOff()