Skip to content

Commit dc8b3f2

Browse files
Add the Create Table API to JS-SDK (#237)
* BKNDLSS-31675 - Add the Create Table API to JS-SDK
1 parent a041646 commit dc8b3f2

File tree

7 files changed

+126
-0
lines changed

7 files changed

+126
-0
lines changed

backendless.d.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,23 @@ declare module Backendless {
724724
function pushWithTemplate(templateName: string, templateValues?: object): Promise<Object>;
725725
}
726726

727+
/**
728+
* @public
729+
* @namespace Backendless.Management
730+
**/
731+
namespace Management {
732+
733+
/**
734+
* @public
735+
* @interface Backendless.Management.Data
736+
*/
737+
interface Data {
738+
createTable(name: string, columns: Array<object>): Promise<void>;
739+
}
740+
741+
const Data: Data
742+
}
743+
727744
/**
728745
* @public
729746
* @namespace Backendless.Files

src/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ const SERVICES = {
8282
'SharedObject': () => require('./rso').default,
8383
'LocalCache' : () => require('./local-cache').default,
8484
'UnitOfWork' : () => require('./unit-of-work').default,
85+
'Management' : () => require('./management').default,
8586
}
8687

8788
class Backendless {
@@ -416,6 +417,10 @@ class Backendless {
416417
return this.__getService('UnitOfWork')
417418
}
418419

420+
get Management() {
421+
return this.__getService('Management')
422+
}
423+
419424
///-------------- SERVICES -------------///
420425
///-------------------------------------///
421426

src/management/data.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
export default class Data {
2+
constructor(app) {
3+
this.app = app
4+
}
5+
6+
createTable(name, columns) {
7+
if (!name || typeof name !== 'string') {
8+
throw new Error('Table name must be provided and must be a string.')
9+
}
10+
11+
if (!Array.isArray(columns)) {
12+
throw new Error('Columns must be a list.')
13+
}
14+
15+
return this.app.request
16+
.post({
17+
url : this.app.urls.managementDataTable(),
18+
data: { name, columns },
19+
})
20+
}
21+
}

src/management/index.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import Data from './data'
2+
3+
export default class Management {
4+
constructor(app) {
5+
this.app = app
6+
7+
this.Data = new Data(app)
8+
}
9+
}

src/urls.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,4 +367,17 @@ export default class Urls {
367367
userStatus(userId) {
368368
return `${this.userObject(userId)}/status`
369369
}
370+
371+
//management
372+
management() {
373+
return `${this.root()}/management`
374+
}
375+
376+
managementData() {
377+
return `${this.management()}/data`
378+
}
379+
380+
managementDataTable() {
381+
return `${this.managementData()}/table`
382+
}
370383
}

test/tsd.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1909,6 +1909,15 @@ function testLogging() {
19091909
logger.trace(message);
19101910
}
19111911

1912+
function testManagementData() {
1913+
const str: string = 'str';
1914+
const arr: any[] = [];
1915+
1916+
let promiseVoid: Promise<void>;
1917+
1918+
promiseVoid = Backendless.Management.Data.createTable(str, arr);
1919+
}
1920+
19121921
////// ------ RT ------- ///////
19131922

19141923
function RTClient() {

test/unit/specs/management/data.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { expect } from 'chai'
2+
import { describe, it } from 'mocha'
3+
4+
import Backendless, { APP_PATH, forTest, prepareMockRequest } from '../../helpers/sandbox'
5+
6+
describe('Management - Data', function() {
7+
forTest(this)
8+
9+
const fakeResult = { foo: true }
10+
11+
describe('Create Table', function() {
12+
it('success', async () => {
13+
const request = prepareMockRequest(fakeResult)
14+
15+
await Backendless.Management.Data.createTable('MyTable', [])
16+
17+
expect(request).to.deep.include({
18+
method: 'POST',
19+
path : `${APP_PATH}/management/data/table`,
20+
body : { name: 'MyTable', columns: [] }
21+
})
22+
})
23+
24+
it('fail when name is not provided or not a string', async () => {
25+
const errorMsg = 'Table name must be provided and must be a string.'
26+
27+
await expect(() => Backendless.Management.Data.createTable(undefined, [])).to.throw(errorMsg)
28+
await expect(() => Backendless.Management.Data.createTable(null, [])).to.throw(errorMsg)
29+
await expect(() => Backendless.Management.Data.createTable(false, [])).to.throw(errorMsg)
30+
await expect(() => Backendless.Management.Data.createTable(true, [])).to.throw(errorMsg)
31+
await expect(() => Backendless.Management.Data.createTable([], [])).to.throw(errorMsg)
32+
await expect(() => Backendless.Management.Data.createTable(0, [])).to.throw(errorMsg)
33+
await expect(() => Backendless.Management.Data.createTable('', [])).to.throw(errorMsg)
34+
await expect(() => Backendless.Management.Data.createTable(123, [])).to.throw(errorMsg)
35+
await expect(() => Backendless.Management.Data.createTable(() => undefined, [])).to.throw(errorMsg)
36+
await expect(() => Backendless.Management.Data.createTable({}, [])).to.throw(errorMsg)
37+
})
38+
39+
it('fail when columns is not provided or not an array', async () => {
40+
const errorMsg = 'Columns must be a list.'
41+
42+
await expect(() => Backendless.Management.Data.createTable('MyTable', undefined)).to.throw(errorMsg)
43+
await expect(() => Backendless.Management.Data.createTable('MyTable', null)).to.throw(errorMsg)
44+
await expect(() => Backendless.Management.Data.createTable('MyTable', false)).to.throw(errorMsg)
45+
await expect(() => Backendless.Management.Data.createTable('MyTable', true)).to.throw(errorMsg)
46+
await expect(() => Backendless.Management.Data.createTable('MyTable', 0)).to.throw(errorMsg)
47+
await expect(() => Backendless.Management.Data.createTable('MyTable', 123)).to.throw(errorMsg)
48+
await expect(() => Backendless.Management.Data.createTable('MyTable', () => undefined)).to.throw(errorMsg)
49+
await expect(() => Backendless.Management.Data.createTable('MyTable', {})).to.throw(errorMsg)
50+
})
51+
})
52+
})

0 commit comments

Comments
 (0)