Add login test. Fix bugs in socket teardown, RPC retry. Remove chunk of broken merge code pending rewrite.

This commit is contained in:
Ian Gulliver
2014-05-15 19:43:09 +03:00
parent 0b037e899a
commit 482feee804
3 changed files with 28 additions and 22 deletions

View File

@@ -54,25 +54,7 @@ class Profile(db.Model):
# Merge from another profile into this one, using last_set time as the # Merge from another profile into this one, using last_set time as the
# arbiter. # arbiter.
# TODO: this is totally broken # TODO: this is totally broken
my_states = {} pass
for state_entry in self.GetStateEntries():
my_states[state_entry.entry_key] = state_entry
for state_entry in (StateEntry.all()
.ancestor(source_profile)
.run()):
my_state_entry = my_states.get(state_entry.entry_key, None)
if my_state_entry:
if state_entry.last_set > my_state_entry.last_set:
# newer, merge in
my_state_entry.entry_value = state_entry.entry_value
my_state_entry.put()
else:
# entirely new, add
StateEntry(parent=self,
entry_key=state_entry.entry_key,
entry_value=state_entry.entry_value
).put()
class Client(db.Model): class Client(db.Model):

View File

@@ -187,13 +187,17 @@ Cosmopolite.prototype.onLoad_ = function() {
Cosmopolite.prototype.onReceiveMessage_ = function(data) { Cosmopolite.prototype.onReceiveMessage_ = function(data) {
switch (data) { switch (data) {
case 'login_complete': case 'login_complete':
this.socket_.close(); if (this.socket_) {
this.socket_.close();
}
break; break;
case 'logout_complete': case 'logout_complete':
localStorage.removeItem(this.namespace_ + ':client_id'); localStorage.removeItem(this.namespace_ + ':client_id');
localStorage.removeItem(this.namespace_ + ':google_user_id'); localStorage.removeItem(this.namespace_ + ':google_user_id');
this.$('#google_user').empty(); this.$('#google_user').empty();
this.socket_.close(); if (this.socket_) {
this.socket_.close();
}
break; break;
default: default:
console.log('cosmopolite: unknown event type:', data); console.log('cosmopolite: unknown event type:', data);
@@ -284,7 +288,7 @@ Cosmopolite.prototype.sendRPCs_ = function(commands, delay) {
} }
if (data['status'] == 'retry') { if (data['status'] == 'retry') {
// Discard delay // Discard delay
this.sendRPCs_(commands, onSuccess); this.sendRPCs_(commands);
return; return;
} }
if (data['status'] != 'ok') { if (data['status'] != 'ok') {

View File

@@ -182,3 +182,23 @@ asyncTest('Complex object', function() {
var cosmo1 = new Cosmopolite(callbacks1, null, randstring()); var cosmo1 = new Cosmopolite(callbacks1, null, randstring());
var cosmo2 = new Cosmopolite(callbacks2, null, randstring()); var cosmo2 = new Cosmopolite(callbacks2, null, randstring());
}); });
module('dev_appserver only');
asyncTest('Login', function() {
expect(2);
var callbacks = {
'onLogin': function(login_url) {
ok(true, 'onLogin fired');
cosmo.shutdown();
start();
},
'onLogout': function(login_url) {
ok(true, 'onLogout fired');
// Entirely magic URL that sets the login cookie and redirects.
window.open('/_ah/login?email=test%40example.com&action=Login&continue=/cosmopolite/static/login_complete.html');
}
};
var cosmo = new Cosmopolite(callbacks);
});