hunk.code_window:     verifying: 0,
       successful: 0,
       failed: 0,
       percentage: 0,
       speed: 0,
       totalSpeed: 0
     }
   })
   /**
    * @summary Application supported action messages
  
hunk.labels: keep keep keep keep replace replace keep keep keep keep keep
hunk.after_edit:     speed: null,
       totalSpeed: null
  
hunk.file_path: lib/gui/app/models/store.js
hunk.type: replace
file: /*
   * Copyright 2016 resin.io
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *    http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  'use strict'
  
  const m = require('mochainon')
  const windowProgress = require('../../../lib/gui/app/os/window-progress')
  
  describe('Browser: WindowProgress', function () {
    describe('windowProgress', function () {
      describe('given a stubbed current window', function () {
        beforeEach(function () {
          this.setProgressBarSpy = m.sinon.spy()
          this.setTitleSpy = m.sinon.spy()
  
          windowProgress.currentWindow = {
            setProgressBar: this.setProgressBarSpy,
            setTitle: this.setTitleSpy
          }
  
          this.state = {
            flashing: 1,
            verifying: 0,
            successful: 0,
            failed: 0,
            percentage: 85,
            speed: 100
          }
        })
  
        describe('.set()', function () {
          it('should translate 0-100 percentages to 0-1 ranges', function () {
            windowProgress.set(this.state)
            m.chai.expect(this.setProgressBarSpy).to.have.been.calledWith(0.85)
          })
  
          it('should set 0 given 0', function () {
            this.state.percentage = 0
            windowProgress.set(this.state)
            m.chai.expect(this.setProgressBarSpy).to.have.been.calledWith(0)
          })
  
          it('should set 1 given 100', function () {
            this.state.percentage = 100
            windowProgress.set(this.state)
            m.chai.expect(this.setProgressBarSpy).to.have.been.calledWith(1)
          })
  
          it('should throw if given a percentage higher than 100', function () {
            this.state.percentage = 101
            const state = this.state
            m.chai.expect(function () {
              windowProgress.set(state)
            }).to.throw('Invalid percentage: 101')
          })
  
          it('should throw if given a percentage less than 0', function () {
            this.state.percentage = -1
            const state = this.state
            m.chai.expect(function () {
              windowProgress.set(state)
            }).to.throw('Invalid percentage: -1')
          })
  
          it('should set the flashing title', function () {
            windowProgress.set(this.state)
            m.chai.expect(this.setTitleSpy).to.have.been.calledWith(' \u2013 85% Flashing')
          })
  
          it('should set the verifying title', function () {
            this.state.flashing = 0
            this.state.verifying = 1
            windowProgress.set(this.state)
            m.chai.expect(this.setTitleSpy).to.have.been.calledWith(' \u2013 85% Validating')
          })
  
          it('should set the starting title', function () {
            this.state.percentage = 0
            this.state.speed = 0
            windowProgress.set(this.state)
            m.chai.expect(this.setTitleSpy).to.have.been.calledWith(' \u2013 Starting...')
          })
  
          it('should set the finishing title', function () {
            this.state.percentage = 100
            windowProgress.set(this.state)
            m.chai.expect(this.setTitleSpy).to.have.been.calledWith(' \u2013 Finishing...')
          })
        })
  
        describe('.clear()', function () {
          it('should set -1', function () {
            windowProgress.clear()
            m.chai.expect(this.setProgressBarSpy).to.have.been.calledWith(-1)
          })
  
          it('should clear the window title', function () {
            windowProgress.clear()
            m.chai.expect(this.setTitleSpy).to.have.been.calledWith('')
          })
        })
      })
    })
  })
  