From 725d3b00da8786f453616a0d41d08d698424dca8 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Tue, 23 Feb 2016 13:03:12 +0100 Subject: [PATCH] Add ember-cli-mirage addon --- .jshintrc | 1 + app/mirage/config.js | 115 +++++++++++++++++++++++++++++ app/mirage/factories/contact.js | 20 +++++ app/mirage/factories/repository.js | 7 ++ app/mirage/scenarios/default.js | 7 ++ bower.json | 6 +- package.json | 2 + tests/.jshintrc | 1 + 8 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 app/mirage/config.js create mode 100644 app/mirage/factories/contact.js create mode 100644 app/mirage/factories/repository.js create mode 100644 app/mirage/scenarios/default.js diff --git a/.jshintrc b/.jshintrc index e75832d8..64e26f6b 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,5 +1,6 @@ { "predef": [ + "server", "document", "window", "-Promise", diff --git a/app/mirage/config.js b/app/mirage/config.js new file mode 100644 index 00000000..3ee1ab41 --- /dev/null +++ b/app/mirage/config.js @@ -0,0 +1,115 @@ +import Ember from 'ember'; + +export default function() { + let _turnIntoV3Singular = function(type, record) { + record['@type'] = type; + record['@href'] = `/${type}/${record.id}` + + return record; + }; + + let turnIntoV3 = function(type, payload) { + let response; + if(Ember.isArray(payload)) { + let records = payload.map( (record) => { return _turnIntoV3Singular(type, record) } ); + + let pluralized = Ember.String.pluralize(type); + response = {}; + response['@type'] = pluralized; + response['@href'] = `/${pluralized}` + response[pluralized] = records; + } else { + response = _turnIntoV3Singular(type, payload); + } + + return response; + }; + + this.get('/v3/repos', function(db, request) { + return turnIntoV3('repository', db.repositories); + }); + + this.get('/v3/repos', function(db, request) { + return turnIntoV3('repository', db.repositories); + }); + + // These comments are here to help you get started. Feel free to delete them. + + /* + Config (with defaults). + + Note: these only affect routes defined *after* them! + */ + // this.urlPrefix = ''; // make this `http://localhost:8080`, for example, if your API is on a different server + // this.namespace = ''; // make this `api`, for example, if your API is namespaced + // this.timing = 400; // delay for each request, automatically set to 0 during testing + + /* + Route shorthand cheatsheet + */ + /* + GET shorthands + + // Collections + this.get('/contacts'); + this.get('/contacts', 'users'); + this.get('/contacts', ['contacts', 'addresses']); + + // Single objects + this.get('/contacts/:id'); + this.get('/contacts/:id', 'user'); + this.get('/contacts/:id', ['contact', 'addresses']); + */ + + /* + POST shorthands + + this.post('/contacts'); + this.post('/contacts', 'user'); // specify the type of resource to be created + */ + + /* + PUT shorthands + + this.put('/contacts/:id'); + this.put('/contacts/:id', 'user'); // specify the type of resource to be updated + */ + + /* + DELETE shorthands + + this.del('/contacts/:id'); + this.del('/contacts/:id', 'user'); // specify the type of resource to be deleted + + // Single object + related resources. Make sure parent resource is first. + this.del('/contacts/:id', ['contact', 'addresses']); + */ + + /* + Function fallback. Manipulate data in the db via + + - db.{collection} + - db.{collection}.find(id) + - db.{collection}.where(query) + - db.{collection}.update(target, attrs) + - db.{collection}.remove(target) + + // Example: return a single object with related models + this.get('/contacts/:id', function(db, request) { + var contactId = +request.params.id; + + return { + contact: db.contacts.find(contactId), + addresses: db.addresses.where({contact_id: contactId}) + }; + }); + + */ +} + +/* +You can optionally export a config that is only loaded during tests +export function testConfig() { + +} +*/ diff --git a/app/mirage/factories/contact.js b/app/mirage/factories/contact.js new file mode 100644 index 00000000..1b3a3eab --- /dev/null +++ b/app/mirage/factories/contact.js @@ -0,0 +1,20 @@ +/* + This is an example factory definition. + + Create more files in this directory to define additional factories. +*/ +import Mirage/*, {faker} */ from 'ember-cli-mirage'; + +export default Mirage.Factory.extend({ + // name: 'Pete', // strings + // age: 20, // numbers + // tall: true, // booleans + + // email: function(i) { // and functions + // return 'person' + i + '@test.com'; + // }, + + // firstName: faker.name.firstName, // using faker + // lastName: faker.name.firstName, + // zipCode: faker.address.zipCode +}); diff --git a/app/mirage/factories/repository.js b/app/mirage/factories/repository.js new file mode 100644 index 00000000..7001999c --- /dev/null +++ b/app/mirage/factories/repository.js @@ -0,0 +1,7 @@ +import Mirage from 'ember-cli-mirage'; + +export default Mirage.Factory.extend({ + slug: 'travis-ci/travis-web', + githubLanguage: 'ruby', + active: true +}); diff --git a/app/mirage/scenarios/default.js b/app/mirage/scenarios/default.js new file mode 100644 index 00000000..e07271cc --- /dev/null +++ b/app/mirage/scenarios/default.js @@ -0,0 +1,7 @@ +export default function(/* server */) { + + // Seed your development database using your factories. This + // data will not be loaded in your tests. + + // server.createList('contact', 10); +} diff --git a/bower.json b/bower.json index 1cd79336..e8874666 100644 --- a/bower.json +++ b/bower.json @@ -15,8 +15,10 @@ "moment": "~2.9.0", "jquery-timeago": "~1.4.1", "pusher": "~2.2.3", - "pretender": "0.1.0", - "ember-resolver": "~0.1.20" + "ember-resolver": "~0.1.20", + "pretender": "~0.10.1", + "lodash": "~3.7.0", + "Faker": "~3.0.0" }, "resolutions": { "ember": "2.2.1", diff --git a/package.json b/package.json index 81138c0d..d40148d8 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,8 @@ "ember-cli-htmlbars-inline-precompile": "^0.3.1", "ember-cli-inject-live-reload": "^1.3.1", "ember-cli-inline-images": "^0.0.4", + "ember-cli-mirage": "0.1.11", + "ember-cli-page-object": "1.0.0", "ember-cli-pendo": "drogus/ember-cli-pendo", "ember-cli-pretender": "0.3.1", "ember-cli-qunit": "^1.2.1", diff --git a/tests/.jshintrc b/tests/.jshintrc index 51c88317..14325959 100644 --- a/tests/.jshintrc +++ b/tests/.jshintrc @@ -1,5 +1,6 @@ { "predef": [ + "server", "document", "window", "location",