o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1349983246.127132: @value"¿+{I" class:EFI"ProcessedAsset;FI"logical_path;FI"$reports/personal_report_spec.js;FI" pathname;FI"[/Users/paul/Sites/woople-theme/spec/javascripts/reports/personal_report_spec.js.coffee;FI"content_type;FI"application/javascript;FI" mtime;FI"2012-10-11T15:20:01-04:00;FI" length;FieI" digest;F"%5f4b01fc5a66b3a61648c4cd0b91fa17I" source;FI"e(function() { describe('PersonalReport', function() { beforeEach(function() { $('body').html(JST['templates/tabs']()); this.selector = $('#spec_reports_nav a[data-toggle="tab"]'); return this.sut = new PersonalReport(); }); describe('shownListener', function() { return it('should load the report based on the selector data-attributes', function() { var spy, stub; spy = sinon.spy(this.sut, 'shownListener'); stub = sinon.stub(this.sut, 'loadReport').returns(true); this.sut.init(this.selector, false); this.selector.trigger('shown'); expect(spy).to.have.been.calledOnce; expect(stub).to.have.been.calledOnce; spy.restore(); return stub.restore(); }); }); describe('loadReport', function() { describe('successful response', function() { return it('builds the report', function() { var spy, stub1, stub2, target; stub1 = sinon.stub(jQuery, 'ajax').yieldsTo('success', [1, 2, 3]); stub2 = sinon.stub(this.sut, 'buildReport').returns(true); spy = sinon.spy(this.sut, 'successCallback'); this.sut.init(this.selector, false); target = this.selector.attr('data-toggle'); this.sut.loadReport($(target).attr('data-type'), $(target).attr('data-container'), $(target).attr('data-path')); expect(stub1).to.have.been.calledOnce; expect(stub2).to.have.been.calledOnce; expect(spy.withArgs([1, 2, 3])).to.have.been.calledOnce; stub1.restore(); stub2.restore(); return spy.restore(); }); }); return describe('error response', function() { return it('currently does nothing', function() { var spy, stub, target; stub = sinon.stub(jQuery, 'ajax').yieldsTo('error', [1, 2, 3]); spy = sinon.spy(this.sut, 'errorCallback'); this.sut.init(this.selector, false); target = this.selector.attr('data-toggle'); this.sut.loadReport($(target).attr('data-type'), $(target).attr('data-container'), $(target).attr('data-path')); expect(stub).to.have.been.calledOnce; expect(spy.withArgs([1, 2, 3])).to.have.been.calledOnce; stub.restore(); return spy.restore(); }); }); }); describe('buildReport', function() { return it('should render the chart', function() { var stub1, stub2; stub1 = sinon.stub(this.sut, 'highchartOptions').returns(true); stub2 = sinon.stub(Highcharts, 'Chart').returns(true); this.sut.buildReport(); expect(this.sut.chart).to.exist; expect(stub1).to.have.been.calledOnce; expect(stub2.withArgs(this.sut.highchartOptions())).to.have.been.calledOnce; stub1.restore(); return stub2.restore(); }); }); describe('reportTitle', function() { return it('should use the data-title of the active tab pane', function() { this.sut.reportType = 'week'; return expect(this.sut.reportTitle()).to.equal($('#week').data('title')); }); }); describe('categories', function() { return it('creates an array of formatted categories', function() { var categories, dataMock, spy; spy = sinon.spy(this.sut, 'formatCategoryName'); dataMock = { primary_name: "2012-10-05", secondary_name: "" }; this.sut.reportData = [dataMock]; categories = this.sut.categories(); expect(spy).to.have.been.calledOnce; expect(categories).to.not.be.empty; return spy.restore(); }); }); describe('formatCategoryName', function() { return it('formats the chart category name', function() { var data; data = { primary_name: 'Primary', secondary_name: 'Secondary' }; return expect(this.sut.formatCategoryName(data)).to.equal("Primary
Secondary"); }); }); describe('uniqueViews', function() { return it('creates an array of formatted views', function() { var dataMock, spy, uniqueViews; spy = sinon.spy(this.sut, 'gradeColour'); dataMock = { primary_name: "2012-10-05", secondary_name: "", views: 1, relearns: 1 }; this.sut.reportData = [dataMock]; uniqueViews = this.sut.uniqueViews(); expect(spy.withArgs(dataMock)).to.have.been.calledOnce; expect(uniqueViews).to.not.be.empty; return spy.restore(); }); }); describe('relearns', function() { return it('creates an array of formatted relearns', function() { var dataMock, relearns, spy; spy = sinon.spy(this.sut, 'gradeColour'); dataMock = { primary_name: "2012-10-05", secondary_name: "", views: 1, relearns: 1 }; this.sut.reportData = [dataMock]; relearns = this.sut.relearns(); expect(spy.withArgs(dataMock)).to.have.been.calledOnce; expect(relearns).to.not.be.empty; return spy.restore(); }); }); describe('gradeColour', function() { afterEach(function() { return this.stub.restore(); }); it('returns GREEN when above or equal to the GREEN_GOAL', function() { var dataMock, expectation; this.stub = sinon.stub(this.sut, 'isWeekly').returns(true); dataMock = { views: 7, relearns: 0 }; expectation = "rgba(" + PersonalReport.GREEN + ", 1)"; return expect(this.sut.gradeColour(dataMock, 1)).to.equal(expectation); }); it('returns YELLOW when between the YELLOW_GOAL and GREEN_GOAL', function() { var dataMock, expectation; this.stub = sinon.stub(this.sut, 'isWeekly').returns(true); dataMock = { views: 4, relearns: 0 }; expectation = "rgba(" + PersonalReport.YELLOW + ", 1)"; return expect(this.sut.gradeColour(dataMock, 1)).to.equal(expectation); }); return it('returns RED when beneath the YELLOW_GOAL', function() { var dataMock, expectation; this.stub = sinon.stub(this.sut, 'isWeekly').returns(true); dataMock = { views: 1, relearns: 0 }; expectation = "rgba(" + PersonalReport.RED + ", 1)"; return expect(this.sut.gradeColour(dataMock, 1)).to.equal(expectation); }); }); describe('multiplier', function() { it('returns 1 if report type is week', function() { this.sut.reportType = 'week'; return expect(this.sut.multiplier()).to.equal(1); }); it('returns 7 if report type is month', function() { this.sut.reportType = 'month'; return expect(this.sut.multiplier()).to.equal(7); }); return it('returns 31 if report type is annual', function() { this.sut.reportType = 'annual'; return expect(this.sut.multiplier()).to.equal(31); }); }); return describe('log', function() { it('should write to the console when debugging is enabled', function() { var stub; stub = sinon.stub(console, 'log').returns(true); this.sut.init('x', true); expect(stub.withArgs("[PersonalReport] initialize")).to.have.been.calledOnce; return stub.restore(); }); return it('should not write to the console when debugging is disabled', function() { var stub; stub = sinon.stub(console, 'log').returns(true); this.sut.init('x', false); expect(stub).to.not.have.been.called; return stub.restore(); }); }); }); }).call(this); ;TI"dependency_digest;F"%d5551ba21c10d2235387bb205d8ee98eI"required_paths;F[I"f/Users/paul/.rvm/gems/ruby-1.9.3-p194/gems/jquery-rails-2.0.2/vendor/assets/javascripts/jquery.js;FI"f/Users/paul/.rvm/gems/ruby-1.9.3-p194/gems/sinon-rails-1.4.2.1/vendor/assets/javascripts/sinon.js;FI"V/Users/paul/Sites/woople-theme/vendor/assets/javascripts/sinon-chai/sinon-chai.js;FI"K/Users/paul/Sites/woople-theme/spec/javascripts/templates/tabs.jst.ejs;FI"J/Users/paul/Sites/woople-theme/spec/javascripts/spec_helper.js.coffee;FI"~/Users/paul/.rvm/gems/ruby-1.9.3-p194/gems/less-rails-bootstrap-2.0.13/vendor/assets/javascripts/twitter/bootstrap/tab.js;FI"n/Users/paul/.rvm/gems/ruby-1.9.3-p194/gems/highcharts-rails-2.3.3/vendor/assets/javascripts/highcharts.js;FI"i/Users/paul/Sites/woople-theme/app/assets/javascripts/woople-theme/reports/personal_report.js.coffee;FI"[/Users/paul/Sites/woople-theme/spec/javascripts/reports/personal_report_spec.js.coffee;FI"dependency_paths;F[{I" path;FI"[/Users/paul/Sites/woople-theme/spec/javascripts/reports/personal_report_spec.js.coffee;FI" mtime;FI"2012-10-11T15:20:01-04:00;FI" digest;F"%cdf0b6caf6c708bfb83ec118c27712f5{I" path;FI">/Users/paul/Sites/woople-theme/spec/javascripts/templates;FI" mtime;FI"2012-10-11T15:20:01-04:00;FI" digest;F"%3e529859892b429d7f86a1ed01d51e66{I" path;FI"J/Users/paul/Sites/woople-theme/spec/javascripts/spec_helper.js.coffee;FI" mtime;FI"2012-10-11T15:20:01-04:00;FI" digest;F"%7ae4f8132c6026d65d0a13f1b18cd8ca{I" path;FI"f/Users/paul/.rvm/gems/ruby-1.9.3-p194/gems/jquery-rails-2.0.2/vendor/assets/javascripts/jquery.js;FI" mtime;FI"2012-06-29T13:51:58-04:00;FI" digest;F"%33830d8b45ce2f9b31ccd9bdf5f3fc6e{I" path;FI"f/Users/paul/.rvm/gems/ruby-1.9.3-p194/gems/sinon-rails-1.4.2.1/vendor/assets/javascripts/sinon.js;FI" mtime;FI"2012-10-11T15:20:32-04:00;FI" digest;F"%3975db7dd0993f44f0b2bf44c15e8353{I" path;FI"V/Users/paul/Sites/woople-theme/vendor/assets/javascripts/sinon-chai/sinon-chai.js;FI" mtime;FI"2012-10-11T15:20:01-04:00;FI" digest;F"%84a21bfc872a9ee86eb35f36da448409{I" path;FI"K/Users/paul/Sites/woople-theme/spec/javascripts/templates/tabs.jst.ejs;FI" mtime;FI"2012-10-11T15:20:01-04:00;FI" digest;F"%eef7087b445699495b494635f70b5694{I" path;FI"~/Users/paul/.rvm/gems/ruby-1.9.3-p194/gems/less-rails-bootstrap-2.0.13/vendor/assets/javascripts/twitter/bootstrap/tab.js;FI" mtime;FI"2012-06-29T13:51:59-04:00;FI" digest;F"%70f8c244d40a4884d71d8436fb2c08f5{I" path;FI"n/Users/paul/.rvm/gems/ruby-1.9.3-p194/gems/highcharts-rails-2.3.3/vendor/assets/javascripts/highcharts.js;FI" mtime;FI"2012-10-11T15:20:21-04:00;FI" digest;F"%93fcf6162c00919d57dd01e96a86ca5a{I" path;FI"i/Users/paul/Sites/woople-theme/app/assets/javascripts/woople-theme/reports/personal_report.js.coffee;FI" mtime;FI"2012-10-11T15:20:01-04:00;FI" digest;F"%24668639beee06fe9ed5943422a4d810I" _version;F"%9f3b95dd7ea3030dc35985c0a8020862