Use class extension, add all basic handlers

This commit is contained in:
rijkvanzanten
2020-10-27 13:44:54 +01:00
parent 553e408611
commit cc95696975
22 changed files with 302 additions and 318 deletions

View File

@@ -37,11 +37,12 @@
- [ ] Read
- [ ] Update
- [ ] Delete
- [ ] Files
- [ ] Create (upload)
- [ ] Read
- [ ] Update
- [ ] Delete
- [x] Files
- [x] Create
- [x] Read
- [x] Update
- [x] Delete
- [ ] Upload
- [x] Folders
- [x] Create
- [x] Read
@@ -54,39 +55,39 @@
- [x] Read
- [x] Update
- [x] Delete
- [ ] Presets
- [ ] Create
- [ ] Read
- [ ] Update
- [ ] Delete
- [ ] Relations
- [ ] Create
- [ ] Read
- [ ] Update
- [ ] Delete
- [ ] Revisions
- [ ] Create
- [ ] Read
- [ ] Update
- [ ] Delete
- [ ] Roles
- [ ] Create
- [ ] Read
- [ ] Update
- [ ] Delete
- [x] Presets
- [x] Create
- [x] Read
- [x] Update
- [x] Delete
- [x] Relations
- [x] Create
- [x] Read
- [x] Update
- [x] Delete
- [x] Revisions
- [x] Create
- [x] Read
- [x] Update
- [x] Delete
- [x] Roles
- [x] Create
- [x] Read
- [x] Update
- [x] Delete
- [x] Server
- [x] Specs
- [x] OAS
- [x] Ping
- [x] Info
- [ ] Settings
- [ ] Read
- [ ] Update
- [ ] Users
- [ ] Create
- [ ] Read
- [ ] Update
- [ ] Delete
- [x] Settings
- [x] Read
- [x] Update
- [x] Users
- [x] Create
- [x] Read
- [x] Update
- [x] Delete
- [ ] Invite
- [ ] Accept Invite
- [ ] Enable TFA

View File

@@ -0,0 +1,8 @@
import { AxiosInstance } from 'axios';
import { ItemsHandler } from './items';
export class FilesHandler extends ItemsHandler {
constructor(axios: AxiosInstance) {
super('directus_files', axios);
}
}

View File

@@ -1,49 +1,8 @@
import { Query, Item, Payload, Response, PrimaryKey } from '../types';
import { AxiosInstance } from 'axios';
import { ItemsHandler } from './items';
export class FoldersHandler {
private itemsHandler: ItemsHandler;
export class FoldersHandler extends ItemsHandler {
constructor(axios: AxiosInstance) {
this.itemsHandler = new ItemsHandler('directus_folders', axios);
}
async create(payload: Payload, query?: Query): Promise<Response<Item>>;
async create(payloads: Payload[], query?: Query): Promise<Response<Item | Item[]>>;
async create(payloads: Payload | Payload[], query?: Query): Promise<Response<Item | Item[]>> {
return await this.itemsHandler.create(payloads, query);
}
async read(query?: Query): Promise<Response<Item | Item[]>>;
async read(key: PrimaryKey, query?: Query): Promise<Response<Item>>;
async read(keys: PrimaryKey[], query?: Query): Promise<Response<Item | Item[]>>;
async read(
keysOrQuery?: PrimaryKey | PrimaryKey[] | Query,
query?: Query & { single: boolean }
): Promise<Response<Item | Item[]>> {
return await this.itemsHandler.read(keysOrQuery as any, query);
}
async update(key: PrimaryKey, payload: Payload, query?: Query): Promise<Response<Item>>;
async update(keys: PrimaryKey[], payload: Payload, query?: Query): Promise<Response<Item[]>>;
async update(payload: Payload[], query?: Query): Promise<Response<Item[]>>;
async update(payload: Payload, query: Query): Promise<Response<Item[]>>;
async update(
keyOrPayload: PrimaryKey | PrimaryKey[] | Payload | Payload[],
payloadOrQuery?: Payload | Query,
query?: Query
): Promise<Response<Item | Item[]>> {
return await this.itemsHandler.update(
keyOrPayload as any,
payloadOrQuery as any,
query as any
);
}
async delete(key: PrimaryKey): Promise<void>;
async delete(keys: PrimaryKey[]): Promise<void>;
async delete(keys: PrimaryKey | PrimaryKey[]): Promise<void> {
return await this.itemsHandler.delete(keys as any);
super('directus_folders', axios);
}
}

View File

@@ -5,3 +5,9 @@ export * from './activity';
export * from './folders';
export * from './permissions';
export * from './presets';
export * from './relations';
export * from './revisions';
export * from './roles';
export * from './users';
export * from './settings';
export * from './files';

View File

@@ -1,49 +1,8 @@
import { Query, Item, Payload, Response, PrimaryKey } from '../types';
import { AxiosInstance } from 'axios';
import { ItemsHandler } from './items';
export class PermissionsHandler {
private itemsHandler: ItemsHandler;
export class PermissionsHandler extends ItemsHandler {
constructor(axios: AxiosInstance) {
this.itemsHandler = new ItemsHandler('directus_permissions', axios);
}
async create(payload: Payload, query?: Query): Promise<Response<Item>>;
async create(payloads: Payload[], query?: Query): Promise<Response<Item | Item[]>>;
async create(payloads: Payload | Payload[], query?: Query): Promise<Response<Item | Item[]>> {
return await this.itemsHandler.create(payloads, query);
}
async read(query?: Query): Promise<Response<Item | Item[]>>;
async read(key: PrimaryKey, query?: Query): Promise<Response<Item>>;
async read(keys: PrimaryKey[], query?: Query): Promise<Response<Item | Item[]>>;
async read(
keysOrQuery?: PrimaryKey | PrimaryKey[] | Query,
query?: Query & { single: boolean }
): Promise<Response<Item | Item[]>> {
return await this.itemsHandler.read(keysOrQuery as any, query);
}
async update(key: PrimaryKey, payload: Payload, query?: Query): Promise<Response<Item>>;
async update(keys: PrimaryKey[], payload: Payload, query?: Query): Promise<Response<Item[]>>;
async update(payload: Payload[], query?: Query): Promise<Response<Item[]>>;
async update(payload: Payload, query: Query): Promise<Response<Item[]>>;
async update(
keyOrPayload: PrimaryKey | PrimaryKey[] | Payload | Payload[],
payloadOrQuery?: Payload | Query,
query?: Query
): Promise<Response<Item | Item[]>> {
return await this.itemsHandler.update(
keyOrPayload as any,
payloadOrQuery as any,
query as any
);
}
async delete(key: PrimaryKey): Promise<void>;
async delete(keys: PrimaryKey[]): Promise<void>;
async delete(keys: PrimaryKey | PrimaryKey[]): Promise<void> {
return await this.itemsHandler.delete(keys as any);
super('directus_permissions', axios);
}
}

View File

@@ -1,49 +1,8 @@
import { Query, Item, Payload, Response, PrimaryKey } from '../types';
import { AxiosInstance } from 'axios';
import { ItemsHandler } from './items';
export class PresetsHandler {
private itemsHandler: ItemsHandler;
export class PresetsHandler extends ItemsHandler {
constructor(axios: AxiosInstance) {
this.itemsHandler = new ItemsHandler('directus_presets', axios);
}
async create(payload: Payload, query?: Query): Promise<Response<Item>>;
async create(payloads: Payload[], query?: Query): Promise<Response<Item | Item[]>>;
async create(payloads: Payload | Payload[], query?: Query): Promise<Response<Item | Item[]>> {
return await this.itemsHandler.create(payloads, query);
}
async read(query?: Query): Promise<Response<Item | Item[]>>;
async read(key: PrimaryKey, query?: Query): Promise<Response<Item>>;
async read(keys: PrimaryKey[], query?: Query): Promise<Response<Item | Item[]>>;
async read(
keysOrQuery?: PrimaryKey | PrimaryKey[] | Query,
query?: Query & { single: boolean }
): Promise<Response<Item | Item[]>> {
return await this.itemsHandler.read(keysOrQuery as any, query);
}
async update(key: PrimaryKey, payload: Payload, query?: Query): Promise<Response<Item>>;
async update(keys: PrimaryKey[], payload: Payload, query?: Query): Promise<Response<Item[]>>;
async update(payload: Payload[], query?: Query): Promise<Response<Item[]>>;
async update(payload: Payload, query: Query): Promise<Response<Item[]>>;
async update(
keyOrPayload: PrimaryKey | PrimaryKey[] | Payload | Payload[],
payloadOrQuery?: Payload | Query,
query?: Query
): Promise<Response<Item | Item[]>> {
return await this.itemsHandler.update(
keyOrPayload as any,
payloadOrQuery as any,
query as any
);
}
async delete(key: PrimaryKey): Promise<void>;
async delete(keys: PrimaryKey[]): Promise<void>;
async delete(keys: PrimaryKey | PrimaryKey[]): Promise<void> {
return await this.itemsHandler.delete(keys as any);
super('directus_presets', axios);
}
}

View File

@@ -0,0 +1,8 @@
import { AxiosInstance } from 'axios';
import { ItemsHandler } from './items';
export class RelationsHandler extends ItemsHandler {
constructor(axios: AxiosInstance) {
super('directus_relations', axios);
}
}

View File

@@ -0,0 +1,8 @@
import { AxiosInstance } from 'axios';
import { ItemsHandler } from './items';
export class RevisionsHandler extends ItemsHandler {
constructor(axios: AxiosInstance) {
super('directus_revisions', axios);
}
}

View File

@@ -0,0 +1,8 @@
import { AxiosInstance } from 'axios';
import { ItemsHandler } from './items';
export class RolesHandler extends ItemsHandler {
constructor(axios: AxiosInstance) {
super('directus_roles', axios);
}
}

View File

@@ -0,0 +1,8 @@
import { AxiosInstance } from 'axios';
import { ItemsHandler } from './items';
export class SettingsHandler extends ItemsHandler {
constructor(axios: AxiosInstance) {
super('directus_settings', axios);
}
}

View File

@@ -0,0 +1,8 @@
import { AxiosInstance } from 'axios';
import { ItemsHandler } from './items';
export class UsersHandler extends ItemsHandler {
constructor(axios: AxiosInstance) {
super('directus_users', axios);
}
}

View File

@@ -7,6 +7,10 @@ import {
FoldersHandler,
PermissionsHandler,
PresetsHandler,
RolesHandler,
UsersHandler,
SettingsHandler,
FilesHandler,
} from './handlers';
export default class DirectusSDK {
@@ -57,4 +61,20 @@ export default class DirectusSDK {
get presets() {
return new PresetsHandler(this.axios);
}
get roles() {
return new RolesHandler(this.axios);
}
get users() {
return new UsersHandler(this.axios);
}
get settings() {
return new SettingsHandler(this.axios);
}
get files() {
return new FilesHandler(this.axios);
}
}

View File

@@ -0,0 +1,27 @@
import { FilesHandler, ItemsHandler } from '../../src/handlers';
import axios, { AxiosInstance } from 'axios';
import sinon, { SinonSandbox } from 'sinon';
import chai, { expect } from 'chai';
import sinonChai from 'sinon-chai';
chai.use(sinonChai);
describe('FilesHandler', () => {
let sandbox: SinonSandbox;
let axiosInstance: AxiosInstance;
let handler: FilesHandler;
beforeEach(() => {
sandbox = sinon.createSandbox();
axiosInstance = axios.create();
handler = new FilesHandler(axiosInstance);
});
afterEach(() => {
sandbox.restore();
});
it('Extends ItemsHandler', () => {
expect(handler).to.be.instanceOf(ItemsHandler);
});
});

View File

@@ -21,57 +21,7 @@ describe('FoldersHandler', () => {
sandbox.restore();
});
describe('constructor', () => {
it('Initializes ItemHandler instance', () => {
expect(handler['itemsHandler']).to.be.instanceOf(ItemsHandler);
});
});
describe('create', () => {
it('Calls ItemsHandler#create with the provided params', async () => {
const stub = sandbox
.stub(handler['itemsHandler'], 'create')
.returns(Promise.resolve({ data: {} }));
await handler.create({ folder: 'test' });
expect(stub).to.have.been.calledWith({ folder: 'test' });
await handler.create([{ folder: 'test' }]);
expect(stub).to.have.been.calledWith([{ folder: 'test' }]);
await handler.create({ folder: 'test' }, { fields: ['id'] });
expect(stub).to.have.been.calledWith({ folder: 'test' }, { fields: ['id'] });
});
});
describe('read', () => {
it('Calls ItemsHandler#read with the provided params', async () => {
const stub = sandbox
.stub(handler['itemsHandler'], 'read')
.returns(Promise.resolve({ data: {} }));
await handler.read();
expect(stub).to.have.been.calledWith();
});
});
describe('update', () => {
it('Calls ItemsHandler#update with the provided params', async () => {
const stub = sandbox
.stub(handler['itemsHandler'], 'update')
.returns(Promise.resolve({ data: [{}] }));
await handler.update(15, { folder: 'updated name' });
expect(stub).to.have.been.calledWith(15, { folder: 'updated name' });
});
});
describe('delete', () => {
it('Calls ItemsHandler#delete with the provided params', async () => {
const stub = sandbox.stub(handler['itemsHandler'], 'delete').returns(Promise.resolve());
await handler.delete(15);
expect(stub).to.have.been.calledWith(15);
});
it('Extends ItemsHandler', () => {
expect(handler).to.be.instanceOf(ItemsHandler);
});
});

View File

@@ -21,57 +21,7 @@ describe('PermissionsHandler', () => {
sandbox.restore();
});
describe('constructor', () => {
it('Initializes ItemHandler instance', () => {
expect(handler['itemsHandler']).to.be.instanceOf(ItemsHandler);
});
});
describe('create', () => {
it('Calls ItemsHandler#create with the provided params', async () => {
const stub = sandbox
.stub(handler['itemsHandler'], 'create')
.returns(Promise.resolve({ data: {} }));
await handler.create({ permissions: 'test' });
expect(stub).to.have.been.calledWith({ permissions: 'test' });
await handler.create([{ permissions: 'test' }]);
expect(stub).to.have.been.calledWith([{ permissions: 'test' }]);
await handler.create({ permissions: 'test' }, { fields: ['id'] });
expect(stub).to.have.been.calledWith({ permissions: 'test' }, { fields: ['id'] });
});
});
describe('read', () => {
it('Calls ItemsHandler#read with the provided params', async () => {
const stub = sandbox
.stub(handler['itemsHandler'], 'read')
.returns(Promise.resolve({ data: {} }));
await handler.read();
expect(stub).to.have.been.calledWith();
});
});
describe('update', () => {
it('Calls ItemsHandler#update with the provided params', async () => {
const stub = sandbox
.stub(handler['itemsHandler'], 'update')
.returns(Promise.resolve({ data: [{}] }));
await handler.update(15, { permissions: 'updated name' });
expect(stub).to.have.been.calledWith(15, { permissions: 'updated name' });
});
});
describe('delete', () => {
it('Calls ItemsHandler#delete with the provided params', async () => {
const stub = sandbox.stub(handler['itemsHandler'], 'delete').returns(Promise.resolve());
await handler.delete(15);
expect(stub).to.have.been.calledWith(15);
});
it('Extends ItemsHandler', () => {
expect(handler).to.be.instanceOf(ItemsHandler);
});
});

View File

@@ -21,57 +21,7 @@ describe('PresetsHandler', () => {
sandbox.restore();
});
describe('constructor', () => {
it('Initializes ItemHandler instance', () => {
expect(handler['itemsHandler']).to.be.instanceOf(ItemsHandler);
});
});
describe('create', () => {
it('Calls ItemsHandler#create with the provided params', async () => {
const stub = sandbox
.stub(handler['itemsHandler'], 'create')
.returns(Promise.resolve({ data: {} }));
await handler.create({ layout: 'test' });
expect(stub).to.have.been.calledWith({ layout: 'test' });
await handler.create([{ layout: 'test' }]);
expect(stub).to.have.been.calledWith([{ layout: 'test' }]);
await handler.create({ layout: 'test' }, { fields: ['id'] });
expect(stub).to.have.been.calledWith({ layout: 'test' }, { fields: ['id'] });
});
});
describe('read', () => {
it('Calls ItemsHandler#read with the provided params', async () => {
const stub = sandbox
.stub(handler['itemsHandler'], 'read')
.returns(Promise.resolve({ data: {} }));
await handler.read();
expect(stub).to.have.been.calledWith();
});
});
describe('update', () => {
it('Calls ItemsHandler#update with the provided params', async () => {
const stub = sandbox
.stub(handler['itemsHandler'], 'update')
.returns(Promise.resolve({ data: [{}] }));
await handler.update(15, { layout: 'updated name' });
expect(stub).to.have.been.calledWith(15, { layout: 'updated name' });
});
});
describe('delete', () => {
it('Calls ItemsHandler#delete with the provided params', async () => {
const stub = sandbox.stub(handler['itemsHandler'], 'delete').returns(Promise.resolve());
await handler.delete(15);
expect(stub).to.have.been.calledWith(15);
});
it('Extends ItemsHandler', () => {
expect(handler).to.be.instanceOf(ItemsHandler);
});
});

View File

@@ -0,0 +1,27 @@
import { RelationsHandler, ItemsHandler } from '../../src/handlers';
import axios, { AxiosInstance } from 'axios';
import sinon, { SinonSandbox } from 'sinon';
import chai, { expect } from 'chai';
import sinonChai from 'sinon-chai';
chai.use(sinonChai);
describe('RelationsHandler', () => {
let sandbox: SinonSandbox;
let axiosInstance: AxiosInstance;
let handler: RelationsHandler;
beforeEach(() => {
sandbox = sinon.createSandbox();
axiosInstance = axios.create();
handler = new RelationsHandler(axiosInstance);
});
afterEach(() => {
sandbox.restore();
});
it('Extends ItemsHandler', () => {
expect(handler).to.be.instanceOf(ItemsHandler);
});
});

View File

@@ -0,0 +1,27 @@
import { RevisionsHandler, ItemsHandler } from '../../src/handlers';
import axios, { AxiosInstance } from 'axios';
import sinon, { SinonSandbox } from 'sinon';
import chai, { expect } from 'chai';
import sinonChai from 'sinon-chai';
chai.use(sinonChai);
describe('RevisionsHandler', () => {
let sandbox: SinonSandbox;
let axiosInstance: AxiosInstance;
let handler: RevisionsHandler;
beforeEach(() => {
sandbox = sinon.createSandbox();
axiosInstance = axios.create();
handler = new RevisionsHandler(axiosInstance);
});
afterEach(() => {
sandbox.restore();
});
it('Extends ItemsHandler', () => {
expect(handler).to.be.instanceOf(ItemsHandler);
});
});

View File

@@ -0,0 +1,27 @@
import { PresetsHandler, ItemsHandler } from '../../src/handlers';
import axios, { AxiosInstance } from 'axios';
import sinon, { SinonSandbox } from 'sinon';
import chai, { expect } from 'chai';
import sinonChai from 'sinon-chai';
chai.use(sinonChai);
describe('PresetsHandler', () => {
let sandbox: SinonSandbox;
let axiosInstance: AxiosInstance;
let handler: PresetsHandler;
beforeEach(() => {
sandbox = sinon.createSandbox();
axiosInstance = axios.create();
handler = new PresetsHandler(axiosInstance);
});
afterEach(() => {
sandbox.restore();
});
it('Extends ItemsHandler', () => {
expect(handler).to.be.instanceOf(ItemsHandler);
});
});

View File

@@ -0,0 +1,27 @@
import { SettingsHandler, ItemsHandler } from '../../src/handlers';
import axios, { AxiosInstance } from 'axios';
import sinon, { SinonSandbox } from 'sinon';
import chai, { expect } from 'chai';
import sinonChai from 'sinon-chai';
chai.use(sinonChai);
describe('SettingsHandler', () => {
let sandbox: SinonSandbox;
let axiosInstance: AxiosInstance;
let handler: SettingsHandler;
beforeEach(() => {
sandbox = sinon.createSandbox();
axiosInstance = axios.create();
handler = new SettingsHandler(axiosInstance);
});
afterEach(() => {
sandbox.restore();
});
it('Extends ItemsHandler', () => {
expect(handler).to.be.instanceOf(ItemsHandler);
});
});

View File

@@ -0,0 +1,27 @@
import { UsersHandler, ItemsHandler } from '../../src/handlers';
import axios, { AxiosInstance } from 'axios';
import sinon, { SinonSandbox } from 'sinon';
import chai, { expect } from 'chai';
import sinonChai from 'sinon-chai';
chai.use(sinonChai);
describe('UsersHandler', () => {
let sandbox: SinonSandbox;
let axiosInstance: AxiosInstance;
let handler: UsersHandler;
beforeEach(() => {
sandbox = sinon.createSandbox();
axiosInstance = axios.create();
handler = new UsersHandler(axiosInstance);
});
afterEach(() => {
sandbox.restore();
});
it('Extends ItemsHandler', () => {
expect(handler).to.be.instanceOf(ItemsHandler);
});
});

View File

@@ -6,6 +6,10 @@ import {
FoldersHandler,
PermissionsHandler,
PresetsHandler,
RolesHandler,
UsersHandler,
SettingsHandler,
FilesHandler,
} from '../src/handlers/';
import { expect } from 'chai';
@@ -60,4 +64,20 @@ describe('DirectusSDK', () => {
it('Returns PresetsHandler for #presets', () => {
expect(directus.presets).to.be.instanceOf(PresetsHandler);
});
it('Returns RolesHandler for #roles', () => {
expect(directus.roles).to.be.instanceOf(RolesHandler);
});
it('Returns UsersHandler for #users', () => {
expect(directus.users).to.be.instanceOf(UsersHandler);
});
it('Returns SettingsHandler for #users', () => {
expect(directus.settings).to.be.instanceOf(SettingsHandler);
});
it('Returns FilesHandler for #users', () => {
expect(directus.files).to.be.instanceOf(FilesHandler);
});
});