Browse Source
Co-authored-by: Ankush <ankush@iwebnotes.com> Co-authored-by: Nabin Hait <nabinhait@gmail.com>develop
Rucha Mahabal
3 years ago
10 changed files with 229 additions and 2 deletions
@ -0,0 +1,108 @@ |
|||
name: UI |
|||
|
|||
on: |
|||
pull_request: |
|||
workflow_dispatch: |
|||
|
|||
jobs: |
|||
test: |
|||
runs-on: ubuntu-18.04 |
|||
|
|||
strategy: |
|||
fail-fast: false |
|||
|
|||
name: UI Tests (Cypress) |
|||
|
|||
services: |
|||
mysql: |
|||
image: mariadb:10.3 |
|||
env: |
|||
MYSQL_ALLOW_EMPTY_PASSWORD: YES |
|||
ports: |
|||
- 3306:3306 |
|||
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3 |
|||
|
|||
steps: |
|||
- name: Clone |
|||
uses: actions/checkout@v2 |
|||
|
|||
- name: Setup Python |
|||
uses: actions/setup-python@v2 |
|||
with: |
|||
python-version: 3.7 |
|||
|
|||
- uses: actions/setup-node@v2 |
|||
with: |
|||
node-version: 14 |
|||
check-latest: true |
|||
|
|||
- name: Add to Hosts |
|||
run: | |
|||
echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts |
|||
|
|||
- name: Cache pip |
|||
uses: actions/cache@v2 |
|||
with: |
|||
path: ~/.cache/pip |
|||
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} |
|||
restore-keys: | |
|||
${{ runner.os }}-pip- |
|||
${{ runner.os }}- |
|||
|
|||
- name: Cache node modules |
|||
uses: actions/cache@v2 |
|||
env: |
|||
cache-name: cache-node-modules |
|||
with: |
|||
path: ~/.npm |
|||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} |
|||
restore-keys: | |
|||
${{ runner.os }}-build-${{ env.cache-name }}- |
|||
${{ runner.os }}-build- |
|||
${{ runner.os }}- |
|||
|
|||
- name: Get yarn cache directory path |
|||
id: yarn-cache-dir-path |
|||
run: echo "::set-output name=dir::$(yarn cache dir)" |
|||
|
|||
- uses: actions/cache@v2 |
|||
id: yarn-cache |
|||
with: |
|||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} |
|||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} |
|||
restore-keys: | |
|||
${{ runner.os }}-yarn- |
|||
|
|||
- name: Cache cypress binary |
|||
uses: actions/cache@v2 |
|||
with: |
|||
path: ~/.cache |
|||
key: ${{ runner.os }}-cypress- |
|||
restore-keys: | |
|||
${{ runner.os }}-cypress- |
|||
${{ runner.os }}- |
|||
|
|||
- name: Install |
|||
run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh |
|||
env: |
|||
DB: mariadb |
|||
TYPE: ui |
|||
|
|||
- name: Site Setup |
|||
run: cd ~/frappe-bench/ && bench --site test_site execute erpnext.setup.utils.before_tests |
|||
|
|||
- name: cypress pre-requisites |
|||
run: cd ~/frappe-bench/apps/frappe && yarn add cypress-file-upload@^5 --no-lockfile |
|||
|
|||
|
|||
- name: Build Assets |
|||
run: cd ~/frappe-bench/ && bench build |
|||
|
|||
- name: UI Tests |
|||
run: cd ~/frappe-bench/ && bench --site test_site run-ui-tests erpnext --headless |
|||
env: |
|||
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} |
|||
|
|||
- name: Show bench console if tests failed |
|||
if: ${{ failure() }} |
|||
run: cat ~/frappe-bench/bench_run_logs.txt |
@ -0,0 +1,11 @@ |
|||
{ |
|||
"baseUrl": "http://test_site:8000/", |
|||
"projectId": "da59y9", |
|||
"adminPassword": "admin", |
|||
"defaultCommandTimeout": 20000, |
|||
"pageLoadTimeout": 15000, |
|||
"retries": { |
|||
"runMode": 2, |
|||
"openMode": 2 |
|||
} |
|||
} |
@ -0,0 +1,5 @@ |
|||
{ |
|||
"name": "Using fixtures to represent data", |
|||
"email": "hello@cypress.io", |
|||
"body": "Fixtures are a great way to mock data for responses to routes" |
|||
} |
@ -0,0 +1,13 @@ |
|||
|
|||
context('Customer', () => { |
|||
before(() => { |
|||
cy.login(); |
|||
}); |
|||
it('Check Customer Group', () => { |
|||
cy.visit(`app/customer/`); |
|||
cy.get('.primary-action').click(); |
|||
cy.wait(500); |
|||
cy.get('.custom-actions > .btn').click(); |
|||
cy.get_field('customer_group', 'Link').should('have.value', 'All Customer Groups'); |
|||
}); |
|||
}); |
@ -0,0 +1,17 @@ |
|||
// ***********************************************************
|
|||
// This example plugins/index.js can be used to load plugins
|
|||
//
|
|||
// You can change the location of this file or turn off loading
|
|||
// the plugins file with the 'pluginsFile' configuration option.
|
|||
//
|
|||
// You can read more here:
|
|||
// https://on.cypress.io/plugins-guide
|
|||
// ***********************************************************
|
|||
|
|||
// This function is called when a project is opened or re-opened (e.g. due to
|
|||
// the project's config changing)
|
|||
|
|||
module.exports = () => { |
|||
// `on` is used to hook into various events Cypress emits
|
|||
// `config` is the resolved Cypress config
|
|||
}; |
@ -0,0 +1,31 @@ |
|||
// ***********************************************
|
|||
// This example commands.js shows you how to
|
|||
// create various custom commands and overwrite
|
|||
// existing commands.
|
|||
//
|
|||
// For more comprehensive examples of custom
|
|||
// commands please read more here:
|
|||
// https://on.cypress.io/custom-commands
|
|||
// ***********************************************
|
|||
//
|
|||
//
|
|||
// -- This is a parent command --
|
|||
// Cypress.Commands.add("login", (email, password) => { ... });
|
|||
//
|
|||
//
|
|||
// -- This is a child command --
|
|||
// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... });
|
|||
//
|
|||
//
|
|||
// -- This is a dual command --
|
|||
// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... });
|
|||
//
|
|||
//
|
|||
// -- This is will overwrite an existing command --
|
|||
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... });
|
|||
|
|||
const slug = (name) => name.toLowerCase().replace(" ", "-"); |
|||
|
|||
Cypress.Commands.add("go_to_doc", (doctype, name) => { |
|||
cy.visit(`/app/${slug(doctype)}/${encodeURIComponent(name)}`); |
|||
}); |
@ -0,0 +1,26 @@ |
|||
// ***********************************************************
|
|||
// This example support/index.js is processed and
|
|||
// loaded automatically before your test files.
|
|||
//
|
|||
// This is a great place to put global configuration and
|
|||
// behavior that modifies Cypress.
|
|||
//
|
|||
// You can change the location of this file or turn off
|
|||
// automatically serving support files with the
|
|||
// 'supportFile' configuration option.
|
|||
//
|
|||
// You can read more here:
|
|||
// https://on.cypress.io/configuration
|
|||
// ***********************************************************
|
|||
|
|||
// Import commands.js using ES2015 syntax:
|
|||
import './commands'; |
|||
import '../../../frappe/cypress/support/commands' // eslint-disable-line
|
|||
|
|||
|
|||
// Alternatively you can use CommonJS syntax:
|
|||
// require('./commands')
|
|||
|
|||
Cypress.Cookies.defaults({ |
|||
preserve: 'sid' |
|||
}); |
@ -0,0 +1,12 @@ |
|||
{ |
|||
"compilerOptions": { |
|||
"allowJs": true, |
|||
"baseUrl": "../node_modules", |
|||
"types": [ |
|||
"cypress" |
|||
] |
|||
}, |
|||
"include": [ |
|||
"**/*.*" |
|||
] |
|||
} |
Loading…
Reference in new issue