Skip to content

Commit

Permalink
feat(api): implement object::full rpc method
Browse files Browse the repository at this point in the history
Ref #1
  • Loading branch information
guillaumearm committed Nov 4, 2018
1 parent a69d5c1 commit 79b0af9
Show file tree
Hide file tree
Showing 12 changed files with 165 additions and 31 deletions.
1 change: 1 addition & 0 deletions src/api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ export const createJeedomApi = (jeedomRpc: RpcInterface): JeedomApi => ({
},
object: {
all: () => jeedomRpc('object::all'),
full: () => jeedomRpc('object::full'),
},
})

Expand Down
7 changes: 5 additions & 2 deletions src/api/types/object.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,13 @@ export type JeedomObject = {
position: any
}

export type AllResponse = JeedomObject[]
export type FullJeedomObject = JeedomObject & {
eqLogics: any
}

export type ObjectApi = {
object: {
all: () => Promise<AllResponse>
all: () => Promise<JeedomObject[]>
full: () => Promise<FullJeedomObject[]>
}
}
2 changes: 1 addition & 1 deletion tests/__nock-fixtures__/jeedom-config::byKey.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
},
"rawHeaders": [
"Date",
"Sun, 04 Nov 2018 10:08:15 GMT",
"Sun, 04 Nov 2018 10:57:29 GMT",
"Server",
"Apache",
"Access-Control-Allow-Origin",
Expand Down
6 changes: 3 additions & 3 deletions tests/__nock-fixtures__/jeedom-config::save.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
},
"rawHeaders": [
"Date",
"Sun, 04 Nov 2018 10:08:15 GMT",
"Sun, 04 Nov 2018 10:57:29 GMT",
"Server",
"Apache",
"Access-Control-Allow-Origin",
Expand Down Expand Up @@ -57,7 +57,7 @@
},
"rawHeaders": [
"Date",
"Sun, 04 Nov 2018 10:08:16 GMT",
"Sun, 04 Nov 2018 10:57:29 GMT",
"Server",
"Apache",
"Access-Control-Allow-Origin",
Expand Down Expand Up @@ -93,7 +93,7 @@
},
"rawHeaders": [
"Date",
"Sun, 04 Nov 2018 10:08:16 GMT",
"Sun, 04 Nov 2018 10:57:29 GMT",
"Server",
"Apache",
"Access-Control-Allow-Origin",
Expand Down
4 changes: 2 additions & 2 deletions tests/__nock-fixtures__/jeedom-datetime.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@
"response": {
"jsonrpc": "2.0",
"id": null,
"result": 1541326095.9178
"result": 1541329049.7215
},
"rawHeaders": [
"Date",
"Sun, 04 Nov 2018 10:08:15 GMT",
"Sun, 04 Nov 2018 10:57:29 GMT",
"Server",
"Apache",
"Access-Control-Allow-Origin",
Expand Down
7 changes: 4 additions & 3 deletions tests/__nock-fixtures__/jeedom-event::changes.json

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions tests/__nock-fixtures__/jeedom-object::all.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@
},
"status": 200,
"response": [
"1f8b0800000000000003ed9c596fe33610c7bf8aa1bcdaad0e5f32b60b6c935e0fdb16e8a27d48828092288bbb14699062b2db20dfbd946c1d9145c56a8e36ebf14b64cd281ace24fae13f24756b7d949c894d68ad2cf71bdb1a5b24b2564c513ab604968a66d6eafcb63869399e363394627dfc4e653c4519912996fa6c8cb2048babfa5a22ff24920434f775b4c3864b9211ce4a7bc8594cd64aa0edc95b6b830466d9af2a0db0b056f6d8922a4d91f8b25aad290f105dad240e9520d917fd1bf338f7ec29dffeae6e6bc4b930d96e088bf88d349965a2b20c1bafa6649d6426235719c5466b86d30dd63950029b5c129592a867d454db599e5ca3c786dfec079f9008eba460f929e31b736e5b6edd296e397565bae56248783ba8eebcb7bc3ad3dff2e9ae42cba9a7182d4f534dda91194bd372eca950ca0342f143052abdfaea53fa98cb537af456a70aa8af38a5534f6d4a97bed2943e0f56a674ec2f4c15d5037529fd3aca923fa9ea529c5f8ead32e5f9f136b5f95195c2fc4b95aafccb2e25f96139f4fcf8de10f313f5508aab1a21e7df77a19d5fdee94bd1fa94d3a2a82776f1b18a931ff0e7ac32fc587cb4a1feefda8ea8e965e5c3d995b7c3aaef1511b9a1a84803098bbfb43764145224e57717c5995144aeb1901379bd762facb76f2ebe256fadfb31c6f1b23bc62a788959f481bfdb6c0a78dcdd8d77009ad5fc394d501ae85cdd434f419a4792c77985e471803c401e200f90e720f2dc5a98a1faf918a6f993f36439774ef2a727d38fef6d52ee5e21a274503a91bfb1332493802311dd4fe2d53511994274470bdf3f8c6929225a244d129e613a3550cdf62207cf0ea75aff30ebaba27224da8ffc8d0b0e574074e67b441cfda408a548a5cfc3c6ff4b2501ce00678033c0f938e0ec789eff7c74ee84a3ab9fec43e018e0c824f8fc60e607f30e4ec4c5e78950b82f0e473a5d24bb50b68d7d8021c01060083004187e05309c7a2f0e4367100cf5cdf50fe7bfe46163aeee5469ce31e89502818040402020d053c8b163eb95bab63b888061c11c820536407011d851c1ba97ec972e6b289e6d75e146df04b1b0bd88e558e9d869043a021d818e40c7a359c3f211e388a7933512688d275ce59837622c8e9dae603b3166371b96d31a463fe8ab419f0181804040202010106847207792f0145f095323318ee3701a9ae1d3808dd380cde7dd9c98205809103ed01604ec0076003b8f6e0b7af6b4dd161c777bbafede720e83a7671feae92ee707df7d2fce57c8d181edcbc561e065c5a02748652a354ee0d91abc0bbf635c71fc7cbd4bbf26f8cf88696dda02f7f2f1e07601dc006e003780fbc8c0edb8f3c5f111d13b8c8888911451ad4485c473db44c499461f362bd1761bf469967cba35127f61311769c135d88f0e9d5420239011c8089dd4e67e746313d510e283dbd11b3dd5f7c5aa17000f8007c003e001f00c9264e65595e3cae8395dbdd5cad8d524adc4ddaccff88cfbea5e50f81924de74e0fe7625b1e398dfdb6223bb67b6b1adf11aa0b46b52fece154584520cfd4b8025c0126009b00495563619c384849f303311c87134830e7ec74a93408d4ee11f48c36754ac80b147ef115bef910896c000898044402220d1bf9849eb125bdd9e5f87f21a34e5361ba4c722c2085b7b061806de6c6a0787c2f08916a134de37b6e5e8191e7d8f487bceed58110a620e100a0805841eb7982bdf08a67920384f5d939c9be278c016f0a69c6b6c9dd3186a4fbc1d2b7d40c0017d803e409fc709b8bdd7409b049c73846b26e7830828798c4cf22d8ee733e4beb07c5bd4dcfceb14a009920da009d0046882642b8185c535094dafecb2dd853f4caf5ddefd03b5b608a6606e0000"
"1f8b0800000000000003ed9c596fe33610c7bf8aa1bcdaad0e5f32b60b6c935e0fdb16e8a27d48828092288bbb14699062b2db20dfbd946c1d9145c56a8e36ebf14b64cd281ace24fae13f24756b7d949c894d68ad2cf71bdb1a5b24b2564c513ab604968a66d6eafcb63869399e363394627dfc4e653c4519912996fa6c8cb2048babfa5a22ff24920434f775b4c3864b9211ce4a7bc8594cd64aa0edc95b6b830466d9af2a0db0b056f6d8922a4d91f8b25aad290f105dad240e9520d917fd1bf338f7ec29dffeae6e6bc4b930d96e088bf88d349965a2b20c1bafa6649d6426235719c5466b86d30dd63950029b5c129592a867d454db599e5ca3c786dfec079f9008eba460f929e31b736e5b6edd296e397565bae56248783ba8eebcb7bc3ad3dff2e9ae42cba9a7182d4f534dda91194bd372eca950ca0342f143052abdfaea53fa98cb537af456a70aa8af38a5534f6d4a97bed2943e0f56a674ec2f4c15d5037529fd3aca923fa9ea529c5f8ead32e5f9f136b5f95195c2fc4b95aafccb2e25f96139f4fcf8de10f313f5508aab1a21e7df77a19d5fdee94bd1fa94d3a2a82776f1b18a931ff0e7ac32fc587cb4a1feefda8ea8e965e5c3d995b7c3aaef1511b9a1a84803098bbfb43764145224e57717c5995144aeb1901379bd762facb76f2ebe256fadfb31c6f1b23bc62a788959f481bfdb6c0a78dcdd8d77009ad5fc394d501ae85cdd434f419a4792c77985e471803c401e200f90e720f2dc5a98a1faf918a6f993f36439774ef2a727d38fef6d52ee5e21a274503a91bfb1332493802311dd4fe2d53511994274470bdf3f8c6929225a244d129e613a3550cdf62207cf0ea75aff30ebaba27224da8ffc8d0b0e574074e67b441cfda408a548a5cfc3c6ff4b2501ce00678033c0f938e0ec789eff7c74ee84a3ab9fec43e018e0c824f8fc60e607f30e4ec4c5e78950b82f0e473a5d24bb50b68d7d8021c01060083004187e05309c7a2f0e4367100cf5cdf50fe7bfe46163aeee5469ce31e89502818040402020d053c8b163eb95bab63b888061c11c820536407011d851c1ba97ec972e6b289e6d75e146df04b1b0bd88e558e9d869043a021d818e40c7a359c3f211e388a7933512688d275ce59837622c8e9dae603b3166371b96d31a463fe8ab419f0181804040202010106847207792f0145f095323318ee3701a9ae1d3808dd380cde7dd9c98205809103ed01604ec0076003b8f6e0b7af6b4dd161c777bbafede720e83a7671feae92ee707df7d2fce57c8d181edcbc561e065c5a02748652a354ee0d91abc0bbf635c71fc7cbd4bbf26f8cf88696dda02f7f2f1e07601dc006e003780fbc8c0edb8f3c5f111d13b8c8888911451ad4485c473db44c499461f362bd1761bf469967cba35127f61311769c135d88f0e9d5420239011c8089dd4e67e746313d510e283dbd11b3dd5f7c5aa17000f8007c003e001f00c9264e65595e3cae8395dbdd5cad8d524adc4ddaccff88cfbea5e50f81924de74e0fe7625b1e398dfdb6223bb67b6b1adf11aa0b46b52fece154584520cfd4b8025c0126009b00495563619c384849f303311c87134830e7ec74a93408d4ee11f48c36754ac80b147ef115bef910896c000898044402220d1bf9849eb125bdd9e5f87f21a34e5361ba4c722c2085b7b061806de6c6a0787c2f08916a134de37b6",
"e5e8191e7d8f487bceed58110a620e100a0805841eb7982bdf08a67920384f5d939c9be278c016f0a69c6b6c9dd3186a4fbc1d2b7d40c0017d803e409fc709b8bdd7409b049c73846b26e7830828798c4cf22d8ee733e4beb07c5bd4dcfceb14a009920da009d0046882642b8185c535094dafecb2dd853f4caf5ddefd03b5b608a6606e0000"
],
"rawHeaders": [
"Date",
"Sun, 04 Nov 2018 10:08:16 GMT",
"Sun, 04 Nov 2018 10:57:29 GMT",
"Server",
"Apache",
"Access-Control-Allow-Origin",
Expand Down
46 changes: 46 additions & 0 deletions tests/__nock-fixtures__/jeedom-object::full.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion tests/__nock-fixtures__/jeedom-ping.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
},
"rawHeaders": [
"Date",
"Sun, 04 Nov 2018 10:08:15 GMT",
"Sun, 04 Nov 2018 10:57:29 GMT",
"Server",
"Apache",
"Access-Control-Allow-Origin",
Expand Down
2 changes: 1 addition & 1 deletion tests/__nock-fixtures__/jeedom-version.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
},
"rawHeaders": [
"Date",
"Sun, 04 Nov 2018 10:08:15 GMT",
"Sun, 04 Nov 2018 10:57:29 GMT",
"Server",
"Apache",
"Access-Control-Allow-Origin",
Expand Down
81 changes: 74 additions & 7 deletions tests/__snapshots__/index.spec.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,16 @@ Array [
]
`;

exports[`jeedom-node api datetime 1`] = `1541326095.9178`;
exports[`jeedom-node api datetime 1`] = `1541329049.7215`;

exports[`jeedom-node api event event::changes 1`] = `
Object {
"datetime": 1541326094.048,
"datetime": 1541329049.4544,
"result": Array [
Object {
"datetime": 1541325903.4416,
"name": "eqLogic::update",
"option": Object {
"eqLogic_id": "97",
},
"datetime": 1541328815.1576,
"name": "eibd::monitor",
"option": "{\\"Mode\\":\\"Write\\",\\"AdresseGroupe\\":\\"4\\\\/3\\\\/1\\",\\"AdressePhysique\\":\\"1.1.27\\",\\"data\\":\\"0x 0\\",\\"valeur\\":0,\\"DataPointType\\":\\"1.xxx\\",\\"cmdJeedom\\":\\"La commande n'exites pas\\",\\"datetime\\":\\"04-11-2018 11:53:35\\"}",
},
],
}
Expand All @@ -41,6 +39,75 @@ Array [
]
`;

exports[`jeedom-node api object object::full 1`] = `
Array [
Object {
"configuration": Object {},
"display": Object {},
"eqLogics": Array [
Object {
"category": Object {
"automatism": "1",
"default": "0",
"energy": "0",
"heating": "0",
"light": "0",
"multimedia": "0",
"security": "0",
},
"cmds": Array [
Object {
"alert": null,
"configuration": Object {},
"display": Object {},
"eqLogic_id": "119",
"eqType": "jeedouino",
"generic_type": "GENERIC_ACTION",
"html": null,
"id": "1479",
"isHistorized": "0",
"isVisible": "1",
"logicalId": "ID15a",
"name": "15_Send2LCD",
"order": "15",
"subType": "message",
"template": null,
"type": "action",
"unite": "",
"value": null,
},
],
"comment": null,
"configuration": Object {},
"display": Object {},
"eqReal_id": null,
"eqType_name": "jeedouino",
"generic_type": null,
"id": "119",
"isEnable": "1",
"isVisible": "1",
"logicalId": "",
"name": "Serre",
"object_id": "13",
"order": "0",
"status": Object {
"danger": 0,
"lastCommunication": "2018-09-20 08:10:08",
"timeout": 0,
"warning": 0,
},
"timeout": null,
},
],
"father_id": null,
"id": "13",
"isVisible": "1",
"name": "Automatismes",
"position": null,
},
]
`;

exports[`jeedom-node api ping 1`] = `"pong"`;

exports[`jeedom-node api version 1`] = `"3.2.11"`;
33 changes: 24 additions & 9 deletions tests/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
import { setupRecorder } from 'nock-record'
import { evolve, take, pipe, map, assoc } from 'ramda'
import { identity, evolve, take, pipe, map, assoc } from 'ramda'
import { createRecordTest } from './utils'
import Jeedom from '../src'
import { JEEDOM_HOST, JEEDOM_API_KEY } from './constants'

type GenericTransform = (x: any) => any
const prepareGenericData = (transform: GenericTransform) => pipe(
take(1),
map(pipe(
transform,
assoc('display', {}),
assoc('configuration', {}),
)),
)

describe('jeedom-node', () => {
describe('exports', () => {
test('default export should be a function', () => {
Expand Down Expand Up @@ -52,17 +62,22 @@ describe('jeedom-node', () => {
describe('object', () => {
recordTest('object::all', async () => {
const objects = await api.object.all()

const prepareData = pipe(
take(1),
map(pipe(
assoc('display', {}),
assoc('configuration', {}),
)),
)
const prepareData = prepareGenericData(identity)

expect(prepareData(objects)).toMatchSnapshot()
})

recordTest('object::full', async () => {
const fullObjects = await api.object.full()

const prepareData = prepareGenericData(evolve({
eqLogics: prepareGenericData(evolve({
cmds: prepareGenericData(identity),
})),
}))

expect(prepareData(fullObjects)).toMatchSnapshot()
})
})
})
})

0 comments on commit 79b0af9

Please sign in to comment.