-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
(PC-31944)[PRO] fix: new step to migrate e2e tests
- Loading branch information
1 parent
41d018c
commit 73643db
Showing
10 changed files
with
307 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
192 changes: 192 additions & 0 deletions
192
.github/workflows/dev_on_workflow_tests_pro_e2e_migration.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,192 @@ | ||
name: "3 [on_workflow] Tests E2E - migrations" | ||
|
||
on: | ||
workflow_call: | ||
inputs: | ||
image: | ||
type: string | ||
required: false | ||
default: pcapi | ||
tag: | ||
type: string | ||
required: true | ||
CACHE_BUCKET_NAME: | ||
type: string | ||
required: true | ||
secrets: | ||
GCP_EHP_WORKLOAD_IDENTITY_PROVIDER: | ||
required: true | ||
GCP_EHP_SERVICE_ACCOUNT: | ||
required: true | ||
|
||
env: | ||
registry: europe-west1-docker.pkg.dev/passculture-infra-prod/pass-culture-artifact-registry | ||
|
||
defaults: | ||
run: | ||
working-directory: pro | ||
|
||
jobs: | ||
tests-pro-e2e-tests: | ||
name: "E2E tests and notifications" | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/[email protected] | ||
- uses: technote-space/workflow-conclusion-action@v3 | ||
- name: "Authentification to Google" | ||
uses: "google-github-actions/auth@v2" | ||
with: | ||
workload_identity_provider: ${{ secrets.GCP_EHP_WORKLOAD_IDENTITY_PROVIDER }} | ||
service_account: ${{ secrets.GCP_EHP_SERVICE_ACCOUNT }} | ||
- name: "Get Secret" | ||
id: secrets | ||
uses: "google-github-actions/get-secretmanager-secrets@v2" | ||
with: | ||
secrets: |- | ||
SLACK_BOT_TOKEN:passculture-metier-ehp/passculture-ci-slack-bot-token | ||
ARTIFACT_REGISTRY_WORKLOAD_IDENTITY_PROVIDER:passculture-metier-ehp/infra-prod-gcp-workload-identity-provider | ||
ARTIFACT_REGISTRY_SERVICE_ACCOUNT:passculture-metier-ehp/passculture-main-artifact-registry-service-account | ||
CYPRESS_CLOUD_RECORD_KEY:passculture-metier-ehp/e2e-tests-pro-cypress-cloud-record-key | ||
CYPRESS_CLOUD_PROJECT_ID:passculture-metier-ehp/e2e-tests-pro-cypress-cloud-project-id | ||
- name: "OpenID Connect Authentication" | ||
id: openid-auth | ||
uses: "google-github-actions/auth@v2" | ||
with: | ||
create_credentials_file: false | ||
token_format: "access_token" | ||
workload_identity_provider: ${{ steps.secrets.outputs.ARTIFACT_REGISTRY_WORKLOAD_IDENTITY_PROVIDER }} | ||
service_account: ${{ steps.secrets.outputs.ARTIFACT_REGISTRY_SERVICE_ACCOUNT }} | ||
- name: "Docker login" | ||
id: docker-login | ||
uses: "docker/login-action@v1" | ||
with: | ||
registry: "europe-west1-docker.pkg.dev" | ||
username: "oauth2accesstoken" | ||
password: "${{ steps.openid-auth.outputs.access_token }}" | ||
- name: "Compute docker image name:tag" | ||
id: compute-image-name | ||
run: | | ||
echo "image_name=${{ env.registry }}/${{ inputs.image }}:${{ inputs.tag }}" | tee -a ${GITHUB_OUTPUT} | ||
echo "::notice:: Running e2e-tests with ${{ env.registry }}/${{ inputs.image }}:${{ inputs.tag }}" | ||
- name: "Download artifact" | ||
if: ${{ inputs.tag != 'latest' }} | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: ${{ inputs.image }}-${{ inputs.tag }}.tar | ||
path: ${{ runner.temp }} | ||
- uses: actions/setup-node@v3 | ||
with: | ||
node-version-file: "pro/.nvmrc" | ||
- uses: KengoTODA/actions-setup-docker-compose@v1 | ||
with: | ||
version: "2.23.3" | ||
- name: "Fix local permissions" | ||
run: sudo chown -R $PCAPI_UID:$PCAPI_GID . | ||
working-directory: api | ||
env: | ||
PCAPI_UID: 1000 | ||
PCAPI_GID: 1000 | ||
- name: "Cache the node_modules" | ||
id: "yarn-modules-cache" | ||
uses: pass-culture-github-actions/[email protected] | ||
with: | ||
compression-method: "gzip" | ||
bucket: ${{ inputs.CACHE_BUCKET_NAME }} | ||
path: | | ||
~/.cache/Cypress | ||
**/node_modules | ||
key: v1-yarn-pro-cypress-dependency-cache-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} | ||
restore-keys: | | ||
v1-yarn-pro-cypress-dependency-cache-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} | ||
- run: yarn install --immutable | ||
- name: "Run postgres and redis server" | ||
run: docker-compose -f ../docker-compose-backend.yml up postgres redis -d | ||
- name: "Set up Cloud SDK" | ||
uses: "google-github-actions/setup-gcloud@v2" | ||
- name: "Run API server" | ||
run: | | ||
if [ "${{ inputs.tag }}" != "latest" ]; then | ||
docker load --input ${{ runner.temp }}/${{ inputs.image }}-${{ inputs.tag }}.tar | ||
fi | ||
docker run \ | ||
--name pc-api \ | ||
--workdir /usr/src/app \ | ||
--volume ./../api:/usr/src/app \ | ||
--env-file ./../env_file \ | ||
--tty \ | ||
--detach \ | ||
--network pass-culture-main_db_nw \ | ||
--restart on-failure \ | ||
--publish 5001:5001 \ | ||
--publish 10002:10002 \ | ||
--entrypoint bash \ | ||
${{ steps.compute-image-name.outputs.image_name }} \ | ||
-c "set -e ; flask install_postgres_extensions ; alembic upgrade pre@head ; alembic upgrade post@head ; flask install_data ; python src/pcapi/app.py" | ||
- name: "Wait for migrations to be run" | ||
uses: iFaxity/wait-on-action@v1 | ||
with: | ||
resource: http://localhost:5001/health/api | ||
timeout: 120000 | ||
- name: "Build vite application" | ||
run: yarn build:development | ||
- name: "Serve vite preview" | ||
run: yarn serve & | ||
# Using wait-on does not work well for this service, we use curl | ||
- name: "Wait for front-end to listen" | ||
run: | | ||
timeout 300 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:3001)" != "200" ]]; do sleep 5; done' || false | ||
# Doc : https://github.com/cypress-io/github-action | ||
- name: "Cypress run" | ||
uses: cypress-io/github-action@v6 | ||
with: | ||
wait-on: "http://localhost:5001/health/api,http://localhost:5001/health/database" | ||
wait-on-timeout: 600 | ||
working-directory: pro | ||
browser: chrome | ||
config-file: cypress/cypress.config.ts | ||
env: TAGS="@P0" | ||
record: ${{ github.ref == 'refs/heads/master' }} # for Cypress Cloud | ||
spec: "cypress/e2e/migrations/*" | ||
env: | ||
CYPRESS_RECORD_KEY: ${{ steps.secrets.outputs.CYPRESS_CLOUD_RECORD_KEY }} | ||
CYPRESS_PROJECT_ID: ${{ steps.secrets.outputs.CYPRESS_CLOUD_PROJECT_ID }} | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
- name: "Move cypress videos" | ||
if: ${{ github.ref != 'refs/heads/master' }} # useless on master bc Cypress Cloud | ||
run: | | ||
mkdir -p cypress/videos/${{ github.ref }}/${{ github.sha }} && \ | ||
mv cypress/videos/*.mp4 cypress/videos/${{ github.ref }}/${{ github.sha }}/ | ||
- name: "Archive E2E results" | ||
if: ${{ github.ref != 'refs/heads/master' }} # useless on master bc Cypress Cloud | ||
uses: google-github-actions/upload-cloud-storage@v2 | ||
with: | ||
path: "pro/cypress/videos" | ||
destination: "${{ inputs.CACHE_BUCKET_NAME }}/pro/cypress/videos/e2e-artifacts" | ||
- name: 'Show pcapi log when it fails' | ||
if: failure() | ||
run: docker logs pc-api | ||
- name: "Post to a Slack channel" | ||
if: always() && failure() && github.ref == 'refs/heads/master' | ||
uses: slackapi/[email protected] | ||
with: | ||
# channel #dev | ||
channel-id: "CPZ7U1CNP" | ||
payload: | | ||
{ | ||
"attachments": [ | ||
{ | ||
"mrkdwn_in": ["text"], | ||
"color": "#A30002", | ||
"author_name": "${{github.actor}}", | ||
"author_link": "https://github.com/${{github.actor}}", | ||
"author_icon": "https://github.com/${{github.actor}}.png", | ||
"title": "Tests pro E2E", | ||
"title_link": "https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}", | ||
"text": "Les tests pro E2E échouent sur `master` :boom:" | ||
} | ||
], | ||
"unfurl_links": false, | ||
"unfurl_media": false | ||
} | ||
env: | ||
SLACK_BOT_TOKEN: ${{ steps.secrets.outputs.SLACK_BOT_TOKEN }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 0 additions & 6 deletions
6
api/src/pcapi/sandboxes/scripts/getters/pro_01_create_pro_user.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,7 @@ | ||
from pcapi.core.finance import factories as finance_factories | ||
from pcapi.core.offerers import factories as offerers_factories | ||
from pcapi.core.users import factories as users_factories | ||
from pcapi.sandboxes.scripts.utils.helpers import get_pro_user_helper | ||
|
||
|
||
def create_pro_user_with_venue_bank_account_and_userofferer() -> dict: | ||
pro_user = users_factories.ProFactory() | ||
venue = offerers_factories.VenueFactory() | ||
|
||
finance_factories.BankAccountFactory(offerer=venue.managingOfferer) | ||
offerers_factories.UserOffererFactory(user=pro_user, offerer=venue.managingOfferer) | ||
return {"user": get_pro_user_helper(pro_user)} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
describe('Login Test with HTTP Request', () => { | ||
|
||
let login = ''; | ||
let password = 'user@AZERTY123' | ||
|
||
before(() => { | ||
cy.visit('/connexion') | ||
cy.request({ | ||
method: 'GET', | ||
url: 'http://localhost:5001/sandboxes/pro_01_create_pro_user/create_pro_user_with_venue_bank_account_and_userofferer', | ||
}).then((response) => { | ||
login = response.body.user.email | ||
}); | ||
}) | ||
|
||
it('Should fill out the login form', () => { | ||
expect(true).to.equal(true) | ||
cy.login({ email: login, password: password, redirectUrl: "/parcours-inscription" }) | ||
cy.findAllByTestId('spinner').should('not.exist') | ||
cy.findByText('Finalisez votre inscription') | ||
}); | ||
|
||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
import { addCucumberPreprocessorPlugin } from '@badeball/cypress-cucumber-preprocessor' | ||
import { createEsbuildPlugin } from '@badeball/cypress-cucumber-preprocessor/esbuild' | ||
import createBundler from '@bahmutov/cypress-esbuild-preprocessor' | ||
import { defineConfig } from 'cypress' | ||
import cypressFailFast = require('cypress-fail-fast/plugin') | ||
|
||
async function setupNodeEvents( | ||
on: Cypress.PluginEvents, | ||
config: Cypress.PluginConfigOptions | ||
): Promise<Cypress.PluginConfigOptions> { | ||
// This is required for the preprocessor to be able to generate JSON reports after each run, and more, | ||
await addCucumberPreprocessorPlugin(on, config) | ||
|
||
on( | ||
'file:preprocessor', | ||
createBundler({ | ||
plugins: [createEsbuildPlugin(config)], | ||
}) | ||
) | ||
cypressFailFast(on, config) | ||
// Make sure to return the config object as it might have been modified by the plugin. | ||
return config | ||
} | ||
|
||
// ts-unused-exports:disable-next-line | ||
export default defineConfig({ | ||
e2e: { | ||
specPattern: '**/*.feature', | ||
setupNodeEvents, | ||
|
||
baseUrl: 'http://localhost:3001', | ||
experimentalRunAllSpecs: true, // Run all specs test in UI mode | ||
}, | ||
retries: { | ||
runMode: 2, | ||
openMode: 0, | ||
}, | ||
viewportHeight: 1080, | ||
viewportWidth: 1920, | ||
defaultCommandTimeout: 30000, | ||
requestTimeout: 30000, | ||
video: true, | ||
videoCompression: true, | ||
watchForFileChanges: false, | ||
env: { | ||
FAIL_FAST_STRATEGY: 'run', | ||
FAIL_FAST_ENABLED: true, | ||
FAIL_FAST_BAIL: 3, | ||
}, | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters