From 000f5e245d2aeab4964f8dfa5025f19bb3654f8f Mon Sep 17 00:00:00 2001 From: Emmanuel QUENTIN Date: Fri, 15 May 2015 11:26:27 +0200 Subject: [PATCH] Move *Queries test to es6 --- .../ng-admin/es6/lib/Queries/ReadQueries.js | 4 +- .../es6/tests/lib/Queries/ReadQueriesTest.js | 182 +++++++++++++ .../es6/tests/lib/Queries/WriteQueriesTest.js | 16 +- .../unit/Crud/repository/DeleteQueriesSpec.js | 69 ----- .../Crud/repository/RetrieveQueriesSpec.js | 242 ------------------ 5 files changed, 191 insertions(+), 322 deletions(-) create mode 100644 src/javascripts/ng-admin/es6/tests/lib/Queries/ReadQueriesTest.js delete mode 100644 src/javascripts/test/unit/Crud/repository/DeleteQueriesSpec.js delete mode 100644 src/javascripts/test/unit/Crud/repository/RetrieveQueriesSpec.js diff --git a/src/javascripts/ng-admin/es6/lib/Queries/ReadQueries.js b/src/javascripts/ng-admin/es6/lib/Queries/ReadQueries.js index 6f0d7866..bfc915dc 100644 --- a/src/javascripts/ng-admin/es6/lib/Queries/ReadQueries.js +++ b/src/javascripts/ng-admin/es6/lib/Queries/ReadQueries.js @@ -1,6 +1,6 @@ import Queries from './Queries' -class RetrieveQueries extends Queries { +class ReadQueries extends Queries { /** * Get one entity @@ -233,4 +233,4 @@ class RetrieveQueries extends Queries { }; } -export default RetrieveQueries +export default ReadQueries diff --git a/src/javascripts/ng-admin/es6/tests/lib/Queries/ReadQueriesTest.js b/src/javascripts/ng-admin/es6/tests/lib/Queries/ReadQueriesTest.js new file mode 100644 index 00000000..083697b6 --- /dev/null +++ b/src/javascripts/ng-admin/es6/tests/lib/Queries/ReadQueriesTest.js @@ -0,0 +1,182 @@ +var assert = require('chai').assert; +var sinon = require('sinon'); + +import ReadQueries from "../../../lib/Queries/ReadQueries"; +import DataStore from "../../../lib/DataStore/DataStore"; +import PromisesResolver from "../../mock/PromisesResolver"; +import Entity from "../../../lib/Entity/Entity"; +import ReferenceField from "../../../lib/Field/ReferenceField"; +import TextField from "../../../lib/Field/TextField"; +import Field from "../../../lib/Field/Field"; +import buildPromise from "../../mock/mixins"; + +describe('ReadQueries', () => { + var readQueries, + restWrapper = {}, + application = {}, + rawCats, + rawHumans, + catEntity, + humanEntity, + catView; + + beforeEach(() => { + application = { + getRouteFor: (view, id) => { + let url = 'http://localhost/' + view.getEntity().name(); + if (id) { + url += '/' + id; + } + + return url; + } + }; + + readQueries = new ReadQueries(restWrapper, PromisesResolver, application); + catEntity = new Entity('cat'); + humanEntity = new Entity('human'); + catView = catEntity.views["ListView"] + .addField(new TextField('name')) + .addField(new ReferenceField('human_id').targetEntity(humanEntity).targetField(new Field('firstName'))); + + humanEntity.identifier(new Field('id')); + + rawCats = [ + {"id": 1, "human_id": 1, "name": "Mizoute", "summary": "A Cat"}, + {"id": 2, "human_id": 1, "name": "Suna", "summary": "A little Cat"} + ]; + + rawHumans = [ + {"id": 1, "firstName": "Daph"}, + {"id": 2, "firstName": "Manu"}, + {"id": 3, "firstName": "Daniel"} + ]; + }); + + describe("getOne", () => { + + it('should return the entity with all fields.', () => { + var entity = new Entity('cat'); + var view = entity.views['ListView'] + .addField(new Field('id').identifier(true)) + .addField(new TextField('name')); + + restWrapper.getOne = sinon.stub().returns(buildPromise({ + data: { + "id": 1, + "name": "Mizoute", + "summary": "A Cat" + } + })); + + readQueries.getOne(view, 1) + .then((rawEntry) => { + assert(restWrapper.getOne.calledWith('cat', 'http://localhost/cat/1')); + + assert.equal(rawEntry.data.id, 1); + assert.equal(rawEntry.data.name, 'Mizoute'); + + // Non mapped field should also be retrieved + assert.equal(rawEntry.data.summary, "A Cat"); + }); + }); + + }); + + describe('getAll', () => { + it('should return all data to display a ListView', () => { + restWrapper.getList = sinon.stub().returns(buildPromise({data: rawCats, headers: () => {}})); + PromisesResolver.allEvenFailed = sinon.stub().returns(buildPromise([ + {status: 'success', result: rawHumans[0] }, + {status: 'success', result: rawHumans[1] }, + {status: 'success', result: rawHumans[2] } + ])); + + readQueries.getAll(catView) + .then((result) => { + assert.equal(result.totalItems, 2); + assert.equal(result.data.length, 2); + + assert.equal(result.data[0].id, 1); + assert.equal(result.data[0].name, 'Mizoute'); + + assert.equal(result.data[0].human_id, 1); + }); + }); + }); + + describe('getReferencedData', () => { + it('should return all references data for a View with multiple calls', () => { + var post = new Entity('posts'), + author = new Entity('authors'), + authorRef = new ReferenceField('author'); + + var rawPosts = [ + {id: 1, author: 'abc'}, + {id: 2, author: '19DFE'} + ]; + + var rawAuthors = [ + {id: 'abc', name: 'Rollo'}, + {id: '19DFE', name: 'Ragna'} + ]; + + authorRef.targetEntity(author); + authorRef.targetField(new Field('name')); + post.views["ListView"] + .addField(authorRef); + + restWrapper.getOne = sinon.stub().returns(buildPromise({})); + PromisesResolver.allEvenFailed = sinon.stub().returns(buildPromise([ + {status: 'success', result: rawAuthors[0] }, + { status: 'success', result: rawAuthors[1] } + ])); + + readQueries.getReferencedData(post.views["ListView"].getReferences(), rawPosts) + .then((referencedData) => { + assert.equal(referencedData.author.length, 2); + assert.equal(referencedData.author[0].id, 'abc'); + assert.equal(referencedData.author[1].name, 'Ragna'); + }); + }); + + it('should return all references data for a View with one call', () => { + var post = new Entity('posts'), + author = new Entity('authors'), + authorRef = new ReferenceField('author'); + + authorRef.singleApiCall((ids) => { + return { + id: ids + }; + }); + + var rawPosts = [ + {id: 1, author: 'abc'}, + {id: 2, author: '19DFE'} + ]; + + var rawAuthors = [ + {id: 'abc', name: 'Rollo'}, + {id: '19DFE', name: 'Ragna'} + ]; + + authorRef.targetEntity(author); + authorRef.targetField(new Field('name')); + post.views["ListView"] + .addField(authorRef); + + restWrapper.getList = sinon.stub().returns(buildPromise({data: rawCats, headers: () => {}})); + PromisesResolver.allEvenFailed = sinon.stub().returns(buildPromise([ + {status: 'success', result: { data: rawAuthors }} + ])); + + readQueries.getReferencedData(post.views["ListView"].getReferences(), rawPosts) + .then((referencedData) => { + assert.equal(referencedData['author'].length, 2); + assert.equal(referencedData['author'][0].id, 'abc'); + assert.equal(referencedData['author'][1].name, 'Ragna'); + }); + }); + }); +}); diff --git a/src/javascripts/ng-admin/es6/tests/lib/Queries/WriteQueriesTest.js b/src/javascripts/ng-admin/es6/tests/lib/Queries/WriteQueriesTest.js index eb41a330..17c68a35 100644 --- a/src/javascripts/ng-admin/es6/tests/lib/Queries/WriteQueriesTest.js +++ b/src/javascripts/ng-admin/es6/tests/lib/Queries/WriteQueriesTest.js @@ -5,18 +5,17 @@ import WriteQueries from "../../../lib/Queries/WriteQueries"; import DataStore from "../../../lib/DataStore/DataStore"; import PromisesResolver from "../../mock/PromisesResolver"; import Entity from "../../../lib/Entity/Entity"; -import NumberField from "../../../lib/Field/NumberField"; import TextField from "../../../lib/Field/TextField"; import buildPromise from "../../mock/mixins"; -describe.only('WriteQueries', function() { +describe('WriteQueries', () => { var writeQueries, restWrapper = {}, application = {}, entity, view; - beforeEach(function() { + beforeEach(() => { application = { getRouteFor: (view, id) => { let url = 'http://localhost/' + view.getEntity().name(); @@ -31,11 +30,10 @@ describe.only('WriteQueries', function() { writeQueries = new WriteQueries(restWrapper, PromisesResolver, application); entity = new Entity('cat'); view = entity.views["CreateView"] - .addField(new NumberField('id').identifier(true)) .addField(new TextField('name')); }); - describe('createOne', function() { + describe('createOne', () => { it('should POST an entity when calling createOne', () => { var rawEntity = {name: 'Mizu'}; @@ -52,7 +50,7 @@ describe.only('WriteQueries', function() { }); }); - describe('updateOne', function() { + describe('updateOne', () => { var rawEntity = {id: 3, name: 'Mizu'}, updatedEntity = {id: 3, name: 'Mizute'}; @@ -81,7 +79,7 @@ describe.only('WriteQueries', function() { }); }); - describe("deleteOne", function () { + describe("deleteOne", () => { restWrapper.deleteOne = sinon.stub().returns(buildPromise({})); it('should DELETE an entity when calling deleteOne', () => { @@ -92,8 +90,8 @@ describe.only('WriteQueries', function() { }); }); - describe("batchDelete", function () { - it('should DELETE entities when calling batchEntities', function () { + describe("batchDelete", () => { + it('should DELETE entities when calling batchEntities', () => { restWrapper.deleteOne = sinon.stub().returns(buildPromise({})); writeQueries.batchDelete(view, [1, 2]) diff --git a/src/javascripts/test/unit/Crud/repository/DeleteQueriesSpec.js b/src/javascripts/test/unit/Crud/repository/DeleteQueriesSpec.js deleted file mode 100644 index 45672598..00000000 --- a/src/javascripts/test/unit/Crud/repository/DeleteQueriesSpec.js +++ /dev/null @@ -1,69 +0,0 @@ -/*global define,jasmine,angular,describe,it,expect,beforeEach*/ - -define(function (require) { - 'use strict'; - - var DeleteQueries = require('ng-admin/Crud/repository/DeleteQueries'), - Field = require('ng-admin/es6/lib/Field/Field'), - TextField = require('ng-admin/es6/lib/Field/TextField'), - Entity = require('ng-admin/es6/lib/Entity/Entity'), - Restangular = require('mock/Restangular'), - mixins = require('mixins'), - config, - entity, - view; - - describe("Service: DeleteQueries", function () { - - beforeEach(function () { - config = function () { - return { - baseApiUrl: angular.noop, - getQueryParamsFor: function () { - return null; - }, - getRouteFor: function (view, identyId) { - return 'http://localhost/' + view.getEntity().name() + (identyId ? '/' + identyId : ''); - } - }; - }; - - entity = new Entity('cat'); - view = entity.creationView() - .addField(new Field('id').identifier(true)) - .addField(new TextField('name')); - }); - - describe("deleteOne", function () { - it('should DELETE an entity when calling deleteone', function (done) { - var deleteQueries = new DeleteQueries({}, Restangular, config); - spyOn(Restangular, 'oneUrl').and.callThrough(); - spyOn(Restangular, 'customDELETE').and.callThrough(); - - deleteQueries.deleteOne(view, 1) - .then(function () { - expect(Restangular.oneUrl).toHaveBeenCalledWith('cat', 'http://localhost/cat/1'); - expect(Restangular.customDELETE).toHaveBeenCalledWith(); - }) - .then(done, done.fail); - }); - }); - - describe("batchDelete", function () { - it('should DELETE entities when calling batchEntities', function () { - var deleteQueries = new DeleteQueries({all: function (promises) { - return promises; - }}, Restangular, config); - spyOn(Restangular, 'oneUrl').and.callThrough(); - spyOn(Restangular, 'customDELETE').and.callThrough(); - - var promises = deleteQueries.batchDelete(view, [1, 2]); - expect(promises.length).toBe(2); - expect(Restangular.oneUrl).toHaveBeenCalledWith('cat', 'http://localhost/cat/1'); - expect(Restangular.oneUrl).toHaveBeenCalledWith('cat', 'http://localhost/cat/2'); - expect(Restangular.customDELETE).toHaveBeenCalledWith(); - expect(Restangular.customDELETE).toHaveBeenCalledWith(); - }); - }); - }); -}); diff --git a/src/javascripts/test/unit/Crud/repository/RetrieveQueriesSpec.js b/src/javascripts/test/unit/Crud/repository/RetrieveQueriesSpec.js deleted file mode 100644 index 6ae2167f..00000000 --- a/src/javascripts/test/unit/Crud/repository/RetrieveQueriesSpec.js +++ /dev/null @@ -1,242 +0,0 @@ -/*global define,jasmine,spyOn,angular,describe,it,expect,beforeEach*/ - -define(function (require) { - 'use strict'; - - var RetrieveQueries = require('ng-admin/Crud/repository/RetrieveQueries'), - Field = require('ng-admin/es6/lib/Field/Field'), - TextField = require('ng-admin/es6/lib/Field/TextField'), - Entity = require('ng-admin/es6/lib/Entity/Entity'), - ReferenceField = require('ng-admin/es6/lib/Field/ReferenceField'), - ReferencedListField = require('ng-admin/es6/lib/Field/ReferencedListField'), - Restangular = require('mock/Restangular'), - mixins = require('mixins'), - PromisesResolver = require('mock/PromisesResolver'), - $q = require('mock/q'), - config, - rawCats, - rawHumans, - catEntity, - humanEntity, - catView, - entity, - view; - - describe("Service: RetrieveQueries", function () { - - beforeEach(function () { - config = function () { - return { - baseApiUrl: angular.noop, - getRouteFor: function (view) { - return 'http://localhost/' + view.getEntity().name(); - } - }; - }; - - catEntity = new Entity('cat'); - humanEntity = new Entity('human'); - catView = catEntity.listView() - .addField(new Field('id').identifier(true)) - .addField(new TextField('name')) - .addField(new ReferenceField('human_id').targetEntity(humanEntity).targetField(new Field('firstName'))); - - humanEntity.identifier(new Field('id')); - - rawCats = [ - {"id": 1, "human_id": 1, "name": "Mizoute", "summary": "A Cat"}, - {"id": 2, "human_id": 1, "name": "Suna", "summary": "A little Cat"} - ]; - - rawHumans = [ - {"id": 1, "firstName": "Daph"}, - {"id": 2, "firstName": "Manu"}, - {"id": 3, "firstName": "Daniel"} - ]; - }); - - describe('getAll', function() { - it('should return all data to display a ListView', function (done) { - spyOn(Restangular, 'getList').and.returnValue(mixins.buildPromise({data: rawCats, headers: function() {}})); - spyOn(PromisesResolver, 'allEvenFailed').and.returnValue(mixins.buildPromise([{status: 'success', result: rawHumans[0] }, {status: 'success', result: rawHumans[1] }, {status: 'success', result: rawHumans[2] }])); - - var retrieveQueries = new RetrieveQueries($q, Restangular, config, PromisesResolver); - - retrieveQueries.getAll(catView) - .then(function (result) { - expect(result.totalItems).toEqual(2); - expect(result.data.length).toEqual(2); - - expect(result.data[0].id).toEqual(1); - expect(result.data[0].name).toEqual('Mizoute'); - - expect(result.data[0].human_id).toEqual(1); - }) - .then(done, done.fail); - }); - }); - - describe('getReferencedData', function() { - it('should return all references data for a View with multiple calls', function (done) { - var retrieveQueries = new RetrieveQueries($q, Restangular, config, PromisesResolver), - post = new Entity('posts'), - author = new Entity('authors'), - authorRef = new ReferenceField('author'); - - var rawPosts = [ - {id: 1, author: 'abc'}, - {id: 2, author: '19DFE'} - ]; - - var rawAuthors = [ - {id: 'abc', name: 'Rollo'}, - {id: '19DFE', name: 'Ragna'} - ]; - - authorRef.targetEntity(author); - authorRef.targetField(new Field('name')); - post.listView() - .addField(authorRef); - - spyOn(Restangular, 'get').and.returnValue(mixins.buildPromise(mixins.buildPromise({}))); - spyOn(PromisesResolver, 'allEvenFailed').and.returnValue(mixins.buildPromise([{status: 'success', result: rawAuthors[0] }, { status: 'success', result: rawAuthors[1] }])); - - retrieveQueries.getReferencedData(post.listView().getReferences(), rawPosts) - .then(function (referencedData) { - expect(referencedData.author.length).toEqual(2); - expect(referencedData.author[0].id).toEqual('abc'); - expect(referencedData.author[1].name).toEqual('Ragna'); - }) - .then(done, done.fail); - }); - - it('should return all references data for a View with one call', function (done) { - var retrieveQueries = new RetrieveQueries($q, Restangular, config, PromisesResolver), - post = new Entity('posts'), - author = new Entity('authors'), - authorRef = new ReferenceField('author'); - - authorRef.singleApiCall(function (ids) { - return { - id: ids - }; - }); - - var rawPosts = [ - {id: 1, author: 'abc'}, - {id: 2, author: '19DFE'} - ]; - - var rawAuthors = [ - {id: 'abc', name: 'Rollo'}, - {id: '19DFE', name: 'Ragna'} - ]; - - authorRef.targetEntity(author); - authorRef.targetField(new Field('name')); - post.listView() - .addField(authorRef); - - spyOn(Restangular, 'getList').and.returnValue(mixins.buildPromise(mixins.buildPromise({}))); - spyOn(PromisesResolver, 'allEvenFailed').and.returnValue(mixins.buildPromise([{status: 'success', result: { data: rawAuthors }}])); - - retrieveQueries.getReferencedData(post.listView().getReferences(), rawPosts) - .then(function (referencedData) { - expect(referencedData['author'].length).toEqual(2); - expect(referencedData['author'][0].id).toEqual('abc'); - expect(referencedData['author'][1].name).toEqual('Ragna'); - }) - .then(done, done.fail); - }); - }); - - describe('getReferencedListData', function() { - it('should return all referencedLists data for a View', function (done) { - var retrieveQueries = new RetrieveQueries($q, Restangular, config, PromisesResolver), - state = new Entity('states'), - stateId = new Field('id').identifier(true), - character = new Entity('characters'), - stateCharacters = new ReferencedListField('character'); - - var rawCharacters = [ - {id: 'abc', state_id: 1, name: 'Rollo', age: 35, eyes: 'blue'}, - {id: '19DFE', state_id: 1, name: 'Ragna', age: 33, eyes: 'brown'}, - {id: '1G53a', state_id: 2, name: 'Aelle', age: 45, eyes: 'brown'} - ]; - - stateCharacters - .targetReferenceField('state_id') - .targetFields([ - new Field('id'), - new Field('name'), - new Field('state_id') - ]) - .targetEntity(character); - - state.listView() - .addField(stateId) - .addField(stateCharacters); - - spyOn(Restangular, 'getList').and.returnValue(mixins.buildPromise(mixins.buildPromise({data: rawCharacters}))); - spyOn($q, 'all').and.returnValue(mixins.buildPromise([{data: rawCharacters}])); - - retrieveQueries.getReferencedListData(state.listView().getReferencedLists(), null, null, 1) - .then(function (referencedListData) { - expect(referencedListData.character.length).toEqual(3); - expect(referencedListData.character[0].name).toEqual('Rollo'); - expect(referencedListData.character[1].id).toEqual('19DFE'); - }) - .then(done, done.fail); - }); - }); - - describe("getOne", function () { - - beforeEach(function () { - config = function () { - return { - baseApiUrl: angular.noop, - getQueryParamsFor: function (view, params) { - return params; - }, - getRouteFor: function (view, identyId) { - return 'http://localhost/' + view.getEntity().name() + (identyId ? '/' + identyId : ''); - } - }; - }; - - entity = new Entity('cat'); - view = entity.creationView() - .addField(new Field('id').identifier(true)) - .addField(new TextField('name')); - }); - - it('should return the entity with all fields.', function (done) { - spyOn(Restangular, 'oneUrl').and.callThrough(); - spyOn(Restangular, 'get').and.returnValue(mixins.buildPromise({ - data: { - "id": 1, - "name": "Mizoute", - "summary": "A Cat" - } - })); - - var retrieveQueries = new RetrieveQueries({}, Restangular, config, PromisesResolver); - - retrieveQueries.getOne(view, 1) - .then(function (rawEntry) { - expect(Restangular.oneUrl).toHaveBeenCalledWith('cat', 'http://localhost/cat/1'); - expect(Restangular.get).toHaveBeenCalledWith(); - - expect(rawEntry.id).toBe(1); - expect(rawEntry.name).toBe('Mizoute'); - - // Non mapped field should also be retrieved - expect(rawEntry.summary).toBe("A Cat"); - }) - .then(done, done.fail); - }); - - }); - }); -});