Save comment draft + test

This commit is contained in:
Chi Vinh Le
2018-09-03 12:16:01 +02:00
parent ccf91480da
commit aa2b70fd8c
24 changed files with 354 additions and 304 deletions
@@ -8,7 +8,7 @@ import { Environment } from "relay-runtime";
import { PostMessageService } from "talk-framework/lib/postMessage";
import { RestClient } from "talk-framework/lib/rest";
import { Storage } from "talk-framework/lib/storage";
import { PymStorage } from "talk-framework/lib/storage";
import { UIContext } from "talk-ui/components";
import { ClickFarAwayRegister } from "talk-ui/components/ClickOutside";
@@ -28,6 +28,12 @@ export interface TalkContext {
/** Session storage */
sessionStorage: Storage;
/** Session Storage over pym */
pymLocalStorage?: PymStorage;
/** Session storage over pym */
pymSessionStorage?: PymStorage;
/** media query values for testing purposes */
mediaQueryValues?: MediaQueryMatchers;
@@ -117,12 +117,10 @@ export default async function createContext({
registerClickFarAway,
rest: new RestClient("/api", tokenGetter),
postMessage: new PostMessageService(),
localStorage: pym
? createPymStorage(pym, "localStorage")
: createLocalStorage(),
sessionStorage: pym
? createPymStorage(pym, "sessionStorage")
: createSessionStorage(),
localStorage: createLocalStorage(),
sessionStorage: createSessionStorage(),
pymLocalStorage: pym && createPymStorage(pym, "localStorage"),
pymSessionStorage: pym && createPymStorage(pym, "sessionStorage"),
};
// Run custom initializations.
@@ -1,6 +1,20 @@
import { Child, Parent } from "pym.js";
import uuid from "uuid/v4";
import { Storage } from "./interface";
export interface PymStorage {
/**
* value = storage[key]
*/
getItem(key: string): Promise<string | null>;
/**
* delete storage[key]
*/
removeItem(key: string): Promise<void>;
/**
* storage[key] = value
*/
setItem(key: string, value: string): Promise<void>;
}
type Pym = Child | Parent;
@@ -13,7 +27,7 @@ type Pym = Child | Parent;
export default function createPymStorage(
pym: Pym,
type: "localStorage" | "sessionStorage"
): Storage {
): PymStorage {
// A Map of requestID => {resolve, reject}
const requests: Record<
string,
@@ -1,11 +0,0 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`connectStorageToPym should handle handle errors 1`] = `"[{\\"key\\":\\"pymStorage.localStorage.error\\",\\"value\\":\\"{\\\\\\"id\\\\\\":\\\\\\"0\\\\\\",\\\\\\"error\\\\\\":\\\\\\"error\\\\\\"}\\"}]"`;
exports[`connectStorageToPym should handle unknown method 1`] = `"[{\\"key\\":\\"pymStorage.localStorage.error\\",\\"value\\":\\"{\\\\\\"id\\\\\\":\\\\\\"0\\\\\\",\\\\\\"error\\\\\\":\\\\\\"Unknown method unknown\\\\\\"}\\"}]"`;
exports[`connectStorageToPym should set, get and remove item 1`] = `"{\\"talkPymStorage:key\\":\\"test\\"}"`;
exports[`connectStorageToPym should set, get and remove item 2`] = `"{}"`;
exports[`connectStorageToPym should set, get and remove item 3`] = `"[{\\"key\\":\\"pymStorage.localStorage.response\\",\\"value\\":\\"{\\\\\\"id\\\\\\":\\\\\\"0\\\\\\"}\\"},{\\"key\\":\\"pymStorage.localStorage.response\\",\\"value\\":\\"{\\\\\\"id\\\\\\":\\\\\\"1\\\\\\",\\\\\\"result\\\\\\":\\\\\\"test\\\\\\"}\\"},{\\"key\\":\\"pymStorage.localStorage.response\\",\\"value\\":\\"{\\\\\\"id\\\\\\":\\\\\\"2\\\\\\"}\\"}]"`;
@@ -1,5 +1,4 @@
export { default as createInMemoryStorage } from "./InMemoryStorage";
export { default as createLocalStorage } from "./LocalStorage";
export { default as createSessionStorage } from "./SessionStorage";
export { default as createPymStorage } from "./PymStorage";
export { Storage } from "./interface";
export { default as createPymStorage, PymStorage } from "./PymStorage";
@@ -1,14 +0,0 @@
export interface Storage {
/**
* value = storage[key]
*/
getItem(key: string): Promise<string | null> | string | null;
/**
* delete storage[key]
*/
removeItem(key: string): Promise<void> | void;
/**
* storage[key] = value
*/
setItem(key: string, value: string): Promise<void> | void;
}
@@ -0,0 +1,21 @@
import { PymStorage } from "talk-framework/lib/storage";
export class FakeStorage implements PymStorage {
public store: Record<string, string> = {};
public setItem(key: string, value: string) {
this.store[key] = value;
return Promise.resolve();
}
public removeItem(key: string) {
delete this.store[key];
return Promise.resolve();
}
public getItem(key: string) {
return Promise.resolve(this.store[key]);
}
}
export default function createFakePymStorage() {
return new FakeStorage();
}
@@ -4,6 +4,7 @@ export {
} from "./createRelayEnvironment";
export { default as createFluentBundle } from "./createFluentBundle";
export { default as createSinonStub } from "./createSinonStub";
export { default as createFakePymStorage } from "./createFakePymStorage";
export {
default as removeFragmentRefs,
NoFragmentRefs,