@rotorsoft/act-tck 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/@types/store-tck.d.ts +9 -0
- package/dist/@types/store-tck.d.ts.map +1 -1
- package/dist/index.cjs +147 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +147 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1895,6 +1895,153 @@ var runStoreTck = (options) => {
|
|
|
1895
1895
|
expect3(calls).toEqual([1, 2]);
|
|
1896
1896
|
});
|
|
1897
1897
|
});
|
|
1898
|
+
describe3.skipIf(!caps.pii_isolation)("pii_isolation (capability)", () => {
|
|
1899
|
+
it3("commits and loads pii alongside data", async () => {
|
|
1900
|
+
const s = `pii-roundtrip-${uid()}`;
|
|
1901
|
+
const committed = await store.commit(
|
|
1902
|
+
s,
|
|
1903
|
+
[
|
|
1904
|
+
{
|
|
1905
|
+
name: "Incremented",
|
|
1906
|
+
data: { amount: 1 },
|
|
1907
|
+
pii: { email: "u@example.com", name: "Ursula" }
|
|
1908
|
+
}
|
|
1909
|
+
],
|
|
1910
|
+
makeMeta({ stream: s })
|
|
1911
|
+
);
|
|
1912
|
+
expect3(committed).toHaveLength(1);
|
|
1913
|
+
expect3(committed[0].pii).toEqual({
|
|
1914
|
+
email: "u@example.com",
|
|
1915
|
+
name: "Ursula"
|
|
1916
|
+
});
|
|
1917
|
+
const seen = [];
|
|
1918
|
+
await store.query(
|
|
1919
|
+
(e) => {
|
|
1920
|
+
seen.push(e);
|
|
1921
|
+
},
|
|
1922
|
+
{ stream: s, stream_exact: true }
|
|
1923
|
+
);
|
|
1924
|
+
expect3(seen).toHaveLength(1);
|
|
1925
|
+
expect3(seen[0].pii).toEqual({ email: "u@example.com", name: "Ursula" });
|
|
1926
|
+
expect3(seen[0].data).toEqual({ amount: 1 });
|
|
1927
|
+
});
|
|
1928
|
+
it3("passes through events without pii (pii is null or undefined on load)", async () => {
|
|
1929
|
+
const s = `pii-none-${uid()}`;
|
|
1930
|
+
await store.commit(s, [inc(1)], makeMeta({ stream: s }));
|
|
1931
|
+
const seen = [];
|
|
1932
|
+
await store.query(
|
|
1933
|
+
(e) => {
|
|
1934
|
+
seen.push(e);
|
|
1935
|
+
},
|
|
1936
|
+
{ stream: s, stream_exact: true }
|
|
1937
|
+
);
|
|
1938
|
+
expect3(seen).toHaveLength(1);
|
|
1939
|
+
expect3(seen[0].pii == null).toBe(true);
|
|
1940
|
+
});
|
|
1941
|
+
it3("wipes pii for every event on the stream via forget_pii", async () => {
|
|
1942
|
+
const s = `pii-forget-${uid()}`;
|
|
1943
|
+
await store.commit(
|
|
1944
|
+
s,
|
|
1945
|
+
[
|
|
1946
|
+
{
|
|
1947
|
+
name: "Incremented",
|
|
1948
|
+
data: { amount: 1 },
|
|
1949
|
+
pii: { email: "a@example.com" }
|
|
1950
|
+
},
|
|
1951
|
+
{
|
|
1952
|
+
name: "Incremented",
|
|
1953
|
+
data: { amount: 2 },
|
|
1954
|
+
pii: { email: "b@example.com" }
|
|
1955
|
+
}
|
|
1956
|
+
],
|
|
1957
|
+
makeMeta({ stream: s })
|
|
1958
|
+
);
|
|
1959
|
+
const forget = store.forget_pii;
|
|
1960
|
+
expect3(forget).toBeDefined();
|
|
1961
|
+
const wiped = await forget.call(store, s);
|
|
1962
|
+
expect3(wiped).toBe(2);
|
|
1963
|
+
const seen = [];
|
|
1964
|
+
await store.query(
|
|
1965
|
+
(e) => {
|
|
1966
|
+
seen.push(e);
|
|
1967
|
+
},
|
|
1968
|
+
{ stream: s, stream_exact: true }
|
|
1969
|
+
);
|
|
1970
|
+
expect3(seen).toHaveLength(2);
|
|
1971
|
+
for (const e of seen) {
|
|
1972
|
+
expect3(e.pii == null).toBe(true);
|
|
1973
|
+
expect3(e.data).toBeDefined();
|
|
1974
|
+
}
|
|
1975
|
+
});
|
|
1976
|
+
it3("is idempotent \u2014 second forget_pii returns 0, no error", async () => {
|
|
1977
|
+
const s = `pii-forget-idem-${uid()}`;
|
|
1978
|
+
await store.commit(
|
|
1979
|
+
s,
|
|
1980
|
+
[
|
|
1981
|
+
{
|
|
1982
|
+
name: "Incremented",
|
|
1983
|
+
data: { amount: 1 },
|
|
1984
|
+
pii: { email: "u@example.com" }
|
|
1985
|
+
}
|
|
1986
|
+
],
|
|
1987
|
+
makeMeta({ stream: s })
|
|
1988
|
+
);
|
|
1989
|
+
const forget = store.forget_pii;
|
|
1990
|
+
const first = await forget.call(store, s);
|
|
1991
|
+
expect3(first).toBe(1);
|
|
1992
|
+
const second = await forget.call(store, s);
|
|
1993
|
+
expect3(second).toBe(0);
|
|
1994
|
+
});
|
|
1995
|
+
it3("only wipes the targeted stream \u2014 siblings untouched", async () => {
|
|
1996
|
+
const sA = `pii-iso-a-${uid()}`;
|
|
1997
|
+
const sB = `pii-iso-b-${uid()}`;
|
|
1998
|
+
await store.commit(
|
|
1999
|
+
sA,
|
|
2000
|
+
[
|
|
2001
|
+
{
|
|
2002
|
+
name: "Incremented",
|
|
2003
|
+
data: { amount: 1 },
|
|
2004
|
+
pii: { email: "alice@example.com" }
|
|
2005
|
+
}
|
|
2006
|
+
],
|
|
2007
|
+
makeMeta({ stream: sA })
|
|
2008
|
+
);
|
|
2009
|
+
await store.commit(
|
|
2010
|
+
sB,
|
|
2011
|
+
[
|
|
2012
|
+
{
|
|
2013
|
+
name: "Incremented",
|
|
2014
|
+
data: { amount: 1 },
|
|
2015
|
+
pii: { email: "bob@example.com" }
|
|
2016
|
+
}
|
|
2017
|
+
],
|
|
2018
|
+
makeMeta({ stream: sB })
|
|
2019
|
+
);
|
|
2020
|
+
await store.forget_pii.call(store, sA);
|
|
2021
|
+
const a = [];
|
|
2022
|
+
await store.query(
|
|
2023
|
+
(e) => {
|
|
2024
|
+
a.push(e);
|
|
2025
|
+
},
|
|
2026
|
+
{ stream: sA, stream_exact: true }
|
|
2027
|
+
);
|
|
2028
|
+
expect3(a[0].pii == null).toBe(true);
|
|
2029
|
+
const b = [];
|
|
2030
|
+
await store.query(
|
|
2031
|
+
(e) => {
|
|
2032
|
+
b.push(e);
|
|
2033
|
+
},
|
|
2034
|
+
{ stream: sB, stream_exact: true }
|
|
2035
|
+
);
|
|
2036
|
+
expect3(b[0].pii).toEqual({ email: "bob@example.com" });
|
|
2037
|
+
});
|
|
2038
|
+
it3("forget_pii on a stream with no pii events returns 0", async () => {
|
|
2039
|
+
const s = `pii-forget-empty-${uid()}`;
|
|
2040
|
+
await store.commit(s, [inc(1)], makeMeta({ stream: s }));
|
|
2041
|
+
const wiped = await store.forget_pii.call(store, s);
|
|
2042
|
+
expect3(wiped).toBe(0);
|
|
2043
|
+
});
|
|
2044
|
+
});
|
|
1898
2045
|
if (caps.notify) {
|
|
1899
2046
|
describe3("notify (capability)", () => {
|
|
1900
2047
|
it3("delivers a notification when a different instance commits", async () => {
|