#= require zen_mode describe 'ZenMode', -> fixture.preload('zen_mode.html') beforeEach -> fixture.load('zen_mode.html') # Stub Dropzone.forElement(...).enable() spyOn(Dropzone, 'forElement').and.callFake -> enable: -> true @zen = new ZenMode() # Set this manually because we can't actually scroll the window @zen.scroll_position = 456 # Ohmmmmmmm enterZen = -> $('.zen-toggle-comment').prop('checked', true).trigger('change') # Wh- what was that?! exitZen = -> $('.zen-toggle-comment').prop('checked', false).trigger('change') describe 'on enter', -> it 'pauses Mousetrap', -> spyOn(Mousetrap, 'pause') enterZen() expect(Mousetrap.pause).toHaveBeenCalled() it 'removes textarea styling', -> $('textarea').attr('style', 'height: 400px') enterZen() expect('textarea').not.toHaveAttr('style') describe 'in use', -> beforeEach -> enterZen() it 'exits on Escape', -> $(document).trigger(jQuery.Event('keydown', {keyCode: 27})) expect($('.zen-toggle-comment').prop('checked')).toBe(false) describe 'on exit', -> beforeEach -> enterZen() it 'unpauses Mousetrap', -> spyOn(Mousetrap, 'unpause') exitZen() expect(Mousetrap.unpause).toHaveBeenCalled() it 'restores the scroll position', -> spyOn(@zen, 'restoreScroll') exitZen() expect(@zen.restoreScroll).toHaveBeenCalledWith(456)