diff --git a/app/mirage/config.js b/app/mirage/config.js index 3ee1ab41..0a42213b 100644 --- a/app/mirage/config.js +++ b/app/mirage/config.js @@ -1,9 +1,10 @@ import Ember from 'ember'; +import Mirage from 'ember-cli-mirage'; export default function() { let _turnIntoV3Singular = function(type, record) { record['@type'] = type; - record['@href'] = `/${type}/${record.id}` + record['@href'] = `/${type}/${record.id}`; return record; }; @@ -11,23 +12,47 @@ export default function() { let turnIntoV3 = function(type, payload) { let response; if(Ember.isArray(payload)) { - let records = payload.map( (record) => { return _turnIntoV3Singular(type, record) } ); + let records = payload.map( (record) => { return _turnIntoV3Singular(type, record); } ); let pluralized = Ember.String.pluralize(type); response = {}; response['@type'] = pluralized; - response['@href'] = `/${pluralized}` + response['@href'] = `/${pluralized}`; response[pluralized] = records; } else { response = _turnIntoV3Singular(type, payload); } - return response; }; - this.get('/v3/repos', function(db, request) { + this.get('/repos', function(db, request) { return turnIntoV3('repository', db.repositories); }); + this.get('/repo/:slug', function(db, request) { + + let repos = db.repositories.filter((repo) => { + return decodeURIComponent(request.params.slug) === repo.slug; + }); + return turnIntoV3('repository', repos[0]); + }); + this.get('/jobs/:id', function(db, request) { + return {job: db.jobs.find(request.params.id), commit: db.commits[0]}; + }); + this.get('/jobs', function(db, request) { + return {jobs: db.jobs}; + }); + this.get('/builds/:id', function(db, request) { + return {build: db.builds.find(request.params.id), commit: db.commits[0]}; + }); + this.get('/jobs/:id/log', function(db, request) { + let log = db.logs.find(request.params.id); + + if(log) { + return { log: { parts: [{ id: log.id, number: 1, content: log.content}] }}; + } else { + new Mirage.Response(404, {}, {}); + } + }); this.get('/v3/repos', function(db, request) { return turnIntoV3('repository', db.repositories); diff --git a/app/mirage/factories/branch.js b/app/mirage/factories/branch.js new file mode 100644 index 00000000..b7d84f8a --- /dev/null +++ b/app/mirage/factories/branch.js @@ -0,0 +1,4 @@ +import Mirage/*, {faker} */ from 'ember-cli-mirage'; + +export default Mirage.Factory.extend({ +}); diff --git a/app/mirage/factories/build.js b/app/mirage/factories/build.js new file mode 100644 index 00000000..b7d84f8a --- /dev/null +++ b/app/mirage/factories/build.js @@ -0,0 +1,4 @@ +import Mirage/*, {faker} */ from 'ember-cli-mirage'; + +export default Mirage.Factory.extend({ +}); diff --git a/app/mirage/factories/commit.js b/app/mirage/factories/commit.js new file mode 100644 index 00000000..b7d84f8a --- /dev/null +++ b/app/mirage/factories/commit.js @@ -0,0 +1,4 @@ +import Mirage/*, {faker} */ from 'ember-cli-mirage'; + +export default Mirage.Factory.extend({ +}); diff --git a/app/mirage/factories/job.js b/app/mirage/factories/job.js new file mode 100644 index 00000000..5488e596 --- /dev/null +++ b/app/mirage/factories/job.js @@ -0,0 +1,5 @@ +import Mirage/*, {faker} */ from 'ember-cli-mirage'; + +export default Mirage.Factory.extend({ + +}); diff --git a/app/mirage/factories/log.js b/app/mirage/factories/log.js new file mode 100644 index 00000000..e763ded8 --- /dev/null +++ b/app/mirage/factories/log.js @@ -0,0 +1,5 @@ +import Mirage/*, {faker} */ from 'ember-cli-mirage'; + +export default Mirage.Factory.extend({ + content: 'Hello log' +}); diff --git a/app/models/log.js b/app/models/log.js index f0875206..8a52f5e4 100644 --- a/app/models/log.js +++ b/app/models/log.js @@ -44,6 +44,7 @@ var Request = Ember.Object.extend({ }, isJson(xhr, body) { + // Firefox can't see the Content-Type header on the xhr response due to the wrong // status code 204. Should be some redirect code but that doesn't work with CORS. var type = xhr.getResponseHeader('Content-Type') || ''; diff --git a/app/serializers/build.js b/app/serializers/build.js index 7aaf0886..19ca72a6 100644 --- a/app/serializers/build.js +++ b/app/serializers/build.js @@ -16,6 +16,14 @@ var Serializer = V2FallbackSerializer.extend({ return result; }, + normalizeSingleResponse: function(store, primaryModelClass, payload, id, requestType) { + if (payload.commit) { + payload.build.commit = payload.commit; + delete payload.build.commit_id; + } + return this._super(...arguments); + }, + normalizeArrayResponse: function(store, primaryModelClass, payload, id, requestType) { var result; if (payload.commits) { diff --git a/app/serializers/job.js b/app/serializers/job.js index 9f0e0e64..06d59894 100644 --- a/app/serializers/job.js +++ b/app/serializers/job.js @@ -25,6 +25,14 @@ export default V2FallbackSerializer.extend({ return this._super(modelClass, resourceHash); }, + normalizeSingleResponse: function(store, primaryModelClass, payload, id, requestType) { + if (payload.commit) { + payload.job.commit = payload.commit; + delete payload.job.commit_id; + } + return this._super(...arguments); + }, + normalizeArrayResponse: function(store, primaryModelClass, payload, id, requestType) { var result; if (payload.commits) { diff --git a/bower.json b/bower.json index e8874666..3155e050 100644 --- a/bower.json +++ b/bower.json @@ -18,7 +18,8 @@ "ember-resolver": "~0.1.20", "pretender": "~0.10.1", "lodash": "~3.7.0", - "Faker": "~3.0.0" + "Faker": "~3.0.0", + "ceibo": "1.0.0" }, "resolutions": { "ember": "2.2.1", diff --git a/config/environment.js b/config/environment.js index ef8846f0..cf5e548a 100644 --- a/config/environment.js +++ b/config/environment.js @@ -2,7 +2,7 @@ module.exports = function(environment) { var ENV = { - useV3API: false, + useV3API: true, modulePrefix: 'travis', environment: environment, baseURL: '/', @@ -77,6 +77,9 @@ module.exports = function(environment) { // ENV.APP.LOG_TRANSITIONS = true; // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; // ENV.APP.LOG_VIEW_LOOKUPS = true; + ENV['ember-cli-mirage'] = { + enabled: false + } } if (environment === 'test') { @@ -91,10 +94,13 @@ module.exports = function(environment) { ENV.APP.rootElement = '#ember-testing'; ENV.apiEndpoint = ''; + ENV.statusPageStatusUrl = null; } if (environment === 'production') { - + ENV['ember-cli-mirage'] = { + enabled: false + } } // TODO: I insert values from ENV here, but in production diff --git a/tests/acceptance/job-view-test.js b/tests/acceptance/job-view-test.js new file mode 100644 index 00000000..fddb29ac --- /dev/null +++ b/tests/acceptance/job-view-test.js @@ -0,0 +1,27 @@ +import { test } from 'qunit'; +import moduleForAcceptance from 'travis/tests/helpers/module-for-acceptance'; +import jobPage from 'travis/tests/pages/job'; + +moduleForAcceptance('Acceptance | job view'); + +test('visiting job-view', function(assert) { + + let repo = server.create('repository', {slug: 'travis-ci/travis-web'}); + let branch = server.create('branch', {}); + let commit = server.create('commit', {author_email: 'mrt@travis-ci.org', author_name: 'Mr T', committer_email: 'mrt@travis-ci.org', committer_name: 'Mr T', branch: 'acceptance-tests', message: 'This is a message', branch_is_default: true}); + let build = server.create('build', {repository_id: repo.id, state: 'passed', commit_id: commit.id}); + let job = server.create('job', {number: '1234.1', reposiptoy_id: repo.id, state: 'passed', build_id: build.id, commit_id: commit.id}); + let log = server.create('log', { id: job.id }); + + visit('/travis-ci/travis-web/jobs/'+ job.id); + + + andThen(function() { + assert.equal(jobPage.branch, 'acceptance-tests'); + assert.equal(jobPage.message, 'acceptance-tests This is a message'); + assert.equal(jobPage.state, '#1234.1 passed'); + assert.equal(jobPage.author, 'Mr T authored and committed'); + + assert.equal(jobPage.log, 'Hello log'); + }); +}); diff --git a/tests/pages/job.js b/tests/pages/job.js new file mode 100644 index 00000000..8ab5e7bd --- /dev/null +++ b/tests/pages/job.js @@ -0,0 +1,13 @@ +import PageObject from 'travis/tests/page-object'; + +let { + text +} = PageObject; + +export default PageObject.create({ + branch: text('.commit-branch'), + message: text('.build-title'), + state: text('.build-status'), + author: text('.commit-author'), + log: text('#log') +});