Add job page acceptance test

This commit is contained in:
Lisa P 2016-02-23 15:27:51 +01:00 committed by Piotr Sarnacki
parent 725d3b00da
commit 0dc7e0e045
13 changed files with 119 additions and 8 deletions

View File

@ -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);

View File

@ -0,0 +1,4 @@
import Mirage/*, {faker} */ from 'ember-cli-mirage';
export default Mirage.Factory.extend({
});

View File

@ -0,0 +1,4 @@
import Mirage/*, {faker} */ from 'ember-cli-mirage';
export default Mirage.Factory.extend({
});

View File

@ -0,0 +1,4 @@
import Mirage/*, {faker} */ from 'ember-cli-mirage';
export default Mirage.Factory.extend({
});

View File

@ -0,0 +1,5 @@
import Mirage/*, {faker} */ from 'ember-cli-mirage';
export default Mirage.Factory.extend({
});

View File

@ -0,0 +1,5 @@
import Mirage/*, {faker} */ from 'ember-cli-mirage';
export default Mirage.Factory.extend({
content: 'Hello log'
});

View File

@ -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') || '';

View File

@ -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) {

View File

@ -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) {

View File

@ -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",

View File

@ -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

View File

@ -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');
});
});

13
tests/pages/job.js Normal file
View File

@ -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')
});