From dff93c93fed70985d03d78157c3a8637e0030142 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 31 Oct 2012 16:10:42 +0100 Subject: [PATCH] Don't require some of the attributes for incomplete records When build or job is not finished, we don't need to load the record because of them, they will be loaded when 'finished' events come in. --- assets/scripts/app/models/build.coffee | 11 ++++++++ assets/scripts/app/models/job.coffee | 13 +++++++++- assets/scripts/spec/unit/build_spec.coffee | 30 ++++++++++++++++++++++ assets/scripts/spec/unit/job_spec.coffee | 23 +++++++++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 assets/scripts/spec/unit/build_spec.coffee diff --git a/assets/scripts/app/models/build.coffee b/assets/scripts/app/models/build.coffee index d2eedb31..707a7710 100644 --- a/assets/scripts/app/models/build.coffee +++ b/assets/scripts/app/models/build.coffee @@ -53,6 +53,17 @@ require 'travis/model' Travis.ajax.post '/requests', build_id: @get('id') ) + isAttributeLoaded: (key) -> + if ['_duration', 'finishedAt', 'result'].contains(key) && !@get('finished') + return true + else + @_super(key) + + finished: (-> + @get('state') == 'finished' + ).property('state') + + @Travis.Build.reopenClass byRepoId: (id, parameters) -> @find($.extend(parameters || {}, repository_id: id)) diff --git a/assets/scripts/app/models/job.coffee b/assets/scripts/app/models/job.coffee index 4bed6378..496f5897 100644 --- a/assets/scripts/app/models/job.coffee +++ b/assets/scripts/app/models/job.coffee @@ -52,9 +52,20 @@ require 'travis/model' Travis.app.pusher.subscribe "job-#{id}" onStateChange: (-> - Travis.app.pusher.unsubscribe "job-#{@get('id')}" if @get('state') == 'finished' + if @get('state') == 'finished' && Travis.app + Travis.app.pusher.unsubscribe "job-#{@get('id')}" ).observes('state') + isAttributeLoaded: (key) -> + if ['_duration', 'finishedAt', 'result'].contains(key) && !@get('finished') + return true + else + @_super(key) + + finished: (-> + @get('state') == 'finished' + ).property('state') + @Travis.Job.reopenClass queued: (queue) -> @find() diff --git a/assets/scripts/spec/unit/build_spec.coffee b/assets/scripts/spec/unit/build_spec.coffee new file mode 100644 index 00000000..2a81e1d1 --- /dev/null +++ b/assets/scripts/spec/unit/build_spec.coffee @@ -0,0 +1,30 @@ +store = null +record = null + +describe 'Travis.Build', -> + beforeEach -> + store = Travis.Store.create() + + afterEach -> + store.destroy() + + describe 'incomplete attributes', -> + beforeEach -> + record = store.loadIncomplete Travis.Build, { id: 1, state: 'started' } + + it 'does not load record on duration, finishedAt and result if job is not in finished state', -> + record.get('_duration') + record.get('finishedAt') + record.get('result') + + waits 50 + runs -> + expect( record.get('complete') ).toBeFalsy() + + it 'loads the rest of the record if it\'s in finished state', -> + record = store.loadIncomplete Travis.Build, { id: 1, state: 'finished' } + record.get('finishedAt') + + waits 50 + runs -> + expect( record.get('complete') ).toBeTruthy() diff --git a/assets/scripts/spec/unit/job_spec.coffee b/assets/scripts/spec/unit/job_spec.coffee index 6f0f264a..2550058b 100644 --- a/assets/scripts/spec/unit/job_spec.coffee +++ b/assets/scripts/spec/unit/job_spec.coffee @@ -1,4 +1,5 @@ store = null +record = null describe 'Travis.Job', -> beforeEach -> @@ -7,6 +8,28 @@ describe 'Travis.Job', -> afterEach -> store.destroy() + describe 'incomplete attributes', -> + beforeEach -> + record = store.loadIncomplete Travis.Job, { id: 1, state: 'started' } + + it 'does not load record on duration, finishedAt and result if job is not in finished state', -> + record.get('_duration') + record.get('finishedAt') + record.get('result') + + waits 50 + runs -> + expect( record.get('complete') ).toBeFalsy() + + it 'loads the rest of the record if it\'s in finished state', -> + record = store.loadIncomplete Travis.Job, { id: 1, state: 'finished' } + record.get('finishedAt') + + waits 50 + runs -> + expect( record.get('complete') ).toBeTruthy() + + describe 'with different number of config keys in sibling jobs', -> beforeEach -> buildAttrs =