insomnia/packages/insomnia-smoke-test/tests/smoke/debug-sidebar-interactions.test.ts
James Gatz 6ef9a46814
Api V2 (#6135)
* Add support for multiple remote projects per Team (#6009)

* update fetching of teams

* create and delete remote projects

* backend project sync using the new teamProjectId in the API

* indicator

* use team api to get organization data

* handle logged out state

* remove remote from duplicate modal

* remaining insomnia fetch fixes

* fix ts issues

* fix ts log issue

* fix ts error

* fix ts update

* fix tests

* remove log

* add types to insomniaFetch

* named arguments in vcs

---------

Co-authored-by: jackkav <jackkav@gmail.com>

* Project Presence (#6079)

* fix ts log issue

* fix ts update

* update fetching of teams

* create and delete remote projects

* real-time

* update api changes

* check for successful response

* get user profile

* cleanup

* update fetch

* update network status

* fix for insomniaFetch new api

* insomnia fetch from window

* fix missing stat

* fix project dropdown

* update avatar

* update presence when closing the app

* update the presence every minute

* cleanup presence

* use eventsource and improve debugging

* Cloud only projects (#6167)

* Add support for multiple remote projects per Team (#6009)

* update fetching of teams

* create and delete remote projects

* backend project sync using the new teamProjectId in the API

* indicator

* use team api to get organization data

* handle logged out state

* remove remote from duplicate modal

* remaining insomnia fetch fixes

* fix ts issues

* fix ts log issue

* fix ts error

* fix ts update

* fix tests

* remove log

* add types to insomniaFetch

* named arguments in vcs

---------

Co-authored-by: jackkav <jackkav@gmail.com>

* login routes

* cleanup logged in state

* update organizations

* fixes

* update migration

* auto init sync on workspaces without git

* fix auto init sync

* checkpoint

* update import options in empty project pane

* responsive styles

* update package-lock

* join an org in sidebar

* readability improvements

* move modals and root loader to org

* cleanup root

* expire session take 1

* cleanup default org id

* fix ts issue

---------

Co-authored-by: jackkav <jackkav@gmail.com>

* Add Scratch Pad collection (#6221)

* add scratchpad collection

* filter scratchpad from cloud migration

* disable sync for scratchpad

* update settings for scratchpad

* log in rename

* check if user is logged in or has logged in before

* use organization api

* organizations api fixes

* update urls

* move modals to root

* update org navbar links

* lint fix

* type-check

* Add form for setting up the staging env

* add autolinking

* onboarding

* remove default org id

* staging urls

* avatar styles

* update urls

* use display name for orgs

* update settings modal with dev

* proper project deletions

* fix api calls perf

* sidebar improvements

* layout styles

* disable tests for now

* fix boolean

* fix data migration

* dev settings styles

* test init

* organization names

* link styles

* improve scratchpad banner styles

* http colors

* url bar styles

* spinner styles

* breadcrumbs styles

* help and feedback links

* settings to root

* onboarding

* fetch remote projects on org nav

* update avatar styles

* use name initials in avatars

* don't allow to delete default organization project

* add scratchpad checks

* tests

* workspace settings tabs types

* export all workspaces

* fix types and personal org

* project permission checks

* continue with sso

* organization avatars

* project presence avatars

* fix privacy/terms links

* add the no-wrap classname

* update user name and email in the app

* fix delete action

* ai fetching

* generate tests in sequence to help with rate limiting

* wip testing

* wip test

* improve test and migration script

* fix ts

* local to cloud projects test

* set local-to-cloud-projects.test as slow

* fix e2e tests

* update settings tests

* update more apis that changed from teams -> organizations

* simplify remote project migration

* org.branding can be undefined

* fix imports issue in sr

* remove .only

* remove unused gql query

* fix onboarding height jump

* trust some rnd and upload artifacts on failure

* fix env vars replacement on prod

* fix constant name

* bring back checks

* fix inso test

* add temp changes

* fix inconsistent response handling

* handle bad auth code errors

* show email when logged in

* remove the concept of default_project

* cleanup auth styles

* fix: use scratchpad constants wherever needed and remove seed

* fix sentry lint error

* migrate with update

* add scratch pad fixture and typing

* refactor pushSnapshotOnInitialize to always work

* remove console.log

* remove account from preferences

* improve trail-lines styles

* fix project sidebar scroll issue

* only create diff of projects

* fix lint

* sync

* feat: add plan upgrading modal for git sync (#6516)

* feat: add plan upgrading modal for git sync

* feat: add plan upgrading modal to project git menu and grid menu

* fix: use JSON.parse for getting flag value

* update ask modal

* remove git option from workspace settings

---------

Co-authored-by: gatzjames <jamesgatzos@gmail.com>

* sort projectswith default at top

* create local copies of remotes

* update presence exit update

* renames

* fix deleting/renaming projects with remoteId

* remoteId instead of projectId

* remote-collections

* fix initializeProjectForTeam

* fix missing parentId in remote projects

* add missing billing api

* add migration page and check for migrations

* cleanup project sync logic

* fix remote projects updating

* add notes

* fix backend-project test

* fix: use features API for fetching feature list (#6538)

* members -> collaborators

* remove dev settings

* use shouldRunMigrations in onboarding

* fix empty pane styles

* remove beforeUnload for presence

* show expiry info

* better error for upgrade in new project action

* extend retry period

* fallback and control revalidate

* add pending indicator for switching organizations

* fix exports (#6553)

* Sync Organizations (#6551)

* organization cache and updates

* error handling in org sync

* sort organizations

* clean up sort

* org sort and avatar fallback

---------

Co-authored-by: jackkav <jackkav@gmail.com>

* Presence updates (#6552)

* use remoteId for presence

* use project loader for the active project

* fix in present users

* logic clean

* match remoteId checks

---------

Co-authored-by: jackkav <jackkav@gmail.com>

* add default color to loading indicator

* fix redirect loop when there are no projects

* scratchpad fallback on initial route load

* re-enable ai check

* update error in renameProject

* db query to get projects in workspace

* review fix

* comments

* remove initModelFrom magic

* fix lint issue

---------

Co-authored-by: jackkav <jackkav@gmail.com>
Co-authored-by: Mark Kim <mark.kim@konghq.com>
Co-authored-by: Filipe Freire <livrofubia@gmail.com>
Co-authored-by: Hexxa <hexxa@outlook.com>
2023-09-24 23:12:50 +00:00

141 lines
7.0 KiB
TypeScript

import { expect } from '@playwright/test';
import { loadFixture } from '../../playwright/paths';
import { test } from '../../playwright/test';
test.describe('Debug-Sidebar', async () => {
test.slow(process.platform === 'darwin' || process.platform === 'win32', 'Slow app start on these platforms');
test.beforeEach(async ({ app, page }) => {
await page.getByRole('button', { name: 'Create in project' }).click();
const text = await loadFixture('simple.yaml');
await app.evaluate(async ({ clipboard }, text) => clipboard.writeText(text), text);
await page.getByRole('menuitemradio', { name: 'Import' }).click();
await page.locator('[data-test-id="import-from-clipboard"]').click();
await page.getByRole('button', { name: 'Scan' }).click();
await page.getByRole('dialog').getByRole('button', { name: 'Import' }).click();
await page.getByText('Collectionsimplejust now').click();
});
test.describe('Interact with sidebar', async () => {
test('Open Properties in Request Sidebar', async ({ page }) => {
const requestLocator = page.getByLabel('Request Collection').getByRole('row', { name: 'example http' });
await requestLocator.click();
await requestLocator.getByLabel('Request Actions').click();
await page.getByRole('menuitemradio', { name: 'Settings' }).click();
await page.getByRole('tab', { name: 'Preview' }).click();
// Close settings modal
await page.locator('.app').press('Escape');
const grpc = page.getByLabel('Request Collection').getByRole('row', { name: 'example grpc' });
await grpc.click();
await grpc.getByLabel('Request Actions').click();
await page.getByRole('menuitemradio', { name: 'Settings' }).click();
// Close settings modal
await page.locator('.app').press('Escape');
const ws = page.getByLabel('Request Collection').getByRole('row', { name: 'example websocket' });
await ws.click();
await ws.getByLabel('Request Actions').click();
await page.getByRole('menuitemradio', { name: 'Settings' }).click();
await page.getByRole('tab', { name: 'Preview' }).click();
// Close settings modal
await page.locator('.app').press('Escape');
const gql = page.getByLabel('Request Collection').getByRole('row', { name: 'example graphql' });
await gql.click();
await gql.getByLabel('Request Actions').click();
await page.getByRole('menuitemradio', { name: 'Settings' }).click();
await page.getByRole('tab', { name: 'Preview' }).click();
// Close settings modal
await page.locator('.app').press('Escape');
const folderLocator = page.getByLabel('Request Collection').getByRole('row', { name: 'test folder' });
await folderLocator.click();
await folderLocator.getByLabel('Request Group Actions').click();
await page.getByRole('menuitemradio', { name: 'Settings' }).click();
await page.getByRole('tab', { name: 'Preview' }).click();
// Close settings modal
await page.locator('.app').press('Escape');
});
test('Open properties of the collection', async ({ page }) => {
await page.getByLabel('Workspace actions', { exact: true }).click();
await page.getByRole('menuitemradio', { name: 'Settings' }).click();
await page.getByText('Collection Settings').click();
});
test('Filter by request name', async ({ page }) => {
await page.getByLabel('Request filter').click();
await page.getByLabel('Request filter').fill('example http');
await page.getByLabel('Request Collection').getByRole('row', { name: 'example http' }).click();
});
test('Filter by a folder name', async ({ page }) => {
await page.getByLabel('Request filter').click();
await page.getByLabel('Request filter').fill('test folder');
await page.getByLabel('Request filter').press('Enter');
await page.getByLabel('Request Collection').getByRole('row', { name: 'test folder' }).click();
});
test('Open Generate code', async ({ page }) => {
const requestLocator = page.getByLabel('Request Collection').getByRole('row', { name: 'example http' });
await requestLocator.click();
await requestLocator.getByLabel('Request Actions').click();
await page.getByRole('menuitemradio', { name: 'Generate Code' }).click();
await page.locator('[data-testid="CodeEditor"] >> text=curl').click();
await page.locator('text=Done').click();
});
test.skip('Use Copy as Curl for a request', async ({}) => {
// TODO: implement this in a separate ticket
});
test('Pin a Request', async ({ page }) => {
const requestLocator = page.getByLabel('Request Collection').getByRole('row', { name: 'example http' });
await requestLocator.click();
await requestLocator.getByLabel('Request Actions').click();
await page.getByRole('menuitemradio', { name: 'Pin' }).click();
// Click pinned request on pinned request list
const pinnedRequestLocator = page.getByLabel('Pinned Requests').getByRole('row', { name: 'example http' });
await pinnedRequestLocator.click();
await requestLocator.click();
});
test('Delete Request', async ({ page }) => {
const requestLocator = page.getByLabel('Request Collection').getByRole('row', { name: 'example http' });
await requestLocator.click();
await requestLocator.getByLabel('Request Actions').click();
await page.getByRole('menuitemradio', { name: 'Delete' }).click();
await expect(page.locator('.app')).not.toContainText('example http');
});
test('Rename a request', async ({ page }) => {
const requestLocator = page.getByLabel('Request Collection').getByRole('row', { name: 'example http' });
await requestLocator.click();
await requestLocator.getByLabel('Request Actions').click();
await page.getByRole('menuitemradio', { name: 'Rename' }).click();
await page.locator('text=Rename RequestName Rename >> input[type="text"]').fill('example http1');
await page.locator('div[role="dialog"] button:has-text("Rename")').click();
await page.getByLabel('Request Collection').getByRole('row', { name: 'example http1' }).click();
});
test('Update a request folder via settings', async ({ page }) => {
const folderLocator = page.getByLabel('Request Collection').getByRole('row', { name: 'test folder' });
await folderLocator.click();
await folderLocator.getByLabel('Request Group Actions').click();
await page.getByRole('menuitemradio', { name: 'Settings' }).click();
await page.getByPlaceholder('test folder').fill('test folder1');
await page.locator('.app').press('Escape');
await page.getByLabel('Request Collection').getByRole('row', { name: 'test folder1' }).click();
});
test('Create a new HTTP request', async ({ page }) => {
await page.getByLabel('Create in collection').click();
await page.getByRole('menuitemradio', { name: 'Http Request' }).click();
await expect(page.locator('.app')).toContainText('New Request');
});
// TODO: more scenarios will be added in follow-up iterations of increasing test coverage
});
});