Browse Source

Services cleanup

* PreloadStore moved into injected service
* CSRF moved into injected service
* RPC rewritten to use Ember-Data and Django-Rest-Framework API’s
instead of their own.
Rafał Pitoń 10 years ago
parent
commit
62f9f1af93

+ 3 - 3
misago/emberapp/app/initializers/auth-service.js

@@ -1,10 +1,10 @@
-import MisagoPreloadStore from 'misago/utils/preloadstore';
+import PreloadStore from 'misago/services/preload-store';
 import Auth from 'misago/services/auth';
 
 export function initialize(container, application) {
   var auth = Auth.create({
-    'isAuthenticated': MisagoPreloadStore.get('isAuthenticated'),
-    'user': MisagoPreloadStore.get('user')
+    'isAuthenticated': PreloadStore.get('isAuthenticated'),
+    'user': PreloadStore.get('user')
   });
 
   application.register('misago:auth', auth, { instantiate: false });

+ 1 - 1
misago/emberapp/app/initializers/csrf-service.js

@@ -3,7 +3,7 @@ import CSRFService from 'misago/services/csrf';
 export function initialize(container, application) {
   application.register('service:csrf', CSRFService, { singleton: true });
 
-  application.inject('service:csrf', 'preloadedStore', 'misago:preloaded-data');
+  application.inject('service:csrf', 'preloadStore', 'service:preload-store');
 
   [ 'controller', 'adapter' ].forEach((factory) => {
     application.inject(factory, 'csrf', 'service:csrf');

+ 0 - 11
misago/emberapp/app/initializers/misago-preloaded-data.js

@@ -1,11 +0,0 @@
-import MisagoPreloadStore from 'misago/utils/preloadstore';
-
-export function initialize(container, application) {
-  application.register('misago:preload-store', MisagoPreloadStore, { instantiate: false });
-  application.inject('route', 'preloadStore', 'misago:preload-store');
-}
-
-export default {
-  name: 'misago-preloaded-data',
-  initialize: initialize
-};

+ 4 - 4
misago/emberapp/app/initializers/misago-settings.js

@@ -1,14 +1,14 @@
-import MisagoPreloadStore from 'misago/utils/preloadstore';
+import PreloadStore from 'misago/services/preload-store';
 
 export function initialize(container, application) {
-  application.register('misago:settings', MisagoPreloadStore.get('misagoSettings'), { instantiate: false });
+  application.register('misago:settings', PreloadStore.get('misagoSettings'), { instantiate: false });
   application.inject('route', 'settings', 'misago:settings');
   application.inject('controller', 'settings', 'misago:settings');
 
-  application.register('misago:static-url', MisagoPreloadStore.get('staticUrl'), { instantiate: false });
+  application.register('misago:static-url', PreloadStore.get('staticUrl'), { instantiate: false });
   application.inject('controller', 'staticUrl', 'misago:static-url');
 
-  application.register('misago:media-url', MisagoPreloadStore.get('mediaUrl'), { instantiate: false });
+  application.register('misago:media-url', PreloadStore.get('mediaUrl'), { instantiate: false });
   application.inject('controller', 'mediaUrl', 'misago:media-url');
 }
 

+ 11 - 0
misago/emberapp/app/initializers/preload-store.js

@@ -0,0 +1,11 @@
+import PreloadStore from 'misago/services/preload-store';
+
+export function initialize(container, application) {
+  application.register('service:preload-store', PreloadStore, { instantiate: false });
+  application.inject('route', 'preloadStore', 'service:preload-store');
+}
+
+export default {
+  name: 'preload-store',
+  initialize: initialize
+};

+ 2 - 2
misago/emberapp/app/services/csrf.js

@@ -1,10 +1,10 @@
 import Ember from 'ember';
 import ENV from '../config/environment';
 
-export default Ember.Object.extend({
+export default Ember.Service.extend({
   cookieName: function() {
     return this.preloadStore.get('csrfCookieName');
-  }.property.volatile(),
+  }.property().volatile(),
 
   token: function() {
     var regex = new RegExp(this.get('cookieName') + '\=([^;]*)');

+ 0 - 0
misago/emberapp/app/utils/preloadstore.js → misago/emberapp/app/services/preload-store.js


+ 2 - 2
misago/emberapp/app/utils/datetime-formats.js

@@ -1,7 +1,7 @@
-import MisagoPreloadStore from 'misago/utils/preloadstore';
+import PreloadStore from 'misago/services/preload-store';
 
 export function local(datetime) {
-  return datetime.utcOffset(MisagoPreloadStore.get('utcOffset') / 60);
+  return datetime.utcOffset(PreloadStore.get('utcOffset') / 60);
 }
 
 export default function datetimeFormats() {

+ 61 - 0
misago/emberapp/tests/acceptance/csrf-service-test.js

@@ -0,0 +1,61 @@
+import Ember from 'ember';
+import { module, test } from 'qunit';
+import startApp from '../helpers/start-app';
+
+var application, store, cookie, service;
+
+module('Acceptance: CSRF Service', {
+  beforeEach: function() {
+    application = startApp();
+    var container = application.__container__;
+
+    store = container.lookup('service:preload-store');
+    cookie = store.get('csrfCookieName');
+
+    service = container.lookup('service:csrf');
+  },
+
+  afterEach: function() {
+    Ember.run(application, 'destroy');
+    store.set('csrfCookieName', cookie);
+  }
+});
+
+test('cookieName property is valid csrf cookie name', function(assert) {
+  assert.expect(2);
+
+  store.set('csrfCookieName', 'testCSRFCookie');
+  assert.equal(service.get('cookieName'), 'testCSRFCookie');
+
+  store.set('csrfCookieName', 'wololoLolo');
+  assert.equal(service.get('cookieName'), 'wololoLolo');
+});
+
+test('token property is valid csrf token', function(assert) {
+  assert.expect(1);
+
+  var cookieName = 'validcsrfcookie';
+  var token = 'v4l1dc5rft0k3n';
+
+  document.cookie = cookieName + '=' + token + ';';
+
+  store.set('csrfCookieName', cookieName);
+  assert.equal(service.get('token'), token);
+});
+
+test('updateFormToken updates csrf token in given form', function(assert) {
+  assert.expect(1);
+
+  var $form = Ember.$('<form>');
+  $form.append(Ember.$('<input type="hidden" name="csrfmiddlewaretoken" value="oldtoken">'));
+
+  var cookieName = 'insertedcsrfcookie';
+  var token = 'insertedtoken';
+
+  document.cookie = cookieName + '=' + token + ';';
+  store.set('csrfCookieName', cookieName);
+
+  service.updateFormToken($form);
+
+  assert.equal($form.find('input').val(), token);
+});

+ 56 - 0
misago/emberapp/tests/acceptance/document-title-mixin-test.js

@@ -0,0 +1,56 @@
+import Ember from 'ember';
+import { module, test } from 'qunit';
+import startApp from '../helpers/start-app';
+import DocumentTitle from 'misago/mixins/document-title';
+
+var application, container, store, title, forum_name;
+
+module('Acceptance: Page Title Mixin', {
+  beforeEach: function() {
+    title = document.title;
+
+    application = startApp();
+    container = application.__container__;
+
+    forum_name = container.resolve('misago:settings').forum_name;
+  },
+
+  afterEach: function() {
+    document.title = title;
+    container.resolve('misago:settings').forum_name = forum_name;
+
+    Ember.run(application, 'destroy');
+  }
+});
+
+test('setTitle changes document title', function(assert) {
+  assert.expect(5);
+
+  var TestRoute = Ember.Object.extend(DocumentTitle, {
+    settings: container.resolve('misago:settings')
+  });
+
+  container.resolve('misago:settings').forum_name = 'Test Forum';
+
+  var mixin = TestRoute.create();
+
+  // string argument
+  mixin.set('title', 'Welcome!');
+  assert.equal(document.title, 'Welcome! | Test Forum');
+
+  // object argument
+  mixin.set('title', {title: 'Thread'});
+  assert.equal(document.title, 'Thread | Test Forum');
+
+  // object argument with parent
+  mixin.set('title', {title: 'Test Thread', parent: 'Support'});
+  assert.equal(document.title, 'Test Thread | Support | Test Forum');
+
+  // object argument with page
+  mixin.set('title', {title: 'Test Thread', page: 12});
+  assert.equal(document.title, 'Test Thread (page 12) | Test Forum');
+
+  // object argument with page and parent
+  mixin.set('title', {title: 'Test Thread', page: 12, parent: 'Support'});
+  assert.equal(document.title, 'Test Thread (page 12) | Support | Test Forum');
+});

+ 4 - 4
misago/emberapp/tests/acceptance/rpc-service-test.js

@@ -64,7 +64,7 @@ test('successful RPC', function(assert) {
   service.ajax('some-rpc').then(function(data) {
     assert.equal(data.detail, 'it works');
   }, function() {
-    assert.fail('rpc call should pass');
+    assert.ok(false, 'rpc call should pass');
   }).finally(function() {
     assert.ok(true, 'finally() was called');
     done();
@@ -84,7 +84,7 @@ test('failed RPC', function(assert) {
   });
 
   service.ajax('some-rpc').then(function() {
-    assert.fail('rpc call should fail');
+    assert.ok(false, 'rpc call should fail');
   }, function(jqXHR) {
     var rejection = jqXHR.responseJSON;
     assert.equal(rejection.detail, 'it fails');
@@ -124,7 +124,7 @@ test('successful model RPC', function(assert) {
       service.ajax(record, 'some-rpc').then(function(data) {
         assert.equal(data.detail, 'it works');
       }, function() {
-        assert.fail('rpc call should pass');
+        assert.ok(false, 'rpc call should pass');
       }).finally(function() {
         assert.ok(true, 'finally() was called');
         done();
@@ -161,7 +161,7 @@ test('failed model RPC', function(assert) {
 
     store.find('legal-page', 'privacy-policy').then(function(record) {
       service.ajax(record, 'some-rpc').then(function() {
-        assert.fail('rpc call should fail');
+        assert.ok(false, 'rpc call should fail');
       }, function(jqXHR) {
         var rejection = jqXHR.responseJSON;
         assert.equal(rejection.detail, 'it failed');

+ 4 - 4
misago/emberapp/tests/unit/initializers/misago-settings-test.js

@@ -1,6 +1,6 @@
 import Ember from 'ember';
 import { initialize } from 'misago/initializers/misago-settings';
-import MisagoPreloadStore from 'misago/utils/preloadstore';
+import PreloadStore from 'misago/services/preload-store';
 import { module, test } from 'qunit';
 
 var container, application;
@@ -20,8 +20,8 @@ test('registers preloaded configuration in Ember', function(assert) {
 
   initialize(container, application);
 
-  assert.equal(container.lookup('misago:static-url'), MisagoPreloadStore.get('staticUrl'));
-  assert.equal(container.lookup('misago:media-url'), MisagoPreloadStore.get('mediaUrl'));
-  assert.equal(container.lookup('misago:settings'), MisagoPreloadStore.get('misagoSettings'));
+  assert.equal(container.lookup('misago:static-url'), PreloadStore.get('staticUrl'));
+  assert.equal(container.lookup('misago:media-url'), PreloadStore.get('mediaUrl'));
+  assert.equal(container.lookup('misago:settings'), PreloadStore.get('misagoSettings'));
 });
 

+ 11 - 1
misago/emberapp/tests/unit/mixins/document-title-test.js

@@ -2,7 +2,17 @@ import Ember from 'ember';
 import DocumentTitleMixin from '../../../mixins/document-title';
 import { module, test } from 'qunit';
 
-module('DocumentTitleMixin');
+var title;
+
+module('DocumentTitleMixin', {
+  beaforeEach: function() {
+    title = document.title;
+  },
+
+  afterEach: function() {
+    document.title = title;
+  }
+});
 
 // Replace this with your real tests.
 test('it works', function(assert) {

+ 0 - 67
misago/emberapp/tests/unit/services/page-title-test.js

@@ -1,67 +0,0 @@
-import {
-  moduleFor,
-  test
-} from 'ember-qunit';
-
-moduleFor('service:page-title', {
-  needs: ['initializer:misago-settings']
-});
-
-test('it exists', function(assert) {
-  var service = this.subject();
-  assert.ok(service);
-});
-
-test('setTitle changes document title', function(assert) {
-  assert.expect(5);
-
-  var service = this.subject();
-  service.set('forumName', 'Test Forum');
-
-  // string argument
-  service.setTitle('Welcome!');
-  assert.equal(document.title, 'Welcome! | Test Forum');
-
-  // object argument
-  service.setTitle({title: 'Thread'});
-  assert.equal(document.title, 'Thread | Test Forum');
-
-  // object argument with parent
-  service.setTitle({title: 'Test Thread', parent: 'Support'});
-  assert.equal(document.title, 'Test Thread | Support | Test Forum');
-
-  // object argument with page
-  service.setTitle({title: 'Test Thread', page: 12});
-  assert.equal(document.title, 'Test Thread (page 12) | Test Forum');
-
-  // object argument with page and parent
-  service.setTitle({title: 'Test Thread', page: 12, parent: 'Support'});
-  assert.equal(document.title, 'Test Thread (page 12) | Support | Test Forum');
-});
-
-test('setPlaceholderTitle changes document title to one defined for index', function(assert) {
-  assert.expect(1);
-
-  var service = this.subject();
-  service.set('forumName', 'Placeholder Test Forum');
-
-  // no index title is set
-  service.setPlaceholderTitle();
-  assert.equal(document.title, 'Placeholder Test Forum');
-});
-
-test('setIndexTitle changes document title to one defined for index', function(assert) {
-  assert.expect(2);
-
-  var service = this.subject();
-  service.set('forumName', 'Test Forum');
-
-  // no index title is set
-  service.setIndexTitle();
-  assert.equal(document.title, 'Test Forum');
-
-  // index title is set
-  service.set('indexTitle', 'Test Forum Index');
-  service.setIndexTitle();
-  assert.equal(document.title, 'Test Forum Index');
-});

+ 1 - 1
misago/emberapp/tests/unit/utils/preloadstore-test.js → misago/emberapp/tests/unit/services/preload-store-test.js

@@ -1,4 +1,4 @@
-import PreloadStore from '../../../utils/preloadstore';
+import PreloadStore from '../../../services/preload-store';
 import { module, test } from 'qunit';
 
 module('PreloadStore');

+ 0 - 15
misago/emberapp/tests/unit/services/zxcvb-test.js

@@ -1,15 +0,0 @@
-import {
-  moduleFor,
-  test
-} from 'ember-qunit';
-
-moduleFor('service:zxcvb', {
-  // Specify the other units that are required for this test.
-  // needs: ['service:foo']
-});
-
-// Replace this with your real tests.
-test('it exists', function(assert) {
-  var service = this.subject();
-  assert.ok(service);
-});