diff --git a/functions/firebase/index.js b/functions/firebase/index.js index 69d049d86b..4c21d8c0bb 100644 --- a/functions/firebase/index.js +++ b/functions/firebase/index.js @@ -115,3 +115,18 @@ exports.helloAnalytics = (event) => { console.log(`Location: ${userObj.geoInfo.city}, ${userObj.geoInfo.country}`); }; // [END functions_firebase_analytics] + +// [START functions_firebase_remote_config] +/** + * Triggered by a change to a Firebase Remote Config value. + * + * @param {object} data The Cloud Functions event data. + */ +exports.helloRemoteConfig = (event) => { + const data = event.data; + + console.log(`Update type: ${data.updateType}`); + console.log(`Origin: ${data.updateOrigin}`); + console.log(`Version: ${data.versionNumber}`); +}; +// [END functions_firebase_remote_config] diff --git a/functions/firebase/test/index.test.js b/functions/firebase/test/index.test.js index 9dd6303f3b..e47ec0704f 100644 --- a/functions/firebase/test/index.test.js +++ b/functions/firebase/test/index.test.js @@ -107,7 +107,7 @@ test(`should listen to Auth events`, t => { t.true(console.log.calledWith(`Email: me@example.com`)); }); -test.serial('should monitor Analytics', t => { +test.serial('should listen to Analytics events', t => { const date = new Date(); const event = { data: { @@ -137,30 +137,20 @@ test.serial('should monitor Analytics', t => { t.is(console.log.args[4][0], `Location: London, UK`); }); -test(`should update data in response to Firestore events`, t => { +test(`should listen to Remote Config events`, t => { const sample = getSample(); - const date = Date.now(); const event = { - resource: '/documents/some/path', data: { - email: 'me@example.com', - metadata: { - createdAt: date - }, - value: { - fields: { - original: { - stringValue: 'foobar' - } - } - } + updateOrigin: 'CONSOLE', + updateType: 'INCREMENTAL_UPDATE', + versionNumber: '1' } }; - sample.program.makeUpperCase(event); + sample.program.helloRemoteConfig(event); - t.true(sample.mocks.firestore.doc.calledWith('some/path')); - t.true(console.log.calledWith(`Replacing value: foobar --> FOOBAR`)); - t.true(sample.mocks.firestore.set.calledWith({'original': 'FOOBAR'})); + t.true(console.log.calledWith(`Update type: INCREMENTAL_UPDATE`)); + t.true(console.log.calledWith(`Origin: CONSOLE`)); + t.true(console.log.calledWith(`Version: 1`)); }); diff --git a/functions/node8/index.js b/functions/node8/index.js index 67171a5f98..66a5a8ca38 100644 --- a/functions/node8/index.js +++ b/functions/node8/index.js @@ -281,3 +281,16 @@ exports.makeUpperCase = (data, context) => { }); }; // [END functions_firebase_reactive_node8] + +// [START functions_firebase_remote_config_node8] +/** + * Triggered by a change to a Firebase Remote Config value. + * + * @param {object} data The Cloud Functions event data. + */ +exports.helloRemoteConfig = (data) => { + console.log(`Update type: ${data.updateType}`); + console.log(`Origin: ${data.updateOrigin}`); + console.log(`Version: ${data.versionNumber}`); +}; +// [END functions_firebase_remote_config_node8] diff --git a/functions/node8/test/index.test.js b/functions/node8/test/index.test.js index 20c79738d7..5f854425dd 100644 --- a/functions/node8/test/index.test.js +++ b/functions/node8/test/index.test.js @@ -252,3 +252,19 @@ test(`should update data in response to Firestore events`, t => { t.true(console.log.calledWith(`Replacing value: foobar --> FOOBAR`)); t.true(sample.mocks.firestore.set.calledWith({'original': 'FOOBAR'})); }); + +test(`should listen to Firebase Remote Config events`, t => { + const sample = getSample(); + + const data = { + updateOrigin: 'CONSOLE', + updateType: 'INCREMENTAL_UPDATE', + versionNumber: '1' + }; + + sample.program.helloRemoteConfig(data); + + t.true(console.log.calledWith(`Update type: INCREMENTAL_UPDATE`)); + t.true(console.log.calledWith(`Origin: CONSOLE`)); + t.true(console.log.calledWith(`Version: 1`)); +});