Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c2078ff736 |
+14
-2
@@ -529,11 +529,23 @@ async function saveStateOnce(beforeWrite) {
|
|||||||
}
|
}
|
||||||
// When the merged record names a network other than this page's, this page
|
// When the merged record names a network other than this page's, this page
|
||||||
// has not yet taken a switch saved elsewhere. This page's `trackedTokens`
|
// has not yet taken a switch saved elsewhere. This page's `trackedTokens`
|
||||||
// is then the list of the network that this page still has. So the merged
|
// is then the list of this page's network. The stored record keeps the
|
||||||
// record keeps the stored list
|
// list of this page's network in `networkTrackedTokens`. So a token that
|
||||||
|
// this page added or removed since its last save is added to or removed
|
||||||
|
// from that stored list. The merged record keeps the stored `trackedTokens`
|
||||||
// (https://git.eeqj.de/sneak/AutistMask/issues/701).
|
// (https://git.eeqj.de/sneak/AutistMask/issues/701).
|
||||||
if (merged.networkId !== current.networkId) {
|
if (merged.networkId !== current.networkId) {
|
||||||
merged.trackedTokens = fresh.trackedTokens;
|
merged.trackedTokens = fresh.trackedTokens;
|
||||||
|
merged.networkTrackedTokens = {
|
||||||
|
...fresh.networkTrackedTokens,
|
||||||
|
[current.networkId]: mergeListByIdentity(
|
||||||
|
baseline.trackedTokens,
|
||||||
|
current.trackedTokens,
|
||||||
|
fresh.networkTrackedTokens[current.networkId],
|
||||||
|
(token) => token.address.toLowerCase(),
|
||||||
|
(base, ours) => ours,
|
||||||
|
),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
merged.hasWallet = Boolean(merged.wallets && merged.wallets.length > 0);
|
merged.hasWallet = Boolean(merged.wallets && merged.wallets.length > 0);
|
||||||
// Stamped on every write, never merged or diffed: the record that goes to
|
// Stamped on every write, never merged or diffed: the record that goes to
|
||||||
|
|||||||
@@ -270,8 +270,9 @@ test("a token tracked on Sepolia when another page switched there is not tracked
|
|||||||
|
|
||||||
// Another popup page saves a switch to Sepolia, where TST is tracked. Before
|
// Another popup page saves a switch to Sepolia, where TST is tracked. Before
|
||||||
// taking that switch, this page adds a token on Ethereum Mainnet. The add's
|
// taking that switch, this page adds a token on Ethereum Mainnet. The add's
|
||||||
// save does not write this page's Ethereum Mainnet list as Sepolia's list.
|
// save adds the token to Ethereum Mainnet's list and leaves Sepolia's list as
|
||||||
test("a token added before this page takes another page's switch leaves Sepolia's tokens tracked", async () => {
|
// it was.
|
||||||
|
test("a token added before this page takes another page's switch is tracked on Ethereum Mainnet", async () => {
|
||||||
const boot = await bootOnAddToken("mainnet", {
|
const boot = await bootOnAddToken("mainnet", {
|
||||||
trackedTokens: [MAINNET_TOKEN],
|
trackedTokens: [MAINNET_TOKEN],
|
||||||
networkTrackedTokens: { sepolia: [SEPOLIA_TOKEN] },
|
networkTrackedTokens: { sepolia: [SEPOLIA_TOKEN] },
|
||||||
@@ -299,7 +300,47 @@ test("a token added before this page takes another page's switch leaves Sepolia'
|
|||||||
const stored = boot.storage.read("autistmask");
|
const stored = boot.storage.read("autistmask");
|
||||||
expect(stored.networkId).toBe("sepolia");
|
expect(stored.networkId).toBe("sepolia");
|
||||||
expect(stored.trackedTokens).toEqual([SEPOLIA_TOKEN]);
|
expect(stored.trackedTokens).toEqual([SEPOLIA_TOKEN]);
|
||||||
expect(stored.networkTrackedTokens.mainnet).toEqual([MAINNET_TOKEN]);
|
expect(stored.networkTrackedTokens.mainnet).toEqual([
|
||||||
|
MAINNET_TOKEN,
|
||||||
|
{
|
||||||
|
address: NEW_TOKEN_ADDRESS,
|
||||||
|
symbol: "NEW",
|
||||||
|
decimals: 18,
|
||||||
|
name: "New Token",
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Another popup page saves a switch to Sepolia, where TST is tracked. Before
|
||||||
|
// taking that switch, this page removes DAI on Ethereum Mainnet, as the `[x]`
|
||||||
|
// on a tracked token in Settings does. The removal's save drops DAI from
|
||||||
|
// Ethereum Mainnet's list and leaves Sepolia's list as it was.
|
||||||
|
test("a token removed before this page takes another page's switch is gone from Ethereum Mainnet", async () => {
|
||||||
|
const boot = await bootPopup(
|
||||||
|
unversionedValidProfile({
|
||||||
|
trackedTokens: [MAINNET_TOKEN],
|
||||||
|
networkTrackedTokens: { sepolia: [SEPOLIA_TOKEN] },
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
expect(boot.pageErrors).toEqual([]);
|
||||||
|
boot.storage.write("autistmask", {
|
||||||
|
...boot.storage.read("autistmask"),
|
||||||
|
networkId: "sepolia",
|
||||||
|
trackedTokens: [SEPOLIA_TOKEN],
|
||||||
|
networkTrackedTokens: {
|
||||||
|
mainnet: [MAINNET_TOKEN],
|
||||||
|
sepolia: [SEPOLIA_TOKEN],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const { state, saveState } = require("../src/shared/state");
|
||||||
|
state.trackedTokens.splice(0, 1);
|
||||||
|
await saveState();
|
||||||
|
|
||||||
|
const stored = boot.storage.read("autistmask");
|
||||||
|
expect(stored.networkId).toBe("sepolia");
|
||||||
|
expect(stored.trackedTokens).toEqual([SEPOLIA_TOKEN]);
|
||||||
|
expect(stored.networkTrackedTokens.mainnet).toEqual([]);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Another popup page tracks DAI on Ethereum Mainnet and then saves a switch to
|
// Another popup page tracks DAI on Ethereum Mainnet and then saves a switch to
|
||||||
|
|||||||
Reference in New Issue
Block a user