ember.jsfirebasefirebase-authenticationfirebase-securityemberfire

Ember/Emberfire + Firebase 3 Acceptance Test


Prior to firebase 3 update our acceptance test have been running without any issues. We use the following in our beforeTest and afterTest

moduleForAcceptance('Acceptance | Dashboard | Items | Library | New', {
  beforeEach() {
    stubFirebase();
    var ref = createOfflineRef(basicDataRef, 'https://MY-APP.firebaseio.com');
    replaceAppRef(this.application, ref);
    stubValidSession(this.application, {uid: 'xxxx'});
  },
  afterEach() {
    unstubFirebase();
  }
});

basicDataRef is a fixture for the test. The above code allows my to mock session following the test-helper in torii library to allow my application to correctly obtain the data needed as my firebase hieararchy is as follows: / +--uid +--profile +--otherdata

I am not testing for permission rules, just interaction to save/edit data in the application, and this has worked OK prior to firebase 3 migration. After version 3 all my test returns the following:

    actual: >
        false
    expected: >
        true
    stack: >
            at http://localhost:7357/assets/test-support.js:4130:12
            at exports.default._emberTestingAdaptersAdapter.default.extend.exception (http://localhost:7357/assets/vendor.js:49473:7)
            at onerrorDefault (http://localhost:7357/assets/vendor.js:41461:24)
            at Object.exports.default.trigger (http://localhost:7357/assets/vendor.js:62212:11)
            at http://localhost:7357/assets/vendor.js:63463:40
            at Queue.invoke (http://localhost:7357/assets/vendor.js:10415:16)
    message: >
        Error: permission_denied at /xxxx/profile: Client doesn't have permission to access the desired data.

I always thought the createOfflineRef in emberfire allows us to bypass rules checking. the fact that it keeps returning permission_denied is quite perplexing. Maybe i need to re-engineer the test? Or I approach this wrongly all this time? Any input is greatly appreciated


Solution

  • Got to the bottom of this, and I guess I'll answer my own questions in case somebody else experience the same issue as I have.

    the new firebase InitializeApp method has an additional optional parameter called name. By default, Emberfire service sets this name to be:

    export const DEFAULT_NAME = '[EmberFire default app]';
    

    However the Emberfire test helper to create firebase offline ref stubs the firebase instance with a different instance name to be:

    export const DEFAULT_NAME = '[EmberFire offline test app]';
    

    This cause my test to fail with permission denied, as the acceptance test is attempting to connect to the '[EmberFire default app]' and the stubbed offline reference is called something else.

    Creating my own create-offline-ref helper substituting the DEFAULT_NAME to '[EmberFire default app]' solves the problem. I'm not sure as to what is the best practice for acceptance test as the change seems deliberate on emberfire.