UNPKG

ra-data-graphql-simple

Version:

A GraphQL simple data provider for react-admin

349 lines (319 loc) 9.72 kB
import { GET_LIST, GET_MANY, GET_MANY_REFERENCE, CREATE, UPDATE, DELETE, DELETE_MANY, UPDATE_MANY, } from 'ra-core'; import buildVariables from './buildVariables'; describe('buildVariables', () => { const introspectionResult = { types: [ { name: 'PostFilter', inputFields: [{ name: 'tags_some' }], }, ], }; describe('GET_LIST', () => { it('returns correct variables', () => { const params = { filter: { ids: ['foo1', 'foo2'], tags: { id: ['tag1', 'tag2'] }, 'author.id': 'author1', views: 100, }, pagination: { page: 10, perPage: 10 }, sort: { field: 'sortField', order: 'DESC' }, }; expect( buildVariables(introspectionResult)( { type: { name: 'Post', fields: [] } }, GET_LIST, params, {} ) ).toEqual({ filter: { ids: ['foo1', 'foo2'], tags_some: { id_in: ['tag1', 'tag2'] }, author: { id: 'author1' }, views: 100, }, page: 9, perPage: 10, sortField: 'sortField', sortOrder: 'DESC', }); }); it('should return correct meta', () => { const params = { filter: { views: 100 }, meta: { sparseFields: ['field'] }, }; expect( buildVariables(introspectionResult)( { type: { name: 'Post', fields: [] } }, GET_LIST, params, {} ) ).toEqual({ filter: { views: 100 }, meta: { sparseFields: ['field'] }, }); }); }); describe('CREATE', () => { it('returns correct variables', () => { const params = { data: { author: { id: 'author1' }, tags: [{ id: 'tag1' }, { id: 'tag2' }], title: 'Foo', }, }; const queryType = { args: [{ name: 'tagsIds' }, { name: 'authorId' }], }; expect( buildVariables(introspectionResult)( { type: { name: 'Post' } }, CREATE, params, queryType ) ).toEqual({ authorId: 'author1', tagsIds: ['tag1', 'tag2'], title: 'Foo', }); }); it('should return correct meta', () => { const params = { data: { title: 'Foo' }, meta: { sparseFields: ['field'] }, }; const queryType = { args: [], }; expect( buildVariables(introspectionResult)( { type: { name: 'Post' } }, CREATE, params, queryType ) ).toEqual({ title: 'Foo', meta: { sparseFields: ['field'] }, }); }); }); describe('UPDATE', () => { it('returns correct variables', () => { const params = { id: 'post1', data: { author: { id: 'author1' }, tags: [{ id: 'tag1' }, { id: 'tag2' }], title: 'Foo', }, }; const queryType = { args: [{ name: 'tagsIds' }, { name: 'authorId' }], }; expect( buildVariables(introspectionResult)( { type: { name: 'Post' } }, UPDATE, params, queryType ) ).toEqual({ id: 'post1', authorId: 'author1', tagsIds: ['tag1', 'tag2'], title: 'Foo', }); }); it('should return correct meta', () => { const params = { id: 'post1', data: { title: 'Foo' }, meta: { sparseFields: ['field'] }, }; const queryType = { args: [], }; expect( buildVariables(introspectionResult)( { type: { name: 'Post' } }, UPDATE, params, queryType ) ).toEqual({ id: 'post1', title: 'Foo', meta: { sparseFields: ['field'] }, }); }); }); describe('GET_MANY', () => { it('returns correct variables', () => { const params = { ids: ['tag1', 'tag2'], }; expect( buildVariables(introspectionResult)( { type: { name: 'Post' } }, GET_MANY, params, {} ) ).toEqual({ filter: { ids: ['tag1', 'tag2'] }, }); }); it('should return correct meta', () => { const params = { ids: ['tag1'], meta: { sparseFields: ['field'] }, }; expect( buildVariables(introspectionResult)( { type: { name: 'Post' } }, GET_MANY, params, {} ) ).toEqual({ filter: { ids: ['tag1'], }, meta: { sparseFields: ['field'] }, }); }); }); describe('GET_MANY_REFERENCE', () => { it('returns correct variables', () => { const params = { target: 'author_id', id: 'author1', pagination: { page: 1, perPage: 10 }, sort: { field: 'name', order: 'ASC' }, }; expect( buildVariables(introspectionResult)( { type: { name: 'Post' } }, GET_MANY_REFERENCE, params, {} ) ).toEqual({ filter: { author_id: 'author1' }, page: 0, perPage: 10, sortField: 'name', sortOrder: 'ASC', }); }); it('should return correct meta', () => { const params = { target: 'author_id', id: 'author1', meta: { sparseFields: ['field'] }, }; expect( buildVariables(introspectionResult)( { type: { name: 'Post' } }, GET_MANY_REFERENCE, params, {} ) ).toEqual({ filter: { author_id: 'author1' }, meta: { sparseFields: ['field'] }, }); }); }); describe('DELETE', () => { it('returns correct variables', () => { const params = { id: 'post1', }; expect( buildVariables(introspectionResult)( { type: { name: 'Post', inputFields: [] } }, DELETE, params, {} ) ).toEqual({ id: 'post1', }); }); it('should return correct meta', () => { const params = { id: 'post1', meta: { sparseFields: ['field'] }, }; expect( buildVariables(introspectionResult)( { type: { name: 'Post', inputFields: [] } }, DELETE, params, {} ) ).toEqual({ id: 'post1', meta: { sparseFields: ['field'] }, }); }); }); describe('DELETE_MANY', () => { it('returns correct variables', () => { const params = { ids: ['post1'], }; expect( buildVariables(introspectionResult)( { type: { name: 'Post', inputFields: [] } }, DELETE_MANY, params, {} ) ).toEqual({ ids: ['post1'], }); }); }); describe('UPDATE_MANY', () => { it('returns correct variables', () => { const params = { ids: ['post1', 'post2'], data: { title: 'New Title', }, }; expect( buildVariables(introspectionResult)( { type: { name: 'Post', inputFields: [] } }, UPDATE_MANY, params, {} ) ).toEqual({ ids: ['post1', 'post2'], data: { title: 'New Title', }, }); }); }); });