@lwmqn/util
Version:
Utility for LwMQN shepherd server and qnode client libraries.
515 lines (451 loc) • 22.5 kB
JavaScript
/* eslint-env mocha */
const { expect } = require('chai')
const util = require('../index.js') // lwm2m-util module
describe('APIs Functional Check', () => {
describe('#.getOid', () => {
it('returns a correct oid item', () => {
expect(util.getOid('temperature')).to.be.eql({ key: 'temperature', value: 3303 })
expect(util.getOid(3303)).to.be.eql({ key: 'temperature', value: 3303 })
expect(util.getOid('3303')).to.be.eql({ key: 'temperature', value: 3303 })
})
it('returns undefined if oid not found', () => {
expect(util.getOid('xxxx')).to.equal(undefined)
expect(util.getOid('9999')).to.equal(undefined)
expect(util.getOid(9999)).to.equal(undefined)
})
})
describe('#.oidKey', () => {
it('returns a correct oid key', () => {
expect(util.oidKey('temperature')).to.be.eql('temperature')
expect(util.oidKey(3303)).to.be.eql('temperature')
expect(util.oidKey('3303')).to.be.eql('temperature')
})
it('returns itself if oid not found', () => {
expect(util.oidKey('xxxx')).to.be.eql('xxxx')
expect(util.oidKey('9999')).to.be.eql('9999')
expect(util.oidKey(9999)).to.be.eql('9999')
})
})
describe('#.oidNum', () => {
it('returns a correct oid key', () => {
expect(util.oidNum('temperature')).to.be.eql(3303)
expect(util.oidNum(3303)).to.be.eql(3303)
expect(util.oidNum('3303')).to.be.eql(3303)
})
it('returns itself if oid not found', () => {
expect(util.oidNum('xxxx')).to.be.eql('xxxx')
expect(util.oidNum('9999')).to.be.eql(9999)
expect(util.oidNum(9999)).to.be.eql(9999)
})
})
describe('#.getRid(rid)', () => {
it('returns a correct rid item with input of rid alone', () => {
expect(util.getRid('appType')).to.be.eql({ key: 'appType', value: 5750 })
expect(util.getRid(5750)).to.be.eql({ key: 'appType', value: 5750 })
expect(util.getRid('5750')).to.be.eql({ key: 'appType', value: 5750 })
})
it('returns undefined if rid not found with input of rid alone', () => {
expect(util.getRid('xxxx')).to.equal(undefined)
expect(util.getRid('9999')).to.equal(undefined)
expect(util.getRid(9999)).to.equal(undefined)
})
})
describe('#.getRid(oid, rid)', () => {
it('returns a correct rid item with input of oid plus rid', () => {
expect(util.getRid('location', 'lon')).to.be.eql({ key: 'lon', value: 1 })
expect(util.getRid(6, 1)).to.be.eql({ key: 'lon', value: 1 })
expect(util.getRid(6, 'lon')).to.be.eql({ key: 'lon', value: 1 })
expect(util.getRid('location', 1)).to.be.eql({ key: 'lon', value: 1 })
})
it('returns undefined if rid not found with input of oid plus rid', () => {
expect(util.getRid('locationx', 'lon')).to.equal(undefined)
expect(util.getRid(61111, 1)).to.equal(undefined)
expect(util.getRid(6, 'lonx')).to.equal(undefined)
expect(util.getRid('location', 11111)).to.equal(undefined)
})
})
describe('#.ridKey(rid)', () => {
it('returns a correct rid item with input of rid alone', () => {
expect(util.ridKey('appType')).to.be.eql('appType')
expect(util.ridKey(5750)).to.be.eql('appType')
expect(util.ridKey('5750')).to.be.eql('appType')
})
it('returns itself if rid not found with input of rid alone', () => {
expect(util.ridKey('xxxx')).to.be.eql('xxxx')
expect(util.ridKey('9999')).to.be.eql('9999')
expect(util.ridKey(9999)).to.be.eql('9999')
})
})
describe('#.ridKey(oid, rid)', () => {
it('returns a correct rid key with input of oid plus rid', () => {
expect(util.ridKey('location', 'lon')).to.be.eql('lon')
expect(util.ridKey(6, 1)).to.be.eql('lon')
expect(util.ridKey(6, 'lon')).to.be.eql('lon')
expect(util.ridKey('location', 1)).to.be.eql('lon')
})
it('returns ridKey itself if rid not found with input of rid alone', () => {
expect(util.ridKey('lonx')).to.be.eql('lonx')
})
it('returns ridKey itself if oid not found with input of oid plus rid', () => {
expect(util.ridKey('locationx', 'lon')).to.be.eql('lon')
})
it('returns ridKey itself if oid or rid not found with input of oid plus rid', () => {
expect(util.ridKey(61111, 1)).to.be.eql('1')
expect(util.ridKey(6, 'lonx')).to.be.eql('lonx')
expect(util.ridKey('location', 11111)).to.be.eql('11111')
})
})
describe('#.ridNum(rid)', () => {
it('returns a correct rid number with input of rid alone', () => {
expect(util.ridNum('appType')).to.be.eql(5750)
expect(util.ridNum(5750)).to.be.eql(5750)
expect(util.ridNum('5750')).to.be.eql(5750)
})
it('returns itself if rid not found with input of rid alone', () => {
expect(util.ridNum('xxxx')).to.be.eql('xxxx')
expect(util.ridNum('9999')).to.be.eql(9999)
expect(util.ridNum(9999)).to.be.eql(9999)
})
})
describe('#.ridNum(oid, rid)', () => {
it('returns a correct rid item with input of oid plus rid', () => {
expect(util.ridNum('location', 'lon')).to.be.eql(1)
expect(util.ridNum(6, 1)).to.be.eql(1)
expect(util.ridNum(6, 'lon')).to.be.eql(1)
expect(util.ridNum('location', 1)).to.be.eql(1)
})
it('returns ridNum itself if rid not found with input of rid alone', () => {
expect(util.ridNum('lonx')).to.be.eql('lonx')
expect(util.ridNum(123456)).to.be.eql(123456)
expect(util.ridNum('123456')).to.be.eql(123456)
})
it('returns ridNum itself if oid not found with input of oid plus rid', () => {
expect(util.ridNum('locationx', 'lon')).to.be.eql('lon')
expect(util.ridNum('locationx', 123456)).to.be.eql(123456)
expect(util.ridNum('locationx', '123456')).to.be.eql(123456)
})
it('returns ridNum itself if oid or rid not found with input of oid plus rid', () => {
expect(util.ridNum(61111, 1)).to.be.eql(1)
expect(util.ridNum(61111, '1')).to.be.eql(1)
expect(util.ridNum(6, 'lonx')).to.be.eql('lonx')
expect(util.ridNum('location', 11111)).to.be.eql(11111)
})
})
describe('#.getRspCode', () => {
it('returns a correct response code number item', () => {
expect(util.getRspCode(200)).to.be.eql({ key: 'OK', value: 200 })
expect(util.getRspCode(201)).to.be.eql({ key: 'Created', value: 201 })
expect(util.getRspCode(202)).to.be.eql({ key: 'Deleted', value: 202 })
expect(util.getRspCode(204)).to.be.eql({ key: 'Changed', value: 204 })
expect(util.getRspCode(205)).to.be.eql({ key: 'Content', value: 205 })
expect(util.getRspCode(400)).to.be.eql({ key: 'BadRequest', value: 400 })
expect(util.getRspCode(401)).to.be.eql({ key: 'Unauthorized', value: 401 })
expect(util.getRspCode(404)).to.be.eql({ key: 'NotFound', value: 404 })
expect(util.getRspCode(405)).to.be.eql({ key: 'MethodNotAllowed', value: 405 })
expect(util.getRspCode(408)).to.be.eql({ key: 'Timeout', value: 408 })
expect(util.getRspCode(409)).to.be.eql({ key: 'Conflict', value: 409 })
expect(util.getRspCode(500)).to.be.eql({ key: 'InternalServerError', value: 500 })
expect(util.getRspCode('OK')).to.be.eql({ key: 'OK', value: 200 })
expect(util.getRspCode('Created')).to.be.eql({ key: 'Created', value: 201 })
expect(util.getRspCode('Deleted')).to.be.eql({ key: 'Deleted', value: 202 })
expect(util.getRspCode('Changed')).to.be.eql({ key: 'Changed', value: 204 })
expect(util.getRspCode('Content')).to.be.eql({ key: 'Content', value: 205 })
expect(util.getRspCode('BadRequest')).to.be.eql({ key: 'BadRequest', value: 400 })
expect(util.getRspCode('Unauthorized')).to.be.eql({ key: 'Unauthorized', value: 401 })
expect(util.getRspCode('NotFound')).to.be.eql({ key: 'NotFound', value: 404 })
expect(util.getRspCode('MethodNotAllowed')).to.be.eql({ key: 'MethodNotAllowed', value: 405 })
expect(util.getRspCode('Timeout')).to.be.eql({ key: 'Timeout', value: 408 })
expect(util.getRspCode('Conflict')).to.be.eql({ key: 'Conflict', value: 409 })
expect(util.getRspCode('InternalServerError')).to.be.eql({ key: 'InternalServerError', value: 500 })
})
it('returns undefined if input is an invalid response code', () => {
expect(util.getRspCode('xxx')).to.equal(undefined)
expect(util.getRspCode(123)).to.equal(undefined)
})
})
describe('#.rspCodeKey', () => {
it('returns a correct response code number item', () => {
expect(util.rspCodeKey(200)).to.be.eql('OK')
expect(util.rspCodeKey(201)).to.be.eql('Created')
expect(util.rspCodeKey(202)).to.be.eql('Deleted')
expect(util.rspCodeKey(204)).to.be.eql('Changed')
expect(util.rspCodeKey(205)).to.be.eql('Content')
expect(util.rspCodeKey(400)).to.be.eql('BadRequest')
expect(util.rspCodeKey(401)).to.be.eql('Unauthorized')
expect(util.rspCodeKey(404)).to.be.eql('NotFound')
expect(util.rspCodeKey(405)).to.be.eql('MethodNotAllowed')
expect(util.rspCodeKey(408)).to.be.eql('Timeout')
expect(util.rspCodeKey(409)).to.be.eql('Conflict')
expect(util.rspCodeKey(500)).to.be.eql('InternalServerError')
expect(util.rspCodeKey('OK')).to.be.eql('OK')
expect(util.rspCodeKey('Created')).to.be.eql('Created')
expect(util.rspCodeKey('Deleted')).to.be.eql('Deleted')
expect(util.rspCodeKey('Changed')).to.be.eql('Changed')
expect(util.rspCodeKey('Content')).to.be.eql('Content')
expect(util.rspCodeKey('BadRequest')).to.be.eql('BadRequest')
expect(util.rspCodeKey('Unauthorized')).to.be.eql('Unauthorized')
expect(util.rspCodeKey('NotFound')).to.be.eql('NotFound')
expect(util.rspCodeKey('MethodNotAllowed')).to.be.eql('MethodNotAllowed')
expect(util.rspCodeKey('Timeout')).to.be.eql('Timeout')
expect(util.rspCodeKey('Conflict')).to.be.eql('Conflict')
expect(util.rspCodeKey('InternalServerError')).to.be.eql('InternalServerError')
})
it('returns undefined if input is an invalid response code', () => {
expect(util.rspCodeKey('xxx')).to.equal(undefined)
expect(util.rspCodeKey(123)).to.equal(undefined)
})
})
describe('#.rspCodeNum', () => {
it('returns a correct response code number item', () => {
expect(util.rspCodeNum(200)).to.be.eql(200)
expect(util.rspCodeNum(201)).to.be.eql(201)
expect(util.rspCodeNum(202)).to.be.eql(202)
expect(util.rspCodeNum(204)).to.be.eql(204)
expect(util.rspCodeNum(205)).to.be.eql(205)
expect(util.rspCodeNum('OK')).to.be.eql(200)
expect(util.rspCodeNum('Created')).to.be.eql(201)
expect(util.rspCodeNum('Deleted')).to.be.eql(202)
expect(util.rspCodeNum('Changed')).to.be.eql(204)
expect(util.rspCodeNum('Content')).to.be.eql(205)
expect(util.rspCodeNum(400)).to.be.eql(400)
expect(util.rspCodeNum(401)).to.be.eql(401)
expect(util.rspCodeNum(404)).to.be.eql(404)
expect(util.rspCodeNum(405)).to.be.eql(405)
expect(util.rspCodeNum(408)).to.be.eql(408)
expect(util.rspCodeNum(409)).to.be.eql(409)
expect(util.rspCodeNum(500)).to.be.eql(500)
expect(util.rspCodeNum('BadRequest')).to.be.eql(400)
expect(util.rspCodeNum('Unauthorized')).to.be.eql(401)
expect(util.rspCodeNum('NotFound')).to.be.eql(404)
expect(util.rspCodeNum('MethodNotAllowed')).to.be.eql(405)
expect(util.rspCodeNum('Timeout')).to.be.eql(408)
expect(util.rspCodeNum('Conflict')).to.be.eql(409)
expect(util.rspCodeNum('InternalServerError')).to.be.eql(500)
})
it('returns undefined if input is an invalid response code', () => {
expect(util.rspCodeNum('xxx')).to.equal(undefined)
expect(util.rspCodeNum(123)).to.equal(undefined)
})
})
describe('#.getCmd', () => {
it('returns a correct command item', () => {
expect(util.getCmd('read')).to.be.eql({ key: 'read', value: 0 })
expect(util.getCmd('write')).to.be.eql({ key: 'write', value: 1 })
expect(util.getCmd('discover')).to.be.eql({ key: 'discover', value: 2 })
expect(util.getCmd('writeAttrs')).to.be.eql({ key: 'writeAttrs', value: 3 })
expect(util.getCmd('execute')).to.be.eql({ key: 'execute', value: 4 })
expect(util.getCmd('observe')).to.be.eql({ key: 'observe', value: 5 })
expect(util.getCmd('notify')).to.be.eql({ key: 'notify', value: 6 })
expect(util.getCmd('ping')).to.be.eql({ key: 'ping', value: 7 })
expect(util.getCmd('unknown')).to.be.eql({ key: 'unknown', value: 255 })
expect(util.getCmd(0)).to.be.eql({ key: 'read', value: 0 })
expect(util.getCmd(1)).to.be.eql({ key: 'write', value: 1 })
expect(util.getCmd(2)).to.be.eql({ key: 'discover', value: 2 })
expect(util.getCmd(3)).to.be.eql({ key: 'writeAttrs', value: 3 })
expect(util.getCmd(4)).to.be.eql({ key: 'execute', value: 4 })
expect(util.getCmd(5)).to.be.eql({ key: 'observe', value: 5 })
expect(util.getCmd(6)).to.be.eql({ key: 'notify', value: 6 })
expect(util.getCmd(7)).to.be.eql({ key: 'ping', value: 7 })
expect(util.getCmd(255)).to.be.eql({ key: 'unknown', value: 255 })
})
it('returns undefined if command number is invalid', () => {
expect(util.getCmd('readxx')).to.equal(undefined)
expect(util.getCmd(123)).to.equal(undefined)
})
})
describe('#.cmdKey', () => {
it('returns a correct command number', () => {
expect(util.cmdKey('read')).to.be.eql('read')
expect(util.cmdKey('write')).to.be.eql('write')
expect(util.cmdKey('discover')).to.be.eql('discover')
expect(util.cmdKey('writeAttrs')).to.be.eql('writeAttrs')
expect(util.cmdKey('execute')).to.be.eql('execute')
expect(util.cmdKey('observe')).to.be.eql('observe')
expect(util.cmdKey('notify')).to.be.eql('notify')
expect(util.cmdKey('ping')).to.be.eql('ping')
expect(util.cmdKey('unknown')).to.be.eql('unknown')
expect(util.cmdKey(0)).to.be.eql('read')
expect(util.cmdKey(1)).to.be.eql('write')
expect(util.cmdKey(2)).to.be.eql('discover')
expect(util.cmdKey(3)).to.be.eql('writeAttrs')
expect(util.cmdKey(4)).to.be.eql('execute')
expect(util.cmdKey(5)).to.be.eql('observe')
expect(util.cmdKey(6)).to.be.eql('notify')
expect(util.cmdKey(7)).to.be.eql('ping')
expect(util.cmdKey(255)).to.be.eql('unknown')
})
it('returns undefined if command number is invalid', () => {
expect(util.cmdKey('readxx')).to.equal(undefined)
expect(util.cmdKey(123)).to.equal(undefined)
})
})
describe('#.cmdNum', () => {
it('returns a correct command number', () => {
expect(util.cmdNum('read')).to.be.eql(0)
expect(util.cmdNum('write')).to.be.eql(1)
expect(util.cmdNum('discover')).to.be.eql(2)
expect(util.cmdNum('writeAttrs')).to.be.eql(3)
expect(util.cmdNum('execute')).to.be.eql(4)
expect(util.cmdNum('observe')).to.be.eql(5)
expect(util.cmdNum('notify')).to.be.eql(6)
expect(util.cmdNum('ping')).to.be.eql(7)
expect(util.cmdNum('unknown')).to.be.eql(255)
expect(util.cmdNum(0)).to.be.eql(0)
expect(util.cmdNum(1)).to.be.eql(1)
expect(util.cmdNum(2)).to.be.eql(2)
expect(util.cmdNum(3)).to.be.eql(3)
expect(util.cmdNum(4)).to.be.eql(4)
expect(util.cmdNum(5)).to.be.eql(5)
expect(util.cmdNum(6)).to.be.eql(6)
expect(util.cmdNum(7)).to.be.eql(7)
expect(util.cmdNum(255)).to.be.eql(255)
})
it('returns undefined if command number is invalid', () => {
expect(util.cmdNum('readxx')).to.equal(undefined)
expect(util.cmdNum(123)).to.equal(undefined)
})
})
describe('#.createPath', () => {
it('returns a correct created path', () => {
const expectedString1 = 'dev/0/sensor/value'
// const expectedString2 = 'dev.0.sensor.value'
expect(util.createPath('/', 'dev', 0, 'sensor', 'value')).to.be.eql(expectedString1)
expect(util.createPath('/', 'dev', 0, 'sensor', 'value')).to.be.eql(expectedString1)
})
})
describe('#.slashPath', () => {
it('returns a correct slash path', () => {
const expectedString = 'dev/0/sensor/value'
expect(util.slashPath('dev.0.sensor.value')).to.be.eql(expectedString)
expect(util.slashPath('.dev.0.sensor.value')).to.be.eql(expectedString)
expect(util.slashPath('.dev.0.sensor.value.')).to.be.eql(expectedString)
expect(util.slashPath('/dev.0.sensor/value/')).to.be.eql(expectedString)
expect(util.slashPath('/dev/0/sensor/value/')).to.be.eql(expectedString)
expect(util.slashPath('.dev/0/sensor/value.')).to.be.eql(expectedString)
})
})
describe('#.dotPath', () => {
it('returns a correct dot path', () => {
const expectedString = 'dev.0.sensor.value'
expect(util.dotPath('dev.0.sensor.value')).to.be.eql(expectedString)
expect(util.dotPath('.dev.0.sensor.value')).to.be.eql(expectedString)
expect(util.dotPath('.dev.0.sensor.value.')).to.be.eql(expectedString)
expect(util.dotPath('/dev.0.sensor/value/')).to.be.eql(expectedString)
expect(util.dotPath('/dev/0/sensor/value/')).to.be.eql(expectedString)
expect(util.dotPath('.dev/0/sensor/value.')).to.be.eql(expectedString)
})
})
describe('#.pathItems', () => {
it('returns a correct array of a / path', () => {
const expectedArr = ['dev', '0', 'sensor', 'value']
expect(util.pathItems('dev')).to.be.eql(['dev'])
expect(util.pathItems('dev.0.sensor.value')).to.be.eql(expectedArr)
expect(util.pathItems('.dev.0.sensor.value')).to.be.eql(expectedArr)
expect(util.pathItems('.dev.0.sensor.value.')).to.be.eql(expectedArr)
expect(util.pathItems('/dev.0.sensor/value/')).to.be.eql(expectedArr)
expect(util.pathItems('/dev/0/sensor/value/')).to.be.eql(expectedArr)
expect(util.pathItems('.dev/0/sensor/value.')).to.be.eql(expectedArr)
})
})
describe('#.buildPathValuePairs', () => {
const myObj = {
a: {
a1: {
a11: 1,
a12: 'hi'
},
a2: 'foo'
},
b: 'hello',
c: 3
}
it('returns a correct path-value pairs of an object with root /', () => {
const expectedObj = {
'a.a1.a11': 1,
'a.a1.a12': 'hi',
'a.a2': 'foo',
b: 'hello',
c: 3
}
expect(util.buildPathValuePairs('/', myObj)).to.be.eql(expectedObj)
expect(util.buildPathValuePairs('.', myObj)).to.be.eql(expectedObj)
expect(util.buildPathValuePairs('', myObj)).to.be.eql(expectedObj)
})
it('returns a correct path-value pairs of an object with root /dev/0', () => {
const expectedObj = {
'dev.0.a.a1.a11': 1,
'dev.0.a.a1.a12': 'hi',
'dev.0.a.a2': 'foo',
'dev.0.b': 'hello',
'dev.0.c': 3
}
expect(util.buildPathValuePairs('/dev/0/', myObj)).to.be.eql(expectedObj)
expect(util.buildPathValuePairs('/dev/0', myObj)).to.be.eql(expectedObj)
expect(util.buildPathValuePairs('dev/0/', myObj)).to.be.eql(expectedObj)
expect(util.buildPathValuePairs('dev/0', myObj)).to.be.eql(expectedObj)
expect(util.buildPathValuePairs('.dev.0.', myObj)).to.be.eql(expectedObj)
expect(util.buildPathValuePairs('.dev.0', myObj)).to.be.eql(expectedObj)
expect(util.buildPathValuePairs('dev.0.', myObj)).to.be.eql(expectedObj)
expect(util.buildPathValuePairs('dev.0', myObj)).to.be.eql(expectedObj)
})
})
describe('#.isGoodResponse', () => {
it('should be true if input is a good status code', () => {
expect(util.isGoodResponse(200)).to.equal(true)
expect(util.isGoodResponse(201)).to.equal(true)
expect(util.isGoodResponse(202)).to.equal(true)
expect(util.isGoodResponse(204)).to.equal(true)
expect(util.isGoodResponse(205)).to.equal(true)
expect(util.isGoodResponse('OK')).to.equal(true)
expect(util.isGoodResponse('Created')).to.equal(true)
expect(util.isGoodResponse('Deleted')).to.equal(true)
expect(util.isGoodResponse('Changed')).to.equal(true)
expect(util.isGoodResponse('Content')).to.equal(true)
})
it('should be false if input is a bad status code', () => {
expect(util.isGoodResponse(400)).to.equal(false)
expect(util.isGoodResponse(401)).to.equal(false)
expect(util.isGoodResponse(404)).to.equal(false)
expect(util.isGoodResponse(405)).to.equal(false)
expect(util.isGoodResponse(408)).to.equal(false)
expect(util.isGoodResponse(409)).to.equal(false)
expect(util.isGoodResponse(500)).to.equal(false)
expect(util.isGoodResponse('BadRequest')).to.equal(false)
expect(util.isGoodResponse('Unauthorized')).to.equal(false)
expect(util.isGoodResponse('NotFound')).to.equal(false)
expect(util.isGoodResponse('MethodNotAllowed')).to.equal(false)
expect(util.isGoodResponse('Timeout')).to.equal(false)
expect(util.isGoodResponse('Conflict')).to.equal(false)
expect(util.isGoodResponse('InternalServerError')).to.equal(false)
})
it('should be false if input is an unknown status code', () => {
expect(util.isGoodResponse(108)).to.equal(false)
expect(util.isGoodResponse('xx')).to.equal(false)
})
})
describe('#.getAccessCtrl', () => {
it('should get right value', () => {
expect(util.getAccessCtrl('temperature', 'sensorValue')).to.be.eql('R')
expect(util.getAccessCtrl('lightCtrl', 5850)).to.be.eql('RW')
})
it('should get undefined if target not found', () => {
expect(util.getAccessCtrl('temperature', 1234)).to.equal(undefined)
expect(util.getAccessCtrl('xxxx', 1234)).to.equal(undefined)
})
})
describe('#.jsonify', () => {
it('is a string hello', () => {
expect(util.jsonify('hello')).to.be.eql('hello')
})
it('is a string which cannot be parsed', () => {
expect(util.jsonify('{: { "OK": 200, "Created": 201, "Deleted": 202, "Changed": 204, "Content": 205 }}')).to.be.eql('{: { "OK": 200, "Created": 201, "Deleted": 202, "Changed": 204, "Content": 205 }}')
})
it('is ab object', () => {
expect(util.jsonify('{"rspCode": { "OK": 200, "Created": 201, "Deleted": 202, "Changed": 204, "Content": 205 }}')).to.be.eql({
rspCode: {
OK: 200, Created: 201, Deleted: 202, Changed: 204, Content: 205
}
})
})
})
})