@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
172 lines (162 loc) • 5.97 kB
text/typescript
import { DeviceModelId } from "@ledgerhq/types-devices";
import { shouldRedirectToPostOnboardingOrRecoverUpsell } from "./shouldRedirectToPostOnboardingOrRecoverUpsell";
type Scenario = {
device: { modelId: DeviceModelId };
hasBeenUpsoldRecover: boolean;
hasRedirectedToPostOnboarding: boolean;
expected: { shouldRedirectToRecoverUpsell: boolean; shouldRedirectToPostOnboarding: boolean };
};
// This static array is enough to cover all cases as for each test case we have a scenario with Nano S (which is not in that array).
const mockedSupportedDeviceModels = [
DeviceModelId.nanoSP,
DeviceModelId.nanoX,
DeviceModelId.stax,
DeviceModelId.europa,
];
function testScenarios(scenarios: Scenario[]) {
it.each(scenarios)(
"should return $expected for $device and upsell for touch screen devices",
({ device, hasBeenUpsoldRecover, hasRedirectedToPostOnboarding, expected }) => {
const result = shouldRedirectToPostOnboardingOrRecoverUpsell({
lastConnectedDevice: device,
hasBeenUpsoldRecover,
hasRedirectedToPostOnboarding,
supportedDeviceModels: mockedSupportedDeviceModels,
});
expect(
[result.shouldRedirectToPostOnboarding, result.shouldRedirectToRecoverUpsell].filter(
Boolean,
).length,
).toBeLessThanOrEqual(1);
expect(result).toEqual(expected);
},
);
}
describe("useShouldRedirect", () => {
describe("user HAS NOT BEEN UPSOLD recover & HAS NOT BEEN REDIRECTED to post onboarding", () => {
const params = {
hasBeenUpsoldRecover: false,
hasRedirectedToPostOnboarding: false,
};
testScenarios(
[
{
device: { modelId: DeviceModelId.nanoS },
expected: { shouldRedirectToRecoverUpsell: false, shouldRedirectToPostOnboarding: true },
},
{
device: { modelId: DeviceModelId.nanoS },
expected: { shouldRedirectToRecoverUpsell: false, shouldRedirectToPostOnboarding: true },
},
{
device: { modelId: DeviceModelId.nanoSP },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.nanoSP },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.nanoX },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.nanoX },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.stax },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.europa },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
].map(scenario => ({ ...scenario, ...params })),
);
});
describe("user HAS BEEN UPSOLD recover & HAS NOT BEEN REDIRECTED to post onboarding", () => {
[
DeviceModelId.nanoS,
DeviceModelId.nanoSP,
DeviceModelId.nanoX,
DeviceModelId.stax,
DeviceModelId.europa,
].forEach(modelId => {
testScenarios([
{
device: { modelId },
expected: {
shouldRedirectToRecoverUpsell: false,
shouldRedirectToPostOnboarding: true,
},
hasBeenUpsoldRecover: true,
hasRedirectedToPostOnboarding: false,
},
]);
});
});
describe("user HAS BEEN UPSOLD PROTECT & HAS BEEN REDIRECTED to post onboarding", () => {
[
DeviceModelId.nanoS,
DeviceModelId.nanoSP,
DeviceModelId.nanoX,
DeviceModelId.stax,
DeviceModelId.europa,
].forEach(modelId => {
testScenarios([
{
device: { modelId },
expected: {
shouldRedirectToRecoverUpsell: false,
shouldRedirectToPostOnboarding: false,
},
hasBeenUpsoldRecover: true,
hasRedirectedToPostOnboarding: true,
},
]);
});
});
describe("user HAS NOT BEEN UPSOLD recover & HAS BEEN REDIRECTED to post onboarding", () => {
const params = {
hasBeenUpsoldRecover: false,
hasRedirectedToPostOnboarding: true,
};
testScenarios(
[
{
device: { modelId: DeviceModelId.nanoS },
expected: { shouldRedirectToRecoverUpsell: false, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.nanoS },
expected: { shouldRedirectToRecoverUpsell: false, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.nanoSP },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.nanoSP },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.nanoX },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.nanoX },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.stax },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
{
device: { modelId: DeviceModelId.europa },
expected: { shouldRedirectToRecoverUpsell: true, shouldRedirectToPostOnboarding: false },
},
].map(scenario => ({ ...scenario, ...params })),
);
});
});