2019-11-21 22:14:27 +00:00
|
|
|
import { Serializer } from "../common/Serializer";
|
|
|
|
import { testing } from "../common/Testing";
|
|
|
|
import { items, iterator, nn, nnf } from "../common/Tools";
|
|
|
|
import { GameSession } from "../core/GameSession";
|
|
|
|
import { Player } from "../core/Player";
|
2019-11-22 22:17:32 +00:00
|
|
|
import { NAMESPACE } from "../core/Saving";
|
2019-11-21 22:14:27 +00:00
|
|
|
import { Connection } from "./Connection";
|
|
|
|
import { FakeRemoteStorage } from "./RemoteStorage";
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
testing("Connection", test => {
|
|
|
|
test.acase("finds an unused token", async check => {
|
|
|
|
let storage = new FakeRemoteStorage();
|
|
|
|
let connection = new Connection("test", storage);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
let token = await connection.getUnusedToken(5);
|
|
|
|
check.equals(token.length, 5);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
await storage.upsert("sessioninfo", { token: token }, {});
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
check.patch(connection, "generateToken", nnf("", iterator([token, "123456"])));
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
let other = await connection.getUnusedToken(5);
|
|
|
|
check.equals(other, "123456");
|
|
|
|
});
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
test.acase("loads a session by its id", async check => {
|
|
|
|
let session = new GameSession();
|
|
|
|
let serializer = new Serializer(NAMESPACE);
|
|
|
|
let storage = new FakeRemoteStorage();
|
|
|
|
let connection = new Connection("test", storage);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
let result = await connection.loadById("abc");
|
|
|
|
check.equals(result, null);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
await storage.upsert("session", { ref: "abc" }, { data: serializer.serialize(session) });
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
result = await connection.loadById("abc");
|
|
|
|
check.equals(result, session);
|
|
|
|
result = await connection.loadById("abcd");
|
|
|
|
check.equals(result, null);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
// even from another device
|
|
|
|
let other = new Connection("notest", storage);
|
|
|
|
result = await other.loadById("abc");
|
|
|
|
check.equals(result, session);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
// do not load if it is not a GameSession
|
|
|
|
await storage.upsert("session", { ref: "abcd" }, { data: serializer.serialize(new Player()) });
|
|
|
|
result = await connection.loadById("abcd");
|
|
|
|
check.equals(result, null);
|
|
|
|
});
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
test.acase("lists saves from a device", async check => {
|
|
|
|
let storage = new FakeRemoteStorage();
|
|
|
|
let connection = new Connection("test", storage);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
let result = await connection.listSaves();
|
|
|
|
check.equals(result, {});
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
await storage.upsert("sessioninfo", { device: "test", ref: "abc" }, { info: "ABC" });
|
|
|
|
await storage.upsert("sessioninfo", { device: "other", ref: "abcd" }, { info: "ABCD" });
|
|
|
|
await storage.upsert("sessioninfo", { device: "test", ref: "cba" }, { info: "CBA" });
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
result = await connection.listSaves();
|
|
|
|
check.equals(result, { abc: "ABC", cba: "CBA" });
|
|
|
|
});
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
test.acase("publishes saves and retrieves them by token", async check => {
|
|
|
|
let session = new GameSession();
|
|
|
|
let storage = new FakeRemoteStorage();
|
|
|
|
let connection = new Connection("test", storage);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
let saves = await connection.listSaves();
|
|
|
|
check.equals(items(saves).length, 0);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
let token = await connection.publish(session, "TEST");
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
saves = await connection.listSaves();
|
|
|
|
check.equals(items(saves).length, 1);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
let loaded = await connection.loadByToken(token);
|
|
|
|
check.equals(loaded, session);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
let newtoken = await connection.publish(nn(loaded), "TEST");
|
|
|
|
check.equals(token, newtoken);
|
2017-05-04 23:19:28 +00:00
|
|
|
|
2019-11-21 22:14:27 +00:00
|
|
|
loaded = await connection.loadByToken(token);
|
|
|
|
check.equals(loaded, session);
|
|
|
|
|
|
|
|
saves = await connection.listSaves();
|
|
|
|
check.equals(items(saves).length, 1);
|
|
|
|
});
|
|
|
|
});
|