Fix jobs table when jobs have different config keys

If we have 2 jobs within 1 build, with such config values:

    { rvm: 'jruby-head', jdk: 'oraclejdk7' }
    { rvm: '1.9.3', jdk: null }

We should return jdk in configValues for second build, even if it's not
present. Otherwise table rows may be missing.

(closes #28)
This commit is contained in:
Piotr Sarnacki 2012-10-20 02:09:49 +02:00
parent f790a809ff
commit af00392d15
7 changed files with 1713 additions and 1612 deletions

View File

@ -34,8 +34,11 @@ require 'travis/model'
).property('log.workerName')
configValues: (->
if config = @get('config')
$.values($.only.apply(config, Travis.CONFIG_KEYS))
config = @get('config')
buildConfig = @get('build.config')
if config && buildConfig
keys = $.intersect($.keys(buildConfig), Travis.CONFIG_KEYS)
keys.map (key) -> config[key]
else
[]
).property('config')

View File

@ -0,0 +1,44 @@
store = null
describe 'Travis.Job', ->
beforeEach ->
store = Travis.Store.create()
afterEach ->
store.destroy()
describe 'with different number of config keys in sibling jobs', ->
beforeEach ->
buildAttrs =
id: 1
job_ids: [1, 2]
config:
jdk: ['oraclejdk7']
rvm: ['jruby-head']
store.load Travis.Build, 1, buildAttrs
jobAttrs =
id: 1
build_id: 1
config:
jdk: 'oraclejdk7'
rvm: 'jruby-head'
store.load Travis.Job, 1, jobAttrs
jobAttrs =
id: 2
build_id: 1
config:
jdk: null
rvm: 'jruby-head'
store.load Travis.Job, 2, jobAttrs
it 'returns config values for all keys available on build', ->
job1 = store.find Travis.Job, 1
job2 = store.find Travis.Job, 2
expect( job1.get('configValues') ).toEqual ['oraclejdk7', 'jruby-head']
expect( job2.get('configValues') ).toEqual [undefined, 'jruby-head']

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -8964,3 +8964,57 @@ return sinon;}.call(typeof window != 'undefined' && window || {}));
});
}).call(this);
(function() {
var store;
store = null;
describe('Travis.Job', function() {
beforeEach(function() {
return store = Travis.Store.create();
});
afterEach(function() {
return store.destroy();
});
return describe('with different number of config keys in sibling jobs', function() {
beforeEach(function() {
var buildAttrs, jobAttrs;
buildAttrs = {
id: 1,
job_ids: [1, 2],
config: {
jdk: ['oraclejdk7'],
rvm: ['jruby-head']
}
};
store.load(Travis.Build, 1, buildAttrs);
jobAttrs = {
id: 1,
build_id: 1,
config: {
jdk: 'oraclejdk7',
rvm: 'jruby-head'
}
};
store.load(Travis.Job, 1, jobAttrs);
jobAttrs = {
id: 2,
build_id: 1,
config: {
jdk: null,
rvm: 'jruby-head'
}
};
return store.load(Travis.Job, 2, jobAttrs);
});
return it('returns config values for all keys available on build', function() {
var job1, job2;
job1 = store.find(Travis.Job, 1);
job2 = store.find(Travis.Job, 2);
expect(job1.get('configValues')).toEqual(['oraclejdk7', 'jruby-head']);
return expect(job2.get('configValues')).toEqual([void 0, 'jruby-head']);
});
});
});
}).call(this);

File diff suppressed because it is too large Load Diff

View File

@ -1 +1 @@
8a51b157
21ef8a81