Add login test. Fix bugs in socket teardown, RPC retry. Remove chunk of broken merge code pending rewrite.
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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') {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user