Пример #1
0
    beforeEach('Init Model and Schema', function() {
        sinon.spy(router, 'route');

        gstore.models       = {};
        gstore.modelSchemas = {};

        schema = new gstore.Schema({
            title : {type:'string'}
        }, {
            queries : {
                simplifyResult : false
            }
        });

        Model = gstore.model('BlogPost', schema);

        req = {
            params:{id:123, anc0ID:'ancestor1', anc1ID:'ancestor2'},
            query : {},
            body:{title:'Blog Title'},
            get : () => 'http://localhost',
            originalUrl : ''
        };
        res = {
            status:() => {
                return {json:() => {}}
            },
            set : () => {},
            json:() => {}
        };

        sinon.spy(res, 'json');
        sinon.spy(errorsHandler, 'rpcError');
        sinon.spy(entity, 'plain');
    });
Пример #2
0
    beforeEach('Init Model and Schema', () => {
        sinon.spy(router, 'route');

        gstore.models = {};
        gstore.modelSchemas = {};

        schema = new gstore.Schema({
            title: { type: 'string' },
        }, {
            queries: {
                showKey: true,
            },
        });

        Model = gstore.model('BlogPost', schema);

        req = {
            params: { id: 123, anc0ID: 'ancestor1', anc1ID: 'ancestor2' },
            query: {},
            body: { title: 'Blog Title' },
            get: () => 'http://localhost',
            originalUrl: '',
        };

        res = {
            status: () => ({ json: () => {}, send: () => {} }),
            set: () => {},
            json: () => {},
            location: () => {},
        };

        sinon.spy(res, 'json');
        sinon.spy(res, 'location');
        sinon.spy(res, 'status');
        sinon.spy(errorsHandler, 'rpcError');
        sinon.spy(entity, 'plain');
    });
Пример #3
0
    describe('create()', () => {
        var entity;

        schema = new gstore.Schema({
            title : {type:'stirng'}
        }, {
            queries : {
                simplifyResult : false
            }
        });

        Model = gstore.model('Blog', schema);

        var namespace = {Model: Model};

        beforeEach(function() {
            entity = new Model(req.body);

            sinon.stub(entity, 'save', function(cb) {
                return cb(null, entity);
            });

            sinon.stub(entity, 'plain').returns(0);

            sinon.stub(namespace, 'Model', function() {
                return entity;
            });

            namespace.Model.sanitize = function() {};
        });

        afterEach(function() {
            entity.save.restore();
            entity.plain.restore();
            namespace.Model.restore();
        });

        it('should call save on Model', () => {
            var dsApi = new gstoreApi(namespace.Model, {path:'/users'});

            dsApi.create(req, res, entity);

            expect(entity.save.called).be.true;
            expect(res.json.called).be.true;
            expect(entity.plain.called).be.false;
        });

        it('should pass ancestors param', () => {
            var dsApi = new gstoreApi(namespace.Model, {path:'/users', ancestors:['GrandFather', 'Dad']});

            dsApi.create(req, res);

            expect(namespace.Model.getCall(0).args[2]).deep.equal(['GrandFather', 'ancestor1', 'Dad', 'ancestor2']);
        });

        it('should execute action from settings', () => {
            var settings = {
                path:'/users',
                op : {
                    create : {
                        fn : () => true
                    }
                }
            };
            sinon.spy(settings.op.create, 'fn');
            var dsApi = new gstoreApi(namespace.Model, settings, router);

            dsApi.create(req, res);

            expect(settings.op.create.fn.called).be.true;
        });

        it('should read options', () => {
            var settings = {
                path:'/users',
                op : {
                    create : {
                        options : {readAll:true, simplifyResult:true}
                    }
                }
            };

            var dsApi = new gstoreApi(namespace.Model, settings, router);

            dsApi.create(req, res);

            expect(entity.plain.called).be.true;
            expect(entity.plain.getCall(0).args[0]).deep.equal({readAll:true});
        });

        it('should deal with error', () => {
            entity.save.restore();
            var error = {code:500, message:'Houston we got a problem'};

            sinon.stub(entity, 'save', function(cb) {
                return cb(error);
            });

            var dsApi = new gstoreApi(namespace.Model, {path:'/users'});
            dsApi.create(req, res);

            var args = errorsHandler.rpcError.getCall(0).args;
            expect(args[0]).equal(error);
            expect(args[1]).equal(res);
        });
    });
Пример #4
0
    describe('create()', () => {
        let myEntity;

        schema = new gstore.Schema({
            title: { type: 'stirng' },
        }, {
            queries: {
                simplifyResult: false,
            },
        });

        Model = gstore.model('Blog', schema);

        const namespace = { Model };

        beforeEach(() => {
            myEntity = new Model(req.body);

            sinon.stub(myEntity, 'save').resolves(myEntity);
            sinon.stub(myEntity, 'plain').returns(0);
            sinon.stub(namespace, 'Model').returns(myEntity);

            namespace.Model.sanitize = function sanitize() {};
        });

        afterEach(() => {
            myEntity.save.restore();
            namespace.Model.restore();
        });

        it('should call save on Model', () => {
            const routerRef = apiBuilder.create(namespace.Model, { path: '/users' });

            return routerRef.__gstoreApi.create(req, res)
                    .then(() => {
                        expect(myEntity.save.called).equal(true);
                        expect(res.location.called).equal(true);
                        expect(res.status.called).equal(true);
                        expect(myEntity.plain.called).equal(true);
                    });
        });

        it('should pass ancestors param', () => {
            const routerRef = apiBuilder.create(namespace.Model, { path: '/users', ancestors: ['GrandFather', 'Dad'] });

            routerRef.__gstoreApi.create(req, res);

            expect(namespace.Model.getCall(0).args[2]).deep.equal(['GrandFather', 'ancestor1', 'Dad', 'ancestor2']);
        });

        it('should execute action from settings', () => {
            const settings = {
                path: '/users',
                operations: {
                    create: {
                        handler: () => true,
                    },
                },
            };
            sinon.spy(settings.operations.create, 'handler');
            const routerRef = apiBuilder.create(namespace.Model, settings);

            routerRef.__gstoreApi.create(req, res);

            expect(settings.operations.create.handler.called).equal(true);
        });

        it('should read options', () => {
            const settings = {
                path: '/users',
                operations: {
                    create: {
                        options: { readAll: true, showKey: false },
                    },
                },
            };

            const routerRef = apiBuilder.create(namespace.Model, settings);

            return routerRef.__gstoreApi.create(req, res)
                        .then(() => {
                            expect(myEntity.plain.called).equal(true);
                            expect(myEntity.plain.getCall(0).args[0]).deep.equal({ readAll: true, showKey: false });
                        });
        });

        it('should deal with error', () => {
            myEntity.save.restore();
            const error = { code: 500, message: 'Houston we got a problem' };

            sinon.stub(myEntity, 'save').rejects(error);

            const routerRef = apiBuilder.create(namespace.Model, { path: '/users' });
            return routerRef.__gstoreApi.create(req, res)
                        .then(() => {
                            const args = errorsHandler.rpcError.getCall(0).args;
                            expect(args[0]).equal(error);
                            expect(args[1]).equal(res);
                        });
        });

        it('should return 500 if uploading file without handler', () => {
            const req2 = extend(true, {}, req);
            req2.file = new Buffer('string');

            const routerRef = apiBuilder.create(namespace.Model);
            routerRef.__gstoreApi.create(req2, res);

            expect(res.status.called).equal(true);
            expect(res.status.getCall(0).args[0]).equal(500);
        });
    });