Skip to content

Commit f720275

Browse files
authored
feat: change tab behavior as manually (Kong#9641)
1 parent c31bb08 commit f720275

28 files changed

+991
-727
lines changed

packages/insomnia-smoke-test/tests/smoke/debug-sidebar-interactions.test.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,12 @@ test.describe('Debug-Sidebar', () => {
6666
await page.getByLabel('Request filter').click();
6767
await page.getByLabel('Request filter').fill('test folder');
6868
await page.getByLabel('Request filter').press('Enter');
69-
await page.getByLabel('Request Collection').getByRole('row', { name: 'test folder' }).click();
69+
await page
70+
.getByLabel('Request Collection')
71+
.getByRole('row', { name: 'test folder' })
72+
.click({
73+
modifiers: ['ControlOrMeta'],
74+
});
7075
// Wait for tab appear
7176
await page.getByLabel('Insomnia Tabs').getByLabel('tab-test folder', { exact: true }).click();
7277
await page.getByLabel('Clear search').click();
@@ -121,9 +126,15 @@ test.describe('Debug-Sidebar', () => {
121126
.soft(page.getByTestId('new name').getByLabel('GET new name', { exact: true }))
122127
.toContainText('new name');
123128

124-
// Create a new HTTP request
129+
// Create a new HTTP request to have two "New Request"
125130
await page.getByLabel('Create in collection').click();
126131
await page.getByRole('menuitemradio', { name: 'Http Request' }).click();
127-
await page.getByLabel('Request Collection').getByRole('row', { name: 'New Request' }).click();
132+
133+
// Verify there are two "New Request" rows
134+
const newRequests = page.getByLabel('Request Collection').getByRole('row', { name: 'New Request' });
135+
await expect.soft(newRequests).toHaveCount(2);
136+
137+
// Verify the first "New Request" is selected (data-selected is on child element)
138+
await expect.soft(newRequests.first().locator('[data-selected="true"]').first()).toBeVisible();
128139
});
129140
});

packages/insomnia-smoke-test/tests/smoke/global-environments.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ test.describe('Global Environments', () => {
88
await loadFixtureFile('collection-for-global-environments.yaml', app, page);
99
await loadFixtureFile('global-environment.yaml', app, page);
1010

11-
await page.getByRole('link', { name: 'collection-for-global-' }).click();
11+
await page.getByRole('gridcell', { name: 'collection-for-global-' }).click();
1212
await page.getByTestId('New Request').getByLabel('GET New Request', { exact: true }).click();
1313
// check if it has error message
1414
await page.getByText('Body', { exact: true }).click();

packages/insomnia-smoke-test/tests/smoke/insomnia-tab.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ test.describe('multiple-tab feature test', () => {
1010
await page.getByRole('button', { name: 'Create request collection', exact: true }).click();
1111
await page.getByLabel('Create in collection').click();
1212
await page.getByLabel('HTTP Request').click();
13+
await page
14+
.getByLabel('Request Collection')
15+
.getByRole('row', { name: 'My first request' })
16+
.click({
17+
modifiers: ['ControlOrMeta'],
18+
});
19+
await page
20+
.getByLabel('Request Collection')
21+
.getByRole('row', { name: 'New Request' })
22+
.click({
23+
modifiers: ['ControlOrMeta'],
24+
});
1325
const tab = page.getByLabel('Insomnia Tabs').getByLabel(`tab-New Request`, { exact: true });
1426
await expect.soft(tab).toBeVisible();
1527
await expect.soft(tab).toHaveAttribute('data-selected', 'true');
@@ -54,8 +66,16 @@ test.describe('multiple-tab feature test', () => {
5466
await page.getByRole('dialog').getByRole('button', { name: 'Create' }).click();
5567
await page.getByLabel('Create in collection').click();
5668
await page.getByLabel('HTTP Request').click();
69+
await page
70+
.getByLabel('Request Collection')
71+
.getByRole('row', { name: 'New Request' })
72+
.click({
73+
modifiers: ['ControlOrMeta'],
74+
});
5775
await expect.soft(page.getByLabel('tab-New Request').getByLabel('Tab Tag')).toHaveText('GET');
5876
await page.getByTestId('tab-close-button').first().click();
77+
// Move the mouse away to avoid accidentally show the tooltip of the tab which may cover the request method dropdown and cause the click fail
78+
await page.mouse.move(0, 0);
5979
await page.getByLabel('Request Method').click();
6080
await page.getByRole('button', { name: 'POST' }).click();
6181
await expect.soft(page.getByLabel('tab-New Request').getByLabel('Tab Tag')).toHaveText('POST');

packages/insomnia-smoke-test/tests/smoke/insomnia-vault.test.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,12 @@ test.describe('Check vault used in environment', () => {
173173
await page.getByText('legacy vault value array').click();
174174
await page.locator('body').click();
175175
// activate request
176-
await page.getByTestId('legacy-array-vault').getByLabel('GET legacy-array-vault', { exact: true }).click();
176+
await page
177+
.getByTestId('legacy-array-vault')
178+
.getByLabel('GET legacy-array-vault', { exact: true })
179+
.click({
180+
modifiers: ['ControlOrMeta'],
181+
});
177182
// Wait for tab appear
178183
await expect.soft(page.getByLabel('Insomnia Tabs').getByText('legacy-array-vault', { exact: true })).toBeVisible();
179184
await page.getByRole('button', { name: 'Send' }).click();
@@ -189,7 +194,12 @@ test.describe('Check vault used in environment', () => {
189194
await page.getByText('legacy vault value object').click();
190195
await page.locator('body').click();
191196
// activate request
192-
await page.getByTestId('legacy-object-vault').getByLabel('GET legacy-object-vault', { exact: true }).click();
197+
await page
198+
.getByTestId('legacy-object-vault')
199+
.getByLabel('GET legacy-object-vault', { exact: true })
200+
.click({
201+
modifiers: ['ControlOrMeta'],
202+
});
193203
await expect.soft(page.getByLabel('Insomnia Tabs').getByText('legacy-object-vault', { exact: true })).toBeVisible();
194204
await page.getByRole('button', { name: 'Send' }).click();
195205

@@ -204,7 +214,12 @@ test.describe('Check vault used in environment', () => {
204214
await page.getByText('base with vault').click();
205215
await page.locator('body').click();
206216
// activate request
207-
await page.getByTestId('legacy-invalid-vault').getByLabel('GET legacy-invalid-vault', { exact: true }).click();
217+
await page
218+
.getByTestId('legacy-invalid-vault')
219+
.getByLabel('GET legacy-invalid-vault', { exact: true })
220+
.click({
221+
modifiers: ['ControlOrMeta'],
222+
});
208223
await expect
209224
.soft(page.getByLabel('Insomnia Tabs').getByText('legacy-invalid-vault', { exact: true }))
210225
.toBeVisible();

packages/insomnia-smoke-test/tests/smoke/mtls.test.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,16 @@ test('can use client certificate for mTLS', async ({ app, page }) => {
7272
await page.locator('[data-test-id="client-certificate-toggle"]').click();
7373
await page.getByRole('button', { name: 'Done' }).click();
7474
await page.getByLabel('Request Collection').getByTestId('pet 2').press('Enter');
75-
await expect.soft(page.getByLabel('Insomnia Tabs').getByText('pet 2', { exact: true })).toBeVisible();
75+
await expect
76+
.soft(
77+
page
78+
.getByLabel('Request Collection')
79+
.getByRole('row', { name: 'pet 2' })
80+
.first()
81+
.locator('[data-selected="true"]')
82+
.first(),
83+
)
84+
.toBeVisible();
7685

7786
await page.getByRole('button', { name: 'Send', exact: true }).click();
7887
await expect.soft(statusTag).toContainText('401 Unauthorized');

packages/insomnia-smoke-test/tests/smoke/pre-request-script-features.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,12 @@ test.describe('pre-request features tests', () => {
525525

526526
await page.getByLabel('Pre-request Scripts', { exact: true }).click();
527527
// go to request collection
528-
await page.getByLabel('Request Collection').getByTestId('persist global environment').press('Enter');
528+
await page
529+
.getByLabel('Request Collection')
530+
.getByTestId('persist global environment')
531+
.click({
532+
modifiers: ['ControlOrMeta'],
533+
});
529534
// activate global environment
530535
await page.getByLabel('Manage Environments').click();
531536
await page.getByPlaceholder('Choose a global environment').click();

packages/insomnia-smoke-test/tests/smoke/request-pane-tab.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { expect } from '@playwright/test';
2+
13
import { test } from '../../playwright/test';
24

35
test('Request tabs', async ({ page }) => {
@@ -24,7 +26,8 @@ test('WS tabs', async ({ page }) => {
2426
await page.getByLabel('Create in collection').click();
2527
await page.getByRole('menuitemradio', { name: 'WebSocket Request' }).click();
2628
// ensure that the websocket request is created
27-
await page.getByLabel('Insomnia Tabs').getByText('New WebSocket Request').click();
29+
const newWebSocketRequest = page.getByLabel('Request Collection').getByRole('row', { name: 'New WebSocket Request' });
30+
await expect.soft(newWebSocketRequest.first().locator('[data-selected="true"]').first()).toBeVisible();
2831
await page.getByRole('tab', { name: 'Body' }).click();
2932
await page.getByRole('button', { name: 'JSON' }).click();
3033
await page.getByRole('option', { name: 'JSON' }).click();

packages/insomnia-smoke-test/tests/smoke/template-tags-interactions.test.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,19 @@ test('Critical Path For Template Tags Interactions', async ({ page, app }) => {
123123

124124
// test response template tags
125125
// send request first to populate response
126-
await page.getByLabel('Request Collection').getByTestId('Base Response').press('Enter');
126+
await page
127+
.getByLabel('Request Collection')
128+
.getByTestId('Base Response')
129+
.click({ modifiers: ['ControlOrMeta'] });
127130
// Wait for tab appear
128131
await expect.soft(page.getByLabel('Insomnia Tabs').getByText('Base Response', { exact: true })).toBeVisible();
129132
await page.getByTestId('request-pane').getByRole('button', { name: 'Send' }).click();
130133
const statusTag = page.locator('[data-testid="response-status-tag"]:visible');
131134
await expect.soft(statusTag).toContainText('200 OK');
132-
await page.getByLabel('Request Collection').getByTestId('Response Tag').press('Enter');
135+
await page
136+
.getByLabel('Request Collection')
137+
.getByTestId('Response Tag')
138+
.click({ modifiers: ['ControlOrMeta'] });
133139
await expect.soft(page.getByLabel('Insomnia Tabs').getByText('Response Tag', { exact: true })).toBeVisible();
134140
await page.getByText('Body', { exact: true }).click();
135141
for (const { tagPrefix, expectedResult } of templateTagTestCases.response) {

packages/insomnia/src/common/hotkeys.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export const keyboardShortcutDescriptions: Record<KeyboardShortcut, string> = {
3939
tab_nextTab: 'Next Tab',
4040
tab_previousTab: 'Previous Tab',
4141
tab_reopenClosedTab: 'Reopen Closed Tab',
42+
request_openInNewTab: 'Open Request in New Tab',
4243
};
4344

4445
/**
@@ -183,6 +184,10 @@ const defaultRegistry: HotKeyRegistry = {
183184
macKeys: [{ shift: true, meta: true, keyCode: keyboardKeys.t.keyCode }],
184185
winLinuxKeys: [{ ctrl: true, shift: true, keyCode: keyboardKeys.t.keyCode }],
185186
},
187+
request_openInNewTab: {
188+
macKeys: [{ meta: true, shift: true, keyCode: keyboardKeys.o.keyCode }],
189+
winLinuxKeys: [{ ctrl: true, shift: true, keyCode: keyboardKeys.o.keyCode }],
190+
},
186191
};
187192

188193
/**

packages/insomnia/src/common/settings.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ export type KeyboardShortcut =
5959
| 'close_tab'
6060
| 'tab_nextTab'
6161
| 'tab_previousTab'
62-
| 'tab_reopenClosedTab';
62+
| 'tab_reopenClosedTab'
63+
| 'request_openInNewTab';
6364

6465
/**
6566
* The collection of defined hotkeys.

0 commit comments

Comments
 (0)