Просмотр исходного кода

tests for last changes in auth

Rafał Pitoń 10 лет назад
Родитель
Сommit
fd8433e8bb

+ 28 - 8
misago/emberapp/app/services/auth.js

@@ -4,7 +4,7 @@ export default Ember.Service.extend({
   // State synchronization across tabs
 
   needsSync: false, // becomes true if auth state between tabs differs
-  syncToUser: false, // becomes user obj to which we want to sync or none for anon
+  syncToUser: null, // becomes user obj to which we want to sync or null for anon
 
   syncSession: function() {
     this.session.setItem('auth-user', this.get('user'));
@@ -12,17 +12,37 @@ export default Ember.Service.extend({
 
     var self = this;
     this.session.watchItem('auth-is-authenticated', function(isAuthenticated) {
-      if (!self.get('needsSync')) {
-        // display annoying "you were desynced" message
-        self.set('needsSync', true);
+      self._handleAuthChange(isAuthenticated);
+    });
 
-        if (isAuthenticated) {
-          self.set('syncToUser', Ember.Object.create(self.session.getItem('auth-user')));
-        }
-      }
+    this.session.watchItem('auth-user', function(newUser) {
+      self._handleUserChange(newUser);
     });
   }.on('init'),
 
+  _handleAuthChange: function(isAuthenticated) {
+    if (!this.get('needsSync')) {
+      // display annoying "you were desynced" message
+      this.set('needsSync', true);
+
+      if (isAuthenticated) {
+        this.set('syncToUser', Ember.Object.create(this.session.getItem('auth-user')));
+      }
+    }
+  },
+
+  _handleUserChange: function(newUser) {
+    var userObj = Ember.Object.create(newUser);
+    if (userObj.get('id') !== this.get('user.id')) {
+      this.setProperties({
+        'needsSync': true,
+        'syncToUser': userObj,
+      });
+    } else {
+      this.get('user').setProperties(newUser);
+    }
+  },
+
   // Anon/auth state
   isAnonymous: Ember.computed.not('isAuthenticated'),
 

+ 9 - 5
misago/emberapp/app/services/local-store.js

@@ -10,14 +10,18 @@ export default Ember.Service.extend({
 
     var self = this;
     window.addEventListener('storage', function(e) {
-      Ember.$.each(self.get('_watchers'), function(i, watcher) {
-        if (watcher.keyName === e.key) {
-          watcher.callback(e.newValue);
-        }
-      });
+      self._handleStorageEvent(e);
     });
   }.on('init'),
 
+  _handleStorageEvent: function(e) {
+    Ember.$.each(this.get('_watchers'), function(i, watcher) {
+      if (watcher.keyName === e.key) {
+        watcher.callback(e.newValue);
+      }
+    });
+  },
+
   prefixKey: function(keyName) {
     return this.get('_prefix') + keyName;
   },

+ 2 - 2
misago/emberapp/tests/acceptance/activate-test.js

@@ -156,7 +156,7 @@ test('request activation link with banned account', function(assert) {
   click('.activation-page form .btn-primary');
 
   andThen(function() {
-    var errorMessage = find('.lead p').text();
+    var errorMessage = find('.error-page .lead p').text();
     assert.equal(errorMessage, 'You are banned for trolling.');
 
     var expirationMessage = Ember.$.trim(find('.error-message>p').text());
@@ -223,7 +223,7 @@ test('permission denied is handled', function(assert) {
   andThen(function() {
     assert.equal(currentPath(), 'error-403');
 
-    var errorMessage = Ember.$.trim(find('.lead').text());
+    var errorMessage = Ember.$.trim(find('.error-page .lead').text());
     assert.equal(errorMessage, message);
   });
 });

+ 84 - 0
misago/emberapp/tests/acceptance/auth-service-test.js

@@ -0,0 +1,84 @@
+import Ember from 'ember';
+import { module, test } from 'qunit';
+import startApp from '../helpers/start-app';
+import createUser from '../helpers/create-user';
+
+var application, container, session, service;
+
+module('Acceptance: AuthService', {
+  beforeEach: function() {
+    application = startApp();
+    container = application.__container__;
+    session = container.lookup('store:local');
+    service = container.lookup('service:auth');
+  },
+  afterEach: function() {
+    Ember.run(application, 'destroy');
+  }
+});
+
+test('anon user was logged in', function(assert) {
+  assert.expect(2);
+
+  var user = createUser();
+
+  session.setItem('auth-user', user);
+  service._handleAuthChange(true);
+
+  assert.ok(service.get('needsSync'));
+  assert.equal(service.get('syncToUser.username'), user.get('username'));
+});
+
+test('authenticated user was logged out', function(assert) {
+  assert.expect(2);
+
+  var user = createUser();
+
+  service.setProperties({
+    'isAuthenticated': true,
+    'user': user
+  });
+
+  service._handleAuthChange(false);
+  assert.ok(service.get('needsSync'));
+  assert.equal(service.get('syncToUser'), null);
+});
+
+test('authenticated user was re-logged', function(assert) {
+  assert.expect(2);
+
+  var user = createUser();
+  var newUser = createUser({
+    id: user.get('id') + 123,
+    username: 'justKyle'
+  });
+
+  service.setProperties({
+    'isAuthenticated': true,
+    'user': user
+  });
+
+  service._handleUserChange(newUser);
+
+  assert.ok(service.get('needsSync'));
+  assert.equal(service.get('syncToUser.username'), newUser.get('username'));
+});
+
+test('authenticated user was updated', function(assert) {
+  assert.expect(2);
+
+  var user = createUser();
+  var newUser = createUser({
+    username: 'justKyle'
+  });
+
+  service.setProperties({
+    'isAuthenticated': true,
+    'user': user
+  });
+
+  service._handleUserChange(newUser);
+
+  assert.ok(!service.get('needsSync'));
+  assert.equal(service.get('user.username'), newUser.get('username'));
+});

+ 2 - 2
misago/emberapp/tests/acceptance/error-test.js

@@ -101,7 +101,7 @@ test('permission denied with reason', function(assert) {
 
   andThen(function() {
     assert.equal(currentPath(), 'error-403');
-    var $e = find('.lead');
+    var $e = find('.error-page .lead');
     assert.equal(Ember.$.trim($e.text()), 'Lorem ipsum dolor met.');
   });
 });
@@ -128,7 +128,7 @@ test('banned', function(assert) {
   andThen(function() {
     assert.equal(currentPath(), 'error-banned');
 
-    var errorMessage = find('.lead p').text();
+    var errorMessage = find('.error-page .lead p').text();
     assert.equal(errorMessage, 'You are banned.');
 
     var expirationMessage = Ember.$.trim(find('.error-message>p').text());

+ 1 - 1
misago/emberapp/tests/acceptance/forgotten-password-test.js

@@ -222,7 +222,7 @@ test('permission denied is handled', function(assert) {
   andThen(function() {
     assert.equal(currentPath(), 'error-403');
 
-    var errorMessage = Ember.$.trim(find('.lead').text());
+    var errorMessage = Ember.$.trim(find('.error-page .lead').text());
     assert.equal(errorMessage, message);
   });
 });

+ 47 - 0
misago/emberapp/tests/acceptance/local-store-test.js

@@ -0,0 +1,47 @@
+import Ember from 'ember';
+import { module, test } from 'qunit';
+import startApp from '../helpers/start-app';
+
+var application, container, service;
+
+module('Acceptance: LocalStore', {
+  beforeEach: function() {
+    application = startApp();
+    container = application.__container__;
+    service = container.lookup('store:local');
+  },
+  afterEach: function() {
+    Ember.run(application, 'destroy');
+  }
+});
+
+test('getItem and setItem', function(assert) {
+  assert.expect(2);
+
+  assert.equal(service.getItem('undefinedKey'), null);
+
+  var testKey = 'definedKey';
+  var testValue = 'definedValue';
+
+  service.setItem(testKey, testValue);
+  assert.equal(service.getItem(testKey), testValue);
+});
+
+test('registered watcher is fired', function(assert) {
+  var done = assert.async();
+  assert.expect(1);
+
+  var testKey = 'watchedKey';
+  var testValue = 'watchedValue';
+
+  service.watchItem(testKey, function(newValue) {
+    assert.equal(testValue, newValue);
+    done();
+  });
+
+  service._handleStorageEvent({key: 'unwatchedKey'});
+  service._handleStorageEvent({
+    key: service.prefixKey(testKey),
+    newValue: testValue
+  });
+});

+ 93 - 0
misago/emberapp/tests/helpers/create-user.js

@@ -0,0 +1,93 @@
+import Ember from 'ember';
+
+export default function createUser(newProps) {
+  var user = Ember.Object.create({
+    "id": 42,
+    "username": "BobBoberson",
+    "slug": "bobboberson",
+    "email": "bob@example.com",
+    "joined_on": "2015-05-04T20:16:41.084500Z",
+    "is_hiding_presence": false,
+    "title": null,
+    "full_title": "Forum team",
+    "short_title": "Team",
+    "rank": {
+        "id": 1,
+        "name": "Forum team",
+        "slug": "forum-team",
+        "description": null,
+        "title": "Team",
+        "css_class": "team",
+        "is_tab": true
+    },
+    "new_notifications": 0,
+    "limits_private_thread_invites_to": 0,
+    "unread_private_threads": 0,
+    "sync_unread_private_threads": false,
+    "subscribe_to_started_threads": 2,
+    "subscribe_to_replied_threads": 2,
+    "threads": 0,
+    "posts": 0,
+    "acl": {
+        "can_delete_users_newer_than": 3,
+        "can_see_users_name_history": 1,
+        "can_moderate_avatars": 1,
+        "can_be_warned": 0,
+        "can_see_reports": [
+            3,
+            4,
+            5
+        ],
+        "can_follow_users": 1,
+        "can_see_users_emails": 1,
+        "can_see_users_online_list": 1,
+        "can_moderate_signatures": 1,
+        "can_start_private_threads": 1,
+        "name_changes_allowed": 5,
+        "can_add_everyone_to_private_threads": 1,
+        "_acl_version": 0,
+        "can_rename_users": 0,
+        "can_browse_users_list": 1,
+        "allow_signature_links": 1,
+        "visible_forums": [
+            3,
+            4,
+            5
+        ],
+        "can_warn_users": 1,
+        "can_report_private_threads": 1,
+        "can_search_users": 1,
+        "can_use_private_threads": 1,
+        "can_be_blocked": 0,
+        "can_review_moderated_content": [
+            3,
+            4,
+            5,
+            1
+        ],
+        "can_delete_users_with_less_posts_than": 7,
+        "can_moderate_private_threads": 1,
+        "can_see_ban_details": 1,
+        "can_delete_warnings": 0,
+        "can_see_users_ips": 1,
+        "allow_signature_blocks": 0,
+        "can_ban_users": 0,
+        "max_ban_length": 2,
+        "can_have_signature": 1,
+        "allow_signature_images": 0,
+        "can_see_hidden_users": 1,
+        "max_private_thread_participants": 15,
+        "can_cancel_warnings": 1,
+        "name_changes_expire": 0,
+        "can_lift_bans": 0,
+        "max_lifted_ban_length": 2,
+        "can_see_other_users_warnings": 1
+    }
+  });
+
+  if (newProps) {
+    user.setProperties(newProps);
+  }
+
+  return user;
+}

+ 0 - 23
misago/emberapp/tests/unit/initializers/auth-service-test.js

@@ -1,23 +0,0 @@
-import Ember from 'ember';
-import { initialize } from '../../../initializers/auth-service';
-import { module, test } from 'qunit';
-
-var container, application;
-
-module('AuthServiceInitializer', {
-  beforeEach: function() {
-    Ember.run(function() {
-      application = Ember.Application.create();
-      container = application.__container__;
-      application.deferReadiness();
-    });
-  }
-});
-
-test('initializer registered auth and user', function(assert) {
-  assert.expect(1);
-
-  initialize(container, application);
-
-  assert.ok(container.lookup('service:auth'));
-});

+ 0 - 13
misago/emberapp/tests/unit/services/auth-test.js

@@ -1,13 +0,0 @@
-import {
-  moduleFor,
-  test
-} from 'ember-qunit';
-
-moduleFor('service:auth');
-
-test('it exists', function(assert) {
-  assert.expect(1);
-
-  var service = this.subject();
-  assert.ok(service);
-});