From 47aad8aa87ea7362bc948c9084bdb3d2594a2e8b Mon Sep 17 00:00:00 2001 From: Cristhian Zanforlin Lousa <72977554+Cristhianzl@users.noreply.github.com> Date: Fri, 19 Apr 2024 09:11:30 -0300 Subject: [PATCH] Resolve Test Failures Post-Dev Merge (#1742) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🔧 (playwright.config.ts): set workers to 1 to avoid parallel tests on CI ✨ (chat_io.spec.ts): refactor code to wait for modal to appear before clicking on the new project button ✨ (codeAreaModalComponent.spec.ts): refactor code to wait for modal to appear before clicking on the new project button, update code assertions ✨ (curl_api_generation.spec.ts): refactor code to wait for modal to appear before clicking on the new project button ✨ (dragAndDrop.spec.ts): refactor code to handle the case when generic node is not present ✨ (dropdownComponent.spec.ts): refactor code to wait for modal to appear before clicking on the new project button ✨ (filterEdge.spec.ts): add support for dynamic waiting for modal to appear before interacting with it 🐛 (filterEdge.spec.ts): remove redundant clicks on buttons and improve code readability ♻️ (filterEdge.spec.ts): refactor code to use loop instead of repetitive code for zooming out and waiting for timeout ✅ (filterEdge.spec.ts): update assertions to match changes in the application UI ✨ (floatComponent.spec.ts): refactor floatComponent test to use getByTitle instead of complex locators for button clicks ✨ (flowPage.spec.ts): refactor flowPage test to use getByTitle instead of complex locators for button clicks ✨ (group.spec.ts): refactor group test to use getByTestId instead of complex locators for button clicks and add loop to handle modal loading ✨ (inputComponent.spec.ts): refactor inputComponent test to use getByTitle instead of complex locators for button clicks ✨ (inputListComponent.spec.ts): add support for dynamic modal count to handle asynchronous modal loading 🐛 (inputListComponent.spec.ts): fix search query in inputListComponent test ♻️ (inputListComponent.spec.ts): refactor repetitive code for zooming out in inputListComponent test ✨ (intComponent.spec.ts): add support for dynamic modal count to handle asynchronous modal loading ♻️ (intComponent.spec.ts): refactor repetitive code for zooming out in intComponent test ✨ (keyPairListComponent.spec.ts): add support for dynamic modal count to handle modal loading delay ✨ (keyPairListComponent.spec.ts): update search input value to "amazon bedrock" for more accurate search results ✨ (keyPairListComponent.spec.ts): update node locator to "model_specsAmazon Bedrock" for more accurate node selection ✨ (keyPairListComponent.spec.ts): update zoom out action to use "zoom out" title for better readability ✨ (keyPairListComponent.spec.ts): update keypair verification locator to "editNodekeypair0" for more accurate verification ✨ (keyPairListComponent.spec.ts): update showcache checkbox locator to "showcache" for better readability ✨ (keyPairListComponent.spec.ts): update showcredentials_profile_name checkbox locator to "showcredentials_profile_name" for better readability ✨ (keyPairListComponent.spec.ts): update elementCountNode variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update plusButtonLocator variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update plusButtonLocatorNode variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementCountNode variable to handle nullability ✨ (keyPairListComponent.spec.ts): update keyPairVerification variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update plusButtonLocator variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update keyPairVerification variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update plusButtonLocatorNode variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementCountNode variable to handle nullability ✨ (keyPairListComponent.spec.ts): update keyPairVerification variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update plusButtonLocator variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update keyPairVerification variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update plusButtonLocatorNode variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementCountNode variable to handle nullability ✨ (keyPairListComponent.spec.ts): update keyPairVerification variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update plusButtonLocator variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update keyPairVerification variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update plusButtonLocatorNode variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementCountNode variable to handle nullability ✨ (keyPairListComponent.spec.ts): update keyPairVerification variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update plusButtonLocator variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update keyPairVerification variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update plusButtonLocatorNode variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementCountNode variable to handle nullability ✨ (keyPairListComponent.spec.ts): update keyPairVerification variable to handle nullability ✨ (keyPairListComponent.spec.ts): update elementKeyCount variable to handle nullability ✨ (keyPairListComponent.spec.ts): update plus ✨ (promptModalComponent.spec.ts): add support for dynamic modal count to handle asynchronous modal rendering ✨ (python_api_generation.spec.ts): add support for dynamic modal count to handle asynchronous modal rendering ✨ (saveComponents.spec.ts): add support for dynamic modal count to handle asynchronous modal rendering ✨ (store.spec.ts): add support for dynamic icon count to handle asynchronous rendering ✨ (textAreaModalComponent.spec.ts): add support for dynamic modal count to handle asynchronous modal rendering ✨ (toggleComponent.spec.ts): add support for dynamic waiting for modal to appear before interacting with it 🐛 (toggleComponent.spec.ts): fix typo in element locator for dataDirectory ♻️ (toggleComponent.spec.ts): refactor repetitive code for zooming out ✅ (toggleComponent.spec.ts): add assertions for checking toggle state and button clicks ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggleComponent.spec.ts): refactor repetitive code for toggling and checking toggle state ♻️ (toggle * 🔧 (frontend/package.json): add dotenv package as a dependency to enable environment variable configuration 🔧 (frontend/playwright.config.ts): add dotenv configuration to read environment variables from .env file ♻️ (frontend/src/modals/IOModal/components/chatView/chatMessage/index.tsx): refactor code to add data-testid attribute to span element for sender name to improve testability ✅ (frontend/tests/end-to-end/chatInputOutput.spec.ts): add end-to-end test for user interaction with chat input/output functionality ✅ (frontend/tests/end-to-end/chat_io_teste.spec.ts): add end-to-end test for chat input/output functionality with file upload ✅ (chat_io.spec.ts): remove chat_io.spec.ts test file as it is no longer needed ✨ (textInputOutput.spec.ts): add new test file textInputOutput.spec.ts to test the functionality of text input and output components in the application * 📝 (typescript_test.yml): remove unnecessary comments and unused code related to Playwright browser binaries caching and installation 🔧 (typescript_test.yml): refactor setup of Python and Poetry versions to use a custom GitHub action for caching and setting up the environment efficiently * ✨ (globalVariables.spec.ts): add end-to-end test for global variables functionality in the frontend ✨ (textInputOutput.spec.ts): rename test from "CodeAreaModalComponent" to "TextInputOutputComponent" to improve clarity and accuracy * 📝 (chatInputOutput.spec.ts): update test URL to use relative path instead of absolute path for better test portability 📝 (filterEdge.spec.ts): update test URL to use relative path instead of absolute path for better test portability 📝 (inputListComponent.spec.ts): update test URL to use relative path instead of absolute path for better test portability 📝 (store.spec.ts): update test URL to use relative path instead of absolute path for better test portability 📝 (textAreaModalComponent.spec.ts): update test URL to use relative path instead of absolute path for better test portability * 🚀 (typescript_test.yml): add uvicorn command to run the app with Playwright tests 🔧 (typescript_test.yml): configure uvicorn to use the langflow.main:create_app factory function, listen on all interfaces, use port 7860, enable auto-reload, read environment variables from .env file, and use asyncio event loop * 🔧 (typescript_test.yml): fix path to .env file in the uvicorn command to correctly load environment variables * 🔧 (typescript_test.yml): fix path to .env file in uvicorn command to correctly locate the file * 🐛 (typescript_test.yml): remove unnecessary --env-file flag from uvicorn command to fix an issue with loading environment variables * 🔧 (typescript_test.yml): run uvicorn command in the background and add a 2-second sleep to allow the server to start before running Playwright tests * ✨ (typescript_test.yml): update Playwright test command to use a single worker (--workers=1) to avoid race conditions and improve stability during test execution * ✨ (.github/workflows/typescript_test.yml): remove unnecessary flags from the Playwright test command to simplify the command and improve readability * 🔧 (typescript_test.yml): add command to install Playwright dependencies before running Playwright tests to ensure all required dependencies are installed * ⬆️ (typescript_test.yml): upgrade Playwright installation command to use 'npm install' instead of 'npx playwright install --with-deps' to simplify the installation process * ✅ (typescript_test.yml): add npm start command before running the tests to ensure the frontend server is running during the tests * 🔧 (typescript_test.yml): run 'npm start' command in the background to allow the next step to execute concurrently ✨ (typescript_test.yml): add step to upload blob report to GitHub Actions Artifacts for easier access and analysis * ✨ (typescript_test.yml): update Playwright test command to include shard index and total for parallel test execution * 🔧 (playwright.config.ts): add conditional dotenv configuration based on process.env.CI to prevent loading .env file in CI environment * 🔧 (playwright.config.ts): update dotenv configuration to only load .env file when not running in a CI environment 📝 (playwright.config.ts): add comment explaining the purpose of the dotenv configuration and providing a link to the Playwright documentation for test configuration * ♻️ (playwright.config.ts): comment out dotenv.config() calls to improve performance and remove unnecessary code * 📝 (playwright.config.ts): comment out the forbidOnly and retries options to disable them 📝 (playwright.config.ts): change the reporter option to always use the "blob" reporter 📝 (playwright.config.ts): comment out the globalTeardown option to disable it 📝 (playwright.config.ts): set the reuseExistingServer option to always be true * ♻️ (playwright.config.ts): refactor fullyParallel option to be set to false instead of true to disable running tests in parallel * ✨ (.github/workflows/typescript_test.yml): remove shardIndex and shardTotal arguments from the Playwright test command to simplify the command and avoid unnecessary complexity * 🐛 (playwright.config.ts): add --loop asyncio flag to uvicorn command to fix asyncio event loop issue * 📝 (playwright.config.ts): add support for reading environment variables from a .env file ♻️ (playwright.config.ts): refactor code to use path module instead of importing it from @playwright/test ✅ (playwright.config.ts): enable forbidOnly option to fail the build on CI if test.only is accidentally left in the source code ✅ (playwright.config.ts): enable retries option to retry tests on CI 2 times ♻️ (playwright.config.ts): refactor code to use globalTeardown option to specify the path to globalTeardown.ts file * 🔧 (typescript_test.yml): run Playwright tests in the background using the '&' operator to improve workflow efficiency ♻️ (playwright.config.ts): refactor workers configuration to use 10 workers on CI and 1 worker otherwise to optimize test execution 🐛 (darkStore.tsx): fix issue where stars and lastUpdated values were not being refreshed correctly on CI environment * ♻️ (darkStore.tsx): remove unnecessary empty line to improve code readability * 🔧 (typescript_test.yml): remove unnecessary ampersand (&) at the end of the 'npx playwright test' command to prevent running the command in the background * 📝 (darkStore.tsx): set "githubStars" to "0" in localStorage when running in CI environment to ensure consistent test results 🐛 (filterEdge.spec.ts): update test assertions to match changes in the application UI * 📝 (api.tsx): add condition to reject promise if error occurs during API request to GitHub to prevent auto-login flow 📝 (auto_login.spec.ts): update page.goto() URLs to use relative paths instead of absolute URLs 📝 (chatInputOutput.spec.ts): move dotenv.config() call after page.goto() to ensure proper environment variable loading 📝 (codeAreaModalComponent.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (curl_api_generation.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (dragAndDrop.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (dropdownComponent.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (floatComponent.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (flowPage.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (globalVariables.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (group.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (inputComponent.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (intComponent.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (keyPairListComponent.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (langflowShortcuts.spec.ts): update page.goto() URL to use relative path instead of absolute URL 📝 (nestedComponent.spec.ts): update page URL to use relative path instead of absolute path for better portability and flexibility 📝 (promptModalComponent.spec.ts): update page URL to use relative path instead of absolute path for better portability and flexibility 📝 (saveComponents.spec.ts): update page URL to use relative path instead of absolute path for better portability and flexibility 📝 (textInputOutput.spec.ts): update page URL to use relative path instead of absolute path for better portability and flexibility 📝 (toggleComponent.spec.ts): update page URL to use relative path instead of absolute path for better portability and flexibility * 🔧 (playwright.config.ts): set workers to a fixed value of 10 to improve test performance and avoid parallel tests on CI 🐛 (group.spec.ts): move page.goto("/") inside the test function to ensure the page is properly loaded before running the test * ✅ (chatInputOutput.spec.ts): add dotenv configuration to load environment variables before running the test 🐛 (chatInputOutput.spec.ts): fix issue where the test was not waiting for the page to load before interacting with it ✅ (curl_api_generation.spec.ts): add dotenv configuration to load environment variables before running the test 🐛 (curl_api_generation.spec.ts): fix issue where the test was not waiting for the page to load before interacting with it * 🔧 (playwright.config.ts): update number of workers based on the value of the CI environment variable 🐛 (chatInputOutput.spec.ts): fix potential null reference error when getting modal count 🐛 (codeAreaModalComponent.spec.ts): fix potential null reference error when getting modal count 🐛 (curl_api_generation.spec.ts): fix potential null reference error when getting modal count 🐛 (dropdownComponent.spec.ts): fix potential null reference error when getting modal count 🐛 (filterEdge.spec.ts): fix potential null reference error when getting modal count 🐛 (globalVariables.spec.ts): fix potential null reference error when getting modal count 🐛 (group.spec.ts): fix potential null reference error when getting modal count 🐛 (inputComponent.spec.ts): fix potential null reference error when getting modal count 🐛 (inputListComponent.spec.ts): fix potential null reference error when getting modal count 🐛 (intComponent.spec.ts): fix potential null reference error when getting modal count 🐛 (keyPairListComponent.spec.ts): fix potential null reference error when getting modal count 🐛 (langflowShortcuts.spec.ts): fix potential null reference error when getting modal count 🐛 (nestedComponent.spec.ts): fix potential null reference error when getting modal count 🐛 (promptModalComponent.spec.ts): fix potential null pointer exception when accessing page object 🐛 (python_api_generation.spec.ts): fix potential null pointer exception when accessing page object 🐛 (saveComponents.spec.ts): fix potential null pointer exception when accessing page object 🐛 (textAreaModalComponent.spec.ts): fix potential null pointer exception when accessing page object 🐛 (textInputOutput.spec.ts): fix potential null pointer exception when accessing page object 🐛 (toggleComponent.spec.ts): fix potential null pointer exception when accessing page object 🐛 (tweaks_test.spec.ts): fix potential null pointer exception when accessing page object * 🔧 (playwright.config.ts): update workers configuration to use 10 workers on CI and default to an empty value otherwise 🔧 (playwright.config.ts): update reporter configuration to use "blob" reporter on CI and "html" reporter otherwise * 🔧 (playwright.config.ts): update workers configuration to use a default value of 5 when not running on CI environment, to improve test performance and resource usage * ✨ (playwright.config.ts): enable fully parallel test execution to improve test performance 🐛 (chatInputOutput.spec.ts): handle potential error when counting modal titles to prevent test failures 🐛 (codeAreaModalComponent.spec.ts): handle potential error when counting modal titles to prevent test failures 🐛 (curl_api_generation.spec.ts): handle potential error when counting modal titles to prevent test failures 🐛 (dragAndDrop.spec.ts): handle potential error when counting modal titles to prevent test failures 🐛 (dropdownComponent.spec.ts): handle potential error when counting modal titles to prevent test failures 🐛 (filterEdge.spec.ts): handle potential error when counting modal titles to prevent test failures 🐛 (flowPage.spec.ts): handle potential error when counting modal titles to prevent test failures 🐛 (globalVariables.spec.ts): handle potential error when counting modal titles to prevent test failures 🐛 (group.spec.ts): Fix bug in group and ungroup updating values test where modalCount was not correctly initialized 🐛 (inputComponent.spec.ts): Fix bug in InputComponent test where modalCount was not correctly initialized 🐛 (inputListComponent.spec.ts): Fix bug in InputListComponent test where modalCount was not correctly initialized 🐛 (intComponent.spec.ts): Fix bug in IntComponent test where modalCount was not correctly initialized 🐛 (keyPairListComponent.spec.ts): Fix bug in KeypairListComponent test where modalCount was not correctly initialized 🐛 (langflowShortcuts.spec.ts): Fix bug in LangflowShortcuts test where modalCount was not correctly initialized 🐛 (nestedComponent.spec.ts): Fix bug in NestedComponent test where modalCount was not correctly initialized 🐛 (promptModalComponent.spec.ts): Fix bug in PromptTemplateComponent test where modalCount was not correctly initialized 🐛 (python_api_generation.spec.ts): Fix bug in python_api_generation test where modalCount was not correctly initialized 🐛 (saveComponents.spec.ts): Fix bug in save group component tests where modalCount was not correctly initialized 🐛 (textAreaModalComponent.spec.ts): Fix bug in TextAreaModalComponent test where modalCount was not correctly initialized ✅ (textInputOutput.spec.ts): handle error when getting modal title element and set modalCount to 0 in case of error ✅ (toggleComponent.spec.ts): handle error when getting modal title element and set modalCount to 0 in case of error ✅ (tweaks_test.spec.ts): handle error when getting modal title element and set modalCount to 0 in case of error * ⬆️ (playwright.config.ts): downgrade the number of workers from 10 to 5 to reduce resource usage and improve test stability * ⬆️ (playwright.config.ts): decrease the number of workers to 1 to avoid parallel tests on CI 📝 (playwright.config.ts): comment out the workers configuration and add a new line with a single worker to clarify the intention ✨ (playwright.config.ts): add a new file "temp" to the frontend directory * 📝 (chatInputOutput.spec.ts): add support for loading environment variables from .env file for local development and CI/CD environments 📝 (textInputOutput.spec.ts): add support for loading environment variables from .env file for local development and CI/CD environments * 🔧 (typescript_test.yml): add step to create .env file and populate it with secret environment variables 🚀 (typescript_test.yml): run Playwright tests after creating .env file to ensure tests have access to necessary environment variables * ✅ (dragAndDrop.spec.ts): add a test to close the modal by clicking on the "Close" button * 🔧 (typescript_test.yml): update Playwright test command to include shard index and total for distributed test execution ♻️ (playwright.config.ts): refactor workers configuration to use environment variable CI to determine the number of workers for parallel tests * ⬆️ (playwright.config.ts): downgrade the number of workers to 1 to avoid parallel tests on CI environment * 📝 (filterEdge.spec.ts): remove unnecessary click on element with id 'headlessui-disclosure-button-:rld:' ♻️ (filterEdge.spec.ts): remove redundant assertions for elements with ids 'saved_componentsBasic RAG' and 'saved_componentsGroup' ♻️ (floatComponent.spec.ts): refactor code to handle modal dynamically by checking for modal title element and waiting for it to appear before clicking on 'new-project-btn' element * 🔧 (playwright.config.ts): update number of workers to 5 when running on CI to improve test parallelization 🐛 (filterEdge.spec.ts): add a 2-second delay before asserting visibility of tooltips to ensure they are fully rendered before checking visibility * 📝 (index.tsx): add data-testid attribute to the flow name element for easier testing and querying 📝 (index.tsx): add data-testid attribute to the public checkbox for easier testing and querying 📝 (test_file.txt): add a test file for end-to-end testing purposes 📝 (fileUploadComponent.spec.ts): add end-to-end test for file upload functionality ✨ (flowSettings.spec.ts): add end-to-end test for flow settings functionality ✨ (store.spec.ts): add end-to-end test for sharing a component with the share button * 🔧 (playwright.config.ts): set workers to 1 to avoid parallel tests execution and improve stability 📝 (test_file.txt): remove newline at the end of the file for consistency ♻️ (flowPage.spec.ts): refactor code to remove unnecessary lines and commented out code ♻️ (flowSettings.spec.ts): refactor code to generate a random flow name instead of hardcoding it * 🔧 (typescript_test.yml): remove shardIndex and shardTotal arguments from the 'npx playwright test' command to simplify the command and remove unnecessary complexity 🐛 (textInputOutput.spec.ts): change 'textContent()' to 'inputValue()' to correctly retrieve the value of the input field * ♻️ (typescript_test.yml): refactor test workflow to remove unnecessary matrix configuration for shardIndex and shardTotal ✅ (typescript_test.yml): update test workflow to run tests on a single shard instead of multiple shards for simplicity and efficiency * 🔧 (playwright.config.ts): add clipboard permissions for chromium and firefox projects to enable clipboard read and write functionality 🔧 (curl_api_generation.spec.ts): remove unnecessary context permission grant for clipboard read and write 🔧 (python_api_generation.spec.ts): remove unnecessary context permission grant for clipboard read and write 🔧 (tweaks_test.spec.ts): remove unnecessary context permission grant for clipboard read and write --------- Co-authored-by: Gabriel Luiz Freitas Almeida --- .github/workflows/typescript_test.yml | 51 ++---- src/frontend/package-lock.json | 12 ++ src/frontend/package.json | 1 + src/frontend/playwright.config.ts | 37 ++-- .../components/menuBar/index.tsx | 4 +- src/frontend/src/controllers/API/api.tsx | 3 + .../components/chatView/chatMessage/index.tsx | 7 +- src/frontend/src/modals/shareModal/index.tsx | 1 + src/frontend/src/stores/darkStore.tsx | 5 + .../tests/end-to-end/assets/test_file.txt | 1 + .../tests/end-to-end/auto_login.spec.ts | 4 +- .../tests/end-to-end/chatInputOutput.spec.ts | 149 ++++++++++++++++ src/frontend/tests/end-to-end/chat_io.spec.ts | 49 ------ .../end-to-end/codeAreaModalComponent.spec.ts | 67 ++++--- .../end-to-end/curl_api_generation.spec.ts | 19 +- .../tests/end-to-end/dragAndDrop.spec.ts | 22 ++- .../end-to-end/dropdownComponent.spec.ts | 33 ++-- .../end-to-end/fileUploadComponent.spec.ts | 88 ++++++++++ .../tests/end-to-end/filterEdge.spec.ts | 163 +++++++----------- .../tests/end-to-end/floatComponent.spec.ts | 46 +++-- .../tests/end-to-end/flowPage.spec.ts | 43 +++-- .../tests/end-to-end/flowSettings.spec.ts | 73 ++++++++ .../tests/end-to-end/globalVariables.spec.ts | 72 ++++++++ src/frontend/tests/end-to-end/group.spec.ts | 18 +- .../tests/end-to-end/inputComponent.spec.ts | 35 ++-- .../end-to-end/inputListComponent.spec.ts | 49 +++--- .../tests/end-to-end/intComponent.spec.ts | 50 +++--- .../end-to-end/keyPairListComponent.spec.ts | 63 +++---- .../end-to-end/langflowShortcuts.spec.ts | 44 +++-- .../tests/end-to-end/nestedComponent.spec.ts | 19 +- .../end-to-end/promptModalComponent.spec.ts | 34 ++-- .../end-to-end/python_api_generation.spec.ts | 17 +- .../tests/end-to-end/saveComponents.spec.ts | 51 +++--- src/frontend/tests/end-to-end/store.spec.ts | 81 +++++++-- .../end-to-end/textAreaModalComponent.spec.ts | 35 ++-- .../tests/end-to-end/textInputOutput.spec.ts | 155 +++++++++++++++++ .../tests/end-to-end/toggleComponent.spec.ts | 79 +++++---- .../tests/end-to-end/tweaks_test.spec.ts | 18 +- 38 files changed, 1175 insertions(+), 523 deletions(-) create mode 100644 src/frontend/tests/end-to-end/assets/test_file.txt create mode 100644 src/frontend/tests/end-to-end/chatInputOutput.spec.ts delete mode 100644 src/frontend/tests/end-to-end/chat_io.spec.ts create mode 100644 src/frontend/tests/end-to-end/fileUploadComponent.spec.ts create mode 100644 src/frontend/tests/end-to-end/flowSettings.spec.ts create mode 100644 src/frontend/tests/end-to-end/globalVariables.spec.ts create mode 100644 src/frontend/tests/end-to-end/textInputOutput.spec.ts diff --git a/.github/workflows/typescript_test.yml b/.github/workflows/typescript_test.yml index a75327785..0cb3213d8 100644 --- a/.github/workflows/typescript_test.yml +++ b/.github/workflows/typescript_test.yml @@ -19,8 +19,8 @@ jobs: strategy: fail-fast: false matrix: - shardIndex: [1, 2, 3, 4] - shardTotal: [4] + shardIndex: [1] + shardTotal: [1] steps: - name: Checkout code uses: actions/checkout@v4 @@ -38,27 +38,6 @@ jobs: npm ci if: ${{ steps.setup-node.outputs.cache-hit != 'true' }} - # Attempt to restore the correct Playwright browser binaries based on the - # currently installed version of Playwright (The browser binary versions - # may change with Playwright versions). - # Note: Playwright's cache directory is hard coded because that's what it - # says to do in the docs. There doesn't appear to be a command that prints - # it out for us. - # - uses: actions/cache@v4 - # id: playwright-cache - # with: - # path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }} - # key: "${{ runner.os }}-playwright-${{ hashFiles('src/frontend/package-lock.json') }}" - # # As a fallback, if the Playwright version has changed, try use the - # # most recently cached version. There's a good chance that at least one - # # of the browser binary versions haven't been updated, so Playwright can - # # skip installing that in the next step. - # # Note: When falling back to an old cache, `cache-hit` (used below) - # # will be `false`. This allows us to restore the potentially out of - # # date cache, but still let Playwright decide if it needs to download - # # new binaries or not. - # restore-keys: | - # ${{ runner.os }}-playwright- - name: Cache playwright binaries uses: actions/cache@v4 id: playwright-cache @@ -82,32 +61,26 @@ jobs: npx playwright install-deps if: steps.playwright-cache.outputs.cache-hit != 'true' - # If the Playwright browser binaries weren't able to be restored, we tell - # paywright to install everything for us. - # - name: Install Playwright's dependencies - # if: steps.playwright-cache.outputs.cache-hit != 'true' - # run: npx playwright install --with-deps - - - name: Install Poetry - run: pipx install "poetry==${{ env.POETRY_VERSION }}" - - - name: Set up Python - uses: actions/setup-python@v5 - id: setup-python + - name: Set up Python ${{ env.PYTHON_VERSION }} + Poetry ${{ env.POETRY_VERSION }} + uses: "./.github/actions/poetry_caching" with: python-version: ${{ env.PYTHON_VERSION }} - cache: "poetry" - + poetry-version: ${{ env.POETRY_VERSION }} + cache-key: ${{ runner.os }}-poetry-${{ env.POETRY_VERSION }}-${{ hashFiles('**/poetry.lock') }} - name: Install Python dependencies run: | poetry env use ${{ env.PYTHON_VERSION }} poetry install - if: ${{ steps.setup-python.outputs.cache-hit != 'true' }} + + - name: create .env + run: | + touch .env + echo "${{ secrets.ENV_VARS }}" > .env - name: Run Playwright Tests run: | cd src/frontend - npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} + npx playwright test - name: Upload blob report to GitHub Actions Artifacts if: always() diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json index 971c9eee1..7b2e691b6 100644 --- a/src/frontend/package-lock.json +++ b/src/frontend/package-lock.json @@ -38,6 +38,7 @@ "clsx": "^1.2.1", "cmdk": "^1.0.0", "dompurify": "^3.0.5", + "dotenv": "^16.4.5", "esbuild": "^0.17.19", "framer-motion": "^11.0.6", "lodash": "^4.17.21", @@ -5671,6 +5672,17 @@ "tslib": "^2.0.3" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", diff --git a/src/frontend/package.json b/src/frontend/package.json index fd27d8bd6..6e3fbd344 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -33,6 +33,7 @@ "clsx": "^1.2.1", "cmdk": "^1.0.0", "dompurify": "^3.0.5", + "dotenv": "^16.4.5", "esbuild": "^0.17.19", "framer-motion": "^11.0.6", "lodash": "^4.17.21", diff --git a/src/frontend/playwright.config.ts b/src/frontend/playwright.config.ts index 649c42390..9535e0a15 100644 --- a/src/frontend/playwright.config.ts +++ b/src/frontend/playwright.config.ts @@ -1,14 +1,17 @@ import { defineConfig, devices } from "@playwright/test"; +import * as dotenv from "dotenv"; +import path from "path"; +dotenv.config(); +dotenv.config({ path: path.resolve(__dirname, "../../.env") }); /** * Read environment variables from file. * https://github.com/motdotla/dotenv */ -// require('dotenv').config(); - /** * See https://playwright.dev/docs/test-configuration. */ + export default defineConfig({ testDir: "./tests", /* Run tests in files in parallel */ @@ -18,7 +21,7 @@ export default defineConfig({ /* Retry on CI only */ retries: process.env.CI ? 2 : 0, /* Opt out of parallel tests on CI. */ - workers: 3, + workers: 1, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ timeout: 120 * 1000, // reporter: [ @@ -40,24 +43,32 @@ export default defineConfig({ projects: [ { name: "chromium", - use: { ...devices["Desktop Chrome"] }, + use: { + ...devices["Desktop Chrome"], + contextOptions: { + // chromium-specific permissions + permissions: ["clipboard-read", "clipboard-write"], + }, + }, }, { name: "firefox", - use: { ...devices["Desktop Firefox"] }, + use: { + ...devices["Desktop Firefox"], + launchOptions: { + firefoxUserPrefs: { + "dom.events.asyncClipboard.readText": true, + "dom.events.testing.asyncClipboard": true, + }, + }, + }, }, - - // { - // name: "webkit", - // use: { ...devices["Desktop Safari"] }, - // }, ], - /* Run your local dev server before starting the tests */ webServer: [ { command: - "poetry run uvicorn --factory langflow.main:create_app --host 127.0.0.1 --port 7860", + "poetry run uvicorn --factory langflow.main:create_app --host 127.0.0.1 --port 7860 --loop asyncio", port: 7860, env: { LANGFLOW_DATABASE_URL: "sqlite:///./temp", @@ -65,7 +76,7 @@ export default defineConfig({ }, stdout: "ignore", - reuseExistingServer: !process.env.CI, + reuseExistingServer: true, timeout: 120 * 1000, }, { diff --git a/src/frontend/src/components/headerComponent/components/menuBar/index.tsx b/src/frontend/src/components/headerComponent/components/menuBar/index.tsx index 756143217..d61f64620 100644 --- a/src/frontend/src/components/headerComponent/components/menuBar/index.tsx +++ b/src/frontend/src/components/headerComponent/components/menuBar/index.tsx @@ -83,7 +83,9 @@ export const MenuBar = ({ diff --git a/src/frontend/src/controllers/API/api.tsx b/src/frontend/src/controllers/API/api.tsx index 033a0e648..8084dfeb9 100644 --- a/src/frontend/src/controllers/API/api.tsx +++ b/src/frontend/src/controllers/API/api.tsx @@ -24,6 +24,9 @@ function ApiInterceptor() { async (error: AxiosError) => { if (error.response?.status === 403 || error.response?.status === 401) { if (!autoLogin) { + if (error?.config?.url?.includes("github")) { + return Promise.reject(error); + } const stillRefresh = checkErrorCount(); if (!stillRefresh) { return Promise.reject(error); diff --git a/src/frontend/src/modals/IOModal/components/chatView/chatMessage/index.tsx b/src/frontend/src/modals/IOModal/components/chatView/chatMessage/index.tsx index b15b61df3..93a0db3c3 100644 --- a/src/frontend/src/modals/IOModal/components/chatView/chatMessage/index.tsx +++ b/src/frontend/src/modals/IOModal/components/chatView/chatMessage/index.tsx @@ -135,7 +135,12 @@ export default function ChatMessage({ alt={!chat.isSend ? "robot_image" : "male_technology"} /> - + {chat.sender_name} diff --git a/src/frontend/src/modals/shareModal/index.tsx b/src/frontend/src/modals/shareModal/index.tsx index 8272bddbe..f37c166f3 100644 --- a/src/frontend/src/modals/shareModal/index.tsx +++ b/src/frontend/src/modals/shareModal/index.tsx @@ -237,6 +237,7 @@ export default function ShareModal({ onCheckedChange={(event: boolean) => { setSharePublic(event); }} + data-testid="public-checkbox" />