mirror of
https://github.com/Kong/insomnia.git
synced 2026-10-25 08:09:06 -04:00
Handle unsupported activity values (#3116)
Co-authored-by: David Marby <david@dmarby.se>
This commit is contained in:
1 parent
f654f49dfb
commit
eac7eb3535
4 files changed
+77
-3
No files matched your search
@@ -6,6 +6,7 @@ import {
|
||||
ACTIVITY_SPEC,
|
||||
ACTIVITY_UNIT_TEST,
|
||||
FLEXIBLE_URL_REGEX,
|
||||
isValidActivity,
|
||||
isWorkspaceActivity,
|
||||
} from '../constants';
|
||||
|
||||
@@ -35,15 +36,32 @@ describe('URL Regex', () => {
|
||||
});
|
||||
|
||||
describe('isWorkspaceActivity', () => {
|
||||
it('return true', () => {
|
||||
it('should return true', () => {
|
||||
expect(isWorkspaceActivity(ACTIVITY_SPEC)).toBe(true);
|
||||
expect(isWorkspaceActivity(ACTIVITY_DEBUG)).toBe(true);
|
||||
expect(isWorkspaceActivity(ACTIVITY_UNIT_TEST)).toBe(true);
|
||||
});
|
||||
|
||||
it('return false', () => {
|
||||
it('should return false', () => {
|
||||
expect(isWorkspaceActivity(ACTIVITY_HOME)).toBe(false);
|
||||
expect(isWorkspaceActivity(ACTIVITY_ONBOARDING)).toBe(false);
|
||||
expect(isWorkspaceActivity(ACTIVITY_MIGRATION)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('isValidActivity', () => {
|
||||
it('should return true', () => {
|
||||
expect(isValidActivity(ACTIVITY_SPEC)).toBe(true);
|
||||
expect(isValidActivity(ACTIVITY_DEBUG)).toBe(true);
|
||||
expect(isValidActivity(ACTIVITY_UNIT_TEST)).toBe(true);
|
||||
expect(isValidActivity(ACTIVITY_HOME)).toBe(true);
|
||||
expect(isValidActivity(ACTIVITY_ONBOARDING)).toBe(true);
|
||||
expect(isValidActivity(ACTIVITY_MIGRATION)).toBe(true);
|
||||
});
|
||||
|
||||
it('should return false', () => {
|
||||
expect(isValidActivity('something else')).toBe(false);
|
||||
expect(isValidActivity(null)).toBe(false);
|
||||
expect(isValidActivity(undefined)).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -174,6 +174,20 @@ export const isWorkspaceActivity = (activity: GlobalActivity): boolean => {
|
||||
}
|
||||
};
|
||||
|
||||
export const isValidActivity = (activity: GlobalActivity): boolean => {
|
||||
switch (activity) {
|
||||
case ACTIVITY_SPEC:
|
||||
case ACTIVITY_DEBUG:
|
||||
case ACTIVITY_UNIT_TEST:
|
||||
case ACTIVITY_HOME:
|
||||
case ACTIVITY_ONBOARDING:
|
||||
case ACTIVITY_MIGRATION:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// HTTP Methods
|
||||
export const METHOD_GET = 'GET';
|
||||
export const METHOD_POST = 'POST';
|
||||
|
||||
@@ -216,6 +216,33 @@ describe('global', () => {
|
||||
expect(store.getActions()).toEqual([expectedEvent]);
|
||||
});
|
||||
|
||||
it.each(
|
||||
'something',
|
||||
null,
|
||||
undefined,
|
||||
)('should go to home if initialized with an unsupported value: %s', async activity => {
|
||||
const settings = createSettings(true, true);
|
||||
|
||||
const store = mockStore({ global: {}, entities: { settings: [settings] } });
|
||||
|
||||
global.localStorage.setItem(`${LOCALSTORAGE_PREFIX}::activity`, JSON.stringify(activity));
|
||||
const expectedEvent = { type: SET_ACTIVE_ACTIVITY, activity: ACTIVITY_HOME };
|
||||
|
||||
await store.dispatch(initActiveActivity());
|
||||
expect(store.getActions()).toEqual([expectedEvent]);
|
||||
});
|
||||
|
||||
it('should go to home if local storage key not found', async () => {
|
||||
const settings = createSettings(true, true);
|
||||
|
||||
const store = mockStore({ global: {}, entities: { settings: [settings] } });
|
||||
|
||||
const expectedEvent = { type: SET_ACTIVE_ACTIVITY, activity: ACTIVITY_HOME };
|
||||
|
||||
await store.dispatch(initActiveActivity());
|
||||
expect(store.getActions()).toEqual([expectedEvent]);
|
||||
});
|
||||
|
||||
it('should go to home if initialized at migration and onboarding seen', async () => {
|
||||
const settings = createSettings(true, true);
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ import {
|
||||
ACTIVITY_MIGRATION,
|
||||
ACTIVITY_ONBOARDING,
|
||||
DEPRECATED_ACTIVITY_INSOMNIA,
|
||||
isValidActivity,
|
||||
} from '../../../common/constants';
|
||||
import { selectSettings } from '../selectors';
|
||||
import { getDesignerDataDir } from '../../../common/misc';
|
||||
@@ -266,6 +267,8 @@ export function goToNextActivity() {
|
||||
Go to an explicit activity
|
||||
*/
|
||||
export function setActiveActivity(activity: GlobalActivity) {
|
||||
activity = _normalizeActivity(activity);
|
||||
|
||||
// Don't need to await settings update
|
||||
switch (activity) {
|
||||
case ACTIVITY_MIGRATION:
|
||||
@@ -680,6 +683,18 @@ function _migrateDeprecatedActivity(activity: GlobalActivity): GlobalActivity {
|
||||
return activity === DEPRECATED_ACTIVITY_INSOMNIA ? ACTIVITY_DEBUG : activity;
|
||||
}
|
||||
|
||||
function _normalizeActivity(activity: GlobalActivity): GlobalActivity {
|
||||
activity = _migrateDeprecatedActivity(activity);
|
||||
|
||||
if (isValidActivity(activity)) {
|
||||
return activity;
|
||||
} else {
|
||||
const fallbackActivity = ACTIVITY_HOME;
|
||||
console.log(`[app] invalid activity "${activity}"; navigating to ${fallbackActivity}`);
|
||||
return fallbackActivity;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Initialize with the cached active activity, and navigate to the next activity if necessary
|
||||
This will also decide whether to start with the migration or onboarding activities
|
||||
@@ -700,7 +715,7 @@ export function initActiveActivity() {
|
||||
// Nothing here...
|
||||
}
|
||||
|
||||
activeActivity = _migrateDeprecatedActivity(activeActivity);
|
||||
activeActivity = _normalizeActivity(activeActivity);
|
||||
|
||||
let overrideActivity = null;
|
||||
switch (activeActivity) {
|
||||
|
||||
Reference in new issue
Block a user