From 7406501b97a8cff3b9dab9ede5f8a32452f5144d Mon Sep 17 00:00:00 2001 From: Bartlomiej Dudzik Date: Fri, 13 Aug 2021 17:12:05 +0200 Subject: [PATCH] feat: put internal-session into DI system --- .../initializers/setup-session-service.js | 5 -- .../addon/initializers/setup-session.js | 7 +- .../addon/internal-session.js | 7 ++ .../addon/services/session.js | 3 + .../app/initializers/ember-simple-auth.js | 2 - .../setup-session-service-test.js | 12 +--- .../unit/initializers/setup-session-test.js | 70 ------------------- .../tests/unit/internal-session-store-test.js | 40 +++++++++++ .../tests/unit/internal-session-test.js | 20 ++---- .../mixins/application-route-mixin-test.js | 5 +- .../tests/unit/services/session-test.js | 24 ++----- 11 files changed, 65 insertions(+), 130 deletions(-) delete mode 100644 packages/ember-simple-auth/addon/initializers/setup-session-service.js delete mode 100644 packages/ember-simple-auth/tests/unit/initializers/setup-session-test.js create mode 100644 packages/ember-simple-auth/tests/unit/internal-session-store-test.js diff --git a/packages/ember-simple-auth/addon/initializers/setup-session-service.js b/packages/ember-simple-auth/addon/initializers/setup-session-service.js deleted file mode 100644 index 4748b4fce..000000000 --- a/packages/ember-simple-auth/addon/initializers/setup-session-service.js +++ /dev/null @@ -1,5 +0,0 @@ -import inject from '../utils/inject'; - -export default function setupSessionStore(registry) { - inject(registry, 'service:session', 'session', 'session:main'); -} diff --git a/packages/ember-simple-auth/addon/initializers/setup-session.js b/packages/ember-simple-auth/addon/initializers/setup-session.js index 05f7354c3..160c9a5f5 100644 --- a/packages/ember-simple-auth/addon/initializers/setup-session.js +++ b/packages/ember-simple-auth/addon/initializers/setup-session.js @@ -1,16 +1,11 @@ import Ember from 'ember'; import InternalSession from '../internal-session'; import Ephemeral from '../session-stores/ephemeral'; -import inject from '../utils/inject'; export default function setupSession(registry) { registry.register('session:main', InternalSession); - let store = 'session-store:application'; if (Ember.testing) { - store = 'session-store:test'; - registry.register(store, Ephemeral); + registry.register('session-store:test', Ephemeral); } - - inject(registry, 'session:main', 'store', store); } diff --git a/packages/ember-simple-auth/addon/internal-session.js b/packages/ember-simple-auth/addon/internal-session.js index fa6ed5da2..6f6ecdf22 100644 --- a/packages/ember-simple-auth/addon/internal-session.js +++ b/packages/ember-simple-auth/addon/internal-session.js @@ -1,3 +1,4 @@ +import Ember from 'ember'; import RSVP from 'rsvp'; import { isEmpty, isNone } from '@ember/utils'; import ObjectProxy from '@ember/object/proxy'; @@ -17,6 +18,12 @@ export default ObjectProxy.extend(Evented, { init() { this._super(...arguments); this.set('content', { authenticated: {} }); + let storeFactory = 'session-store:application'; + if (Ember.testing) { + storeFactory = 'session-store:test'; + } + + this.set('store', getOwner(this).lookup(storeFactory)); this._busy = false; this._bindToStoreEvents(); }, diff --git a/packages/ember-simple-auth/addon/services/session.js b/packages/ember-simple-auth/addon/services/session.js index ec40f5a67..3af9112ca 100644 --- a/packages/ember-simple-auth/addon/services/session.js +++ b/packages/ember-simple-auth/addon/services/session.js @@ -137,8 +137,11 @@ export default Service.extend(Evented, { */ attemptedTransition: alias('session.attemptedTransition'), + session: null, + init() { this._super(...arguments); + this.set('session', getOwner(this).lookup('session:main')); this._forwardSessionEvents(); }, diff --git a/packages/ember-simple-auth/app/initializers/ember-simple-auth.js b/packages/ember-simple-auth/app/initializers/ember-simple-auth.js index 595d2b15d..a0ac393de 100644 --- a/packages/ember-simple-auth/app/initializers/ember-simple-auth.js +++ b/packages/ember-simple-auth/app/initializers/ember-simple-auth.js @@ -1,7 +1,6 @@ import ENV from '../config/environment'; import Configuration from 'ember-simple-auth/configuration'; import setupSession from 'ember-simple-auth/initializers/setup-session'; -import setupSessionService from 'ember-simple-auth/initializers/setup-session-service'; import setupSessionRestoration from 'ember-simple-auth/initializers/setup-session-restoration'; import Adaptive from 'ember-simple-auth/session-stores/adaptive'; import LocalStorage from 'ember-simple-auth/session-stores/local-storage'; @@ -20,7 +19,6 @@ export default { registry.register('session-store:local-storage', LocalStorage); setupSession(registry); - setupSessionService(registry); setupSessionRestoration(registry); } }; diff --git a/packages/ember-simple-auth/tests/unit/initializers/setup-session-service-test.js b/packages/ember-simple-auth/tests/unit/initializers/setup-session-service-test.js index 503e7cf0c..c8f0a250f 100644 --- a/packages/ember-simple-auth/tests/unit/initializers/setup-session-service-test.js +++ b/packages/ember-simple-auth/tests/unit/initializers/setup-session-service-test.js @@ -1,17 +1,14 @@ import { describe, beforeEach, it } from 'mocha'; import { expect } from 'chai'; import sinonjs from 'sinon'; -import setupSessionService from 'ember-simple-auth/initializers/setup-session-service'; +import { setupTest } from 'ember-mocha'; describe('setupSessionService', () => { + setupTest(); let sinon; - let registry; beforeEach(function() { sinon = sinonjs.createSandbox(); - registry = { - injection() {} - }; }); afterEach(function() { @@ -19,9 +16,6 @@ describe('setupSessionService', () => { }); it('injects the session into the session service', function() { - sinon.spy(registry, 'injection'); - setupSessionService(registry); - - expect(registry.injection).to.have.been.calledWith('service:session', 'session', 'session:main'); + expect(this.owner.lookup('service:session').session).eq(this.owner.lookup('session:main')); }); }); diff --git a/packages/ember-simple-auth/tests/unit/initializers/setup-session-test.js b/packages/ember-simple-auth/tests/unit/initializers/setup-session-test.js deleted file mode 100644 index 311f4ab2a..000000000 --- a/packages/ember-simple-auth/tests/unit/initializers/setup-session-test.js +++ /dev/null @@ -1,70 +0,0 @@ -import Ember from 'ember'; -import { - describe, - beforeEach, - afterEach, - it -} from 'mocha'; -import { expect } from 'chai'; -import sinonjs from 'sinon'; -import setupSession from 'ember-simple-auth/initializers/setup-session'; -import Ephemeral from 'ember-simple-auth/session-stores/ephemeral'; -import InternalSession from 'ember-simple-auth/internal-session'; - -describe('setupSession', () => { - let sinon; - let registry; - - beforeEach(function() { - sinon = sinonjs.createSandbox(); - registry = { - register() {}, - injection() {} - }; - Ember.testing = true; // eslint-disable-line ember/no-ember-testing-in-module-scope - }); - - afterEach(function() { - sinon.restore(); - }); - - it('registers the session', function() { - sinon.spy(registry, 'register'); - setupSession(registry); - - expect(registry.register).to.have.been.calledWith('session:main', InternalSession); - }); - - describe('when Ember.testing is true', function() { - it('registers the test session store', function() { - sinon.spy(registry, 'register'); - setupSession(registry); - - expect(registry.register).to.have.been.calledWith('session-store:test', Ephemeral); - }); - - it('injects the test session store into the session', function() { - sinon.spy(registry, 'injection'); - setupSession(registry); - - expect(registry.injection).to.have.been.calledWith('session:main', 'store', 'session-store:test'); - }); - }); - - describe('when Ember.testing is false', function() { - beforeEach(function() { - Ember.testing = false; // eslint-disable-line ember/no-ember-testing-in-module-scope - }); - - afterEach(function() { - Ember.testing = true; // eslint-disable-line ember/no-ember-testing-in-module-scope - }); - - it('injects the application session store into the session', function() { - sinon.spy(registry, 'injection'); - setupSession(registry); - - expect(registry.injection).to.have.been.calledWith('session:main', 'store', 'session-store:application'); - }); - }); -}); diff --git a/packages/ember-simple-auth/tests/unit/internal-session-store-test.js b/packages/ember-simple-auth/tests/unit/internal-session-store-test.js new file mode 100644 index 000000000..d147da586 --- /dev/null +++ b/packages/ember-simple-auth/tests/unit/internal-session-store-test.js @@ -0,0 +1,40 @@ +import Ember from 'ember'; +import { describe, beforeEach, it } from 'mocha'; +import { setupApplicationTest } from 'ember-mocha'; +import { expect } from 'chai'; +import sinonjs from 'sinon'; + +describe('InternalSession store injection', () => { + setupApplicationTest(); + + let sinon; + let session; + + beforeEach(function() { + sinon = sinonjs.createSandbox(); + }); + + afterEach(function() { + sinon.restore(); + }); + + describe('session store injection', function() { + afterEach(function() { + Ember.testing = true; // eslint-disable-line ember/no-ember-testing-in-module-scope + }); + + it('looks up the test session store when Ember.testing true', function() { + Ember.testing = true; // eslint-disable-line ember/no-ember-testing-in-module-scope + + session = this.owner.lookup('session:main'); + expect(session.get('store')).to.eql(this.owner.lookup('session-store:test')); + }); + + it('looks up the application session store when Ember.testing false', function() { + Ember.testing = false; // eslint-disable-line ember/no-ember-testing-in-module-scope + + session = this.owner.lookup('session:main'); + expect(session.get('store')).to.eql(this.owner.lookup('session-store:application')); + }); + }); +}); diff --git a/packages/ember-simple-auth/tests/unit/internal-session-test.js b/packages/ember-simple-auth/tests/unit/internal-session-test.js index c1f46ecdf..53dc0f8b3 100644 --- a/packages/ember-simple-auth/tests/unit/internal-session-test.js +++ b/packages/ember-simple-auth/tests/unit/internal-session-test.js @@ -1,12 +1,9 @@ import RSVP from 'rsvp'; import { next } from '@ember/runloop'; -import { setOwner } from '@ember/application'; import { describe, beforeEach, it } from 'mocha'; import { setupTest } from 'ember-mocha'; import { expect } from 'chai'; import sinonjs from 'sinon'; -import InternalSession from 'ember-simple-auth/internal-session'; -import EphemeralStore from 'ember-simple-auth/session-stores/ephemeral'; import Authenticator from 'ember-simple-auth/authenticators/base'; describe('InternalSession', () => { @@ -20,12 +17,10 @@ describe('InternalSession', () => { beforeEach(function() { sinon = sinonjs.createSandbox(); - store = EphemeralStore.create(); - authenticator = Authenticator.create(); - this.owner.register('authenticator:test', authenticator, { instantiate: false }); - - session = InternalSession.create({ store }); - setOwner(session, this.owner); + this.owner.register('authenticator:test', Authenticator); + authenticator = this.owner.lookup('authenticator:test'); + session = this.owner.lookup('session:main'); + store = session.get('store'); }); afterEach(function() { @@ -808,11 +803,4 @@ describe('InternalSession', () => { }); }); }); - - it('does not share the content object between multiple instances', function() { - let session2 = InternalSession.create({ store }); - setOwner(session2, this.owner); - - expect(session2.get('content')).to.not.equal(session.get('content')); - }); }); diff --git a/packages/ember-simple-auth/tests/unit/mixins/application-route-mixin-test.js b/packages/ember-simple-auth/tests/unit/mixins/application-route-mixin-test.js index c7cdf2fd6..4644af209 100644 --- a/packages/ember-simple-auth/tests/unit/mixins/application-route-mixin-test.js +++ b/packages/ember-simple-auth/tests/unit/mixins/application-route-mixin-test.js @@ -8,8 +8,6 @@ import { setupTest } from 'ember-mocha'; import { expect } from 'chai'; import sinonjs from 'sinon'; import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'; -import InternalSession from 'ember-simple-auth/internal-session'; -import EphemeralStore from 'ember-simple-auth/session-stores/ephemeral'; import * as LocationUtil from 'ember-simple-auth/utils/location'; describe('ApplicationRouteMixin', () => { @@ -24,8 +22,7 @@ describe('ApplicationRouteMixin', () => { beforeEach(function() { sinon = sinonjs.createSandbox(); - session = InternalSession.create({ store: EphemeralStore.create() }); - this.owner.register('session:main', session, { instantiate: false }); + session = this.owner.lookup('session:main'); sessionService = this.owner.lookup('service:session'); this.owner.register('service:cookies', Service.extend({ diff --git a/packages/ember-simple-auth/tests/unit/services/session-test.js b/packages/ember-simple-auth/tests/unit/services/session-test.js index 818d122c2..9dc53add1 100644 --- a/packages/ember-simple-auth/tests/unit/services/session-test.js +++ b/packages/ember-simple-auth/tests/unit/services/session-test.js @@ -1,8 +1,5 @@ import Ember from 'ember'; -import ObjectProxy from '@ember/object/proxy'; import Service from '@ember/service'; -import { setOwner } from '@ember/application'; -import Evented from '@ember/object/evented'; import { next } from '@ember/runloop'; import EmberObject, { set } from '@ember/object'; import { registerDeprecationHandler } from '@ember/debug'; @@ -10,7 +7,6 @@ import { describe, beforeEach, it } from 'mocha'; import { setupTest } from 'ember-mocha'; import { expect } from 'chai'; import sinonjs from 'sinon'; -import Session from 'ember-simple-auth/services/session'; import * as LocationUtil from 'ember-simple-auth/utils/location'; describe('SessionService', () => { @@ -22,20 +18,12 @@ describe('SessionService', () => { beforeEach(function() { sinon = sinonjs.createSandbox(); - session = ObjectProxy.extend(Evented, { - init() { - this._super(...arguments); - this.content = {}; - } - }).create(); - this.owner.register('authorizer:custom', EmberObject.extend({ authorize() {} })); - sessionService = Session.create({ session }); - setOwner(sessionService, this.owner); - this.owner.register('service:session', sessionService, { instantiate: false }); + sessionService = this.owner.lookup('service:session'); + session = sessionService.get('session'); }); afterEach(function() { @@ -147,19 +135,19 @@ describe('SessionService', () => { it("is read from the session's content", function() { session.set('some', 'data'); - expect(sessionService.get('data')).to.eql({ some: 'data' }); + expect(sessionService.get('data')).to.eql({ some: 'data', authenticated: {} }); }); it("is written back to the session's content", function() { sessionService.set('data.some', { other: 'data' }); - expect(session.content).to.eql({ some: { other: 'data' } }); + expect(session.content).to.eql({ some: { other: 'data' }, authenticated: {} }); }); it('can be set with Ember.set', function() { set(sessionService, 'data.emberSet', 'ember-set-data'); - expect(session.content).to.eql({ emberSet: 'ember-set-data' }); + expect(session.content).to.eql({ emberSet: 'ember-set-data', authenticated: {} }); }); it('is read-only', function() { @@ -325,7 +313,7 @@ describe('SessionService', () => { it("does not set the session's 'attemptedTransition' property", function() { sessionService.requireAuthentication(null, 'login'); - expect(sessionService.get('attemptedTransition')).to.be.undefined; + expect(sessionService.get('attemptedTransition')).to.be.null; }); it('does not set the redirectTarget cookie in fastboot', function() {