From 7d51d7e93fef2d6d35f70d0a12c3327af0610025 Mon Sep 17 00:00:00 2001 From: Gordon Johnston Date: Sun, 4 Jun 2017 12:48:25 +0100 Subject: [PATCH 1/3] Add `basePath` property to firebase environment configuration Setting this property will cause all references to be prefixed by this path. --- addon/services/firebase.js | 7 +++-- tests/integration/base-path-test.js | 45 +++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 tests/integration/base-path-test.js diff --git a/addon/services/firebase.js b/addon/services/firebase.js index 7346096a..f598edf6 100644 --- a/addon/services/firebase.js +++ b/addon/services/firebase.js @@ -17,8 +17,11 @@ export default { } catch (e) { app = firebase.initializeApp(config.firebase); } - - return app.database().ref(); + if (config.firebase.basePath) { + return app.database().ref(config.firebase.basePath); + } else { + return app.database().ref(); + } }, config: null, diff --git a/tests/integration/base-path-test.js b/tests/integration/base-path-test.js new file mode 100644 index 00000000..df0d0c78 --- /dev/null +++ b/tests/integration/base-path-test.js @@ -0,0 +1,45 @@ +import Ember from 'ember'; +import startApp from 'dummy/tests/helpers/start-app'; +import destroyApp from 'dummy/tests/helpers/destroy-app'; +import { it } from 'mocha'; +import { expect } from 'chai'; +import config from '../../config/environment'; + +const { set } = Ember; + +describe('Integration: FirebaseAdapter - Base Path', function() { + var app, store, adapter; + + beforeEach(function() { + set(config, 'firebase.basePath','base/path'); + app = startApp(); + + store = app.__container__.lookup('service:store'); + adapter = store.adapterFor('application'); + }); + + afterEach(function() { + destroyApp(app); + set(config, 'firebase.basePath', undefined); + }); + + describe('#init()', function() { + it('has a Firebase ref', function() { + expect(adapter._ref !== undefined, 'ref is defined').to.be.ok; + }); + }); + + describe('#_getCollectionRef()', function() { + it('returns the correct Firebase ref for a type', function() { + var ref = adapter._getCollectionRef(store.modelFor('post')); + console.log(ref.toString()); + expect(ref.toString()).to.match(/base\/path\/posts$/g); + }); + + it('returns the correct Firebase ref for a type and id', function() { + var ref = adapter._getCollectionRef(store.modelFor('post'), 'post_1'); + expect(ref.toString()).to.match(/base\/path\/posts\/post_1$/g); + }); + + }); +}); From 21be53e57be0fe73aeb71b34da71411cd9cfefa4 Mon Sep 17 00:00:00 2001 From: Gordon Johnston Date: Sun, 4 Jun 2017 13:06:38 +0100 Subject: [PATCH 2/3] Remove unnecessary log message --- tests/integration/base-path-test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/integration/base-path-test.js b/tests/integration/base-path-test.js index df0d0c78..1b85e034 100644 --- a/tests/integration/base-path-test.js +++ b/tests/integration/base-path-test.js @@ -32,7 +32,6 @@ describe('Integration: FirebaseAdapter - Base Path', function() { describe('#_getCollectionRef()', function() { it('returns the correct Firebase ref for a type', function() { var ref = adapter._getCollectionRef(store.modelFor('post')); - console.log(ref.toString()); expect(ref.toString()).to.match(/base\/path\/posts$/g); }); From 54f7b9c684599c740f5003dfe3edbcdc96f41675 Mon Sep 17 00:00:00 2001 From: Gordon Johnston Date: Sun, 4 Jun 2017 13:16:22 +0100 Subject: [PATCH 3/3] Add log message to show base path --- tests/integration/base-path-test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration/base-path-test.js b/tests/integration/base-path-test.js index 1b85e034..df0d0c78 100644 --- a/tests/integration/base-path-test.js +++ b/tests/integration/base-path-test.js @@ -32,6 +32,7 @@ describe('Integration: FirebaseAdapter - Base Path', function() { describe('#_getCollectionRef()', function() { it('returns the correct Firebase ref for a type', function() { var ref = adapter._getCollectionRef(store.modelFor('post')); + console.log(ref.toString()); expect(ref.toString()).to.match(/base\/path\/posts$/g); });