Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DEPLOY 2024-10-22 #1834

Merged
merged 11 commits into from
Oct 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/cleanup-e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- name: Setup Node.js Environment
uses: actions/setup-node@v4
Expand All @@ -24,4 +24,4 @@ jobs:
- name: Cleanup Prod
env:
PROD_CYPRESS_TOKEN: ${{ secrets.PROD_CYPRESS_TOKEN }}
run: node scripts/cleanup.js PROD
run: node scripts/cleanup.js PROD
2 changes: 1 addition & 1 deletion .github/workflows/deploy-production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
image: node:18-alpine3.18
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Install SO deps
run: apk add curl git bash jq
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-stage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
image: node:18-alpine3.18
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Install SO deps
run: apk add curl git bash jq
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/failed-e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
name: Run Failed E2E Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/local-prod-e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- name: Setup Node.js Environment
uses: actions/setup-node@v4
Expand All @@ -35,7 +35,7 @@ jobs:
wait-on: 'http://localhost:5173/'
wait-on-timeout: 120
config-file: cypress.config.prod.js
env: environment=prod,grepTags=--@xfail--@dont_run_prod
env: environment=prod,grepTags=-@xfail+-@dont_run_prod

- name: Check E2E Test Coverage
if: ${{ always() }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/manual-e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup Node.js Environment
uses: actions/setup-node@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/package-audit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
image: node:18-alpine3.18
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Install SO deps
run: apk add curl bash git
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/security-linter.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
image: node:18-alpine3.18
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Install SO deps
run: apk add curl bash git
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
/* eslint-disable cypress/no-unnecessary-waiting */
import generateUniqueName from '../../../support/utils'
import selectors from '../../../support/selectors'

let fixtures = {}

/**
* Creates a new edge application with basic settings.
*/
const createEdgeApplicationCase = () => {
// Act
cy.get(selectors.edgeApplication.mainSettings.createButton).click()
cy.get(selectors.edgeApplication.mainSettings.nameInput).type(fixtures.edgeApplicationName)
cy.get(selectors.edgeApplication.mainSettings.addressInput).clear()
cy.get(selectors.edgeApplication.mainSettings.addressInput).type('httpbingo.org')
cy.get(selectors.form.actionsSubmitButton).click()
cy.verifyToast('success', 'Your edge application has been created')
cy.get(selectors.form.actionsCancelButton).click()

// Assert - Verify the edge application was created
cy.get(selectors.list.searchInput).type(fixtures.edgeApplicationName)
cy.get(selectors.list.filteredRow.column('name')).should(
'have.text',
fixtures.edgeApplicationName
)

// Act - Navigate to the created edge application
cy.get(selectors.list.filteredRow.column('name')).click()
}

const createFunctionCase = () => {
// Act
cy.get(selectors.functions.nameInput).clear()
cy.get(selectors.functions.nameInput).type(fixtures.functionName, { delay: 0 })
cy.intercept('GET', 'api/v3/edge_functions*').as('getEdgeFunctions')
cy.get(selectors.edgeApplication.functionsInstance.edgeFunctionActionbar)
.find(selectors.functions.saveButton)
.click()
cy.verifyToast('success', 'Your edge function has been created')
cy.wait('@getEdgeFunctions')
}

describe('Edge Application', { tags: ['@dev3'] }, () => {
beforeEach(() => {
fixtures.edgeApplicationName = generateUniqueName('EdgeApp')
// Login
cy.login()

fixtures = {
functionName: generateUniqueName('EdgeFunction'),
functionInstanceName: generateUniqueName('FunctionsInstance'),
edgeApplicationName: generateUniqueName('EdgeApp'),
originName: generateUniqueName('origin'),
rulesEngineName: generateUniqueName('RulesEng'),
cacheSettingName: generateUniqueName('cacheSetting')
}
})

it('should create a rule engine set cache policy', () => {
// Arrange
cy.openProduct('Edge Application')
createEdgeApplicationCase()
cy.get(selectors.edgeApplication.mainSettings.modulesSwitch('edgeFunctions')).click()
cy.get(selectors.form.actionsSubmitButton).click()
cy.verifyToast('success', 'Your edge application has been updated')
cy.get(selectors.edgeApplication.tabs('Rules Engine')).click()

// Act
// Create a rule
cy.get(selectors.edgeApplication.rulesEngine.createButton).click()
cy.get(selectors.edgeApplication.rulesEngine.ruleNameInput).type(fixtures.rulesEngineName)
cy.get(selectors.edgeApplication.rulesEngine.criteriaOperatorDropdown(0, 0)).click()
cy.get(selectors.edgeApplication.rulesEngine.criteriaOperatorOption('is equal')).click()
cy.get(selectors.edgeApplication.rulesEngine.criteriaInputValue(0, 0)).clear()
cy.get(selectors.edgeApplication.rulesEngine.criteriaInputValue(0, 0)).type('/')
cy.get(selectors.edgeApplication.rulesEngine.behaviorsDropdown(0)).click()
cy.get(selectors.edgeApplication.rulesEngine.behaviorsOption('Run Function')).click()
cy.get(selectors.edgeApplication.rulesEngine.setFunctionInstanceSelect(0)).click()
cy.get(selectors.edgeApplication.rulesEngine.createFunctionInstanceButton).click()
cy.get(selectors.edgeApplication.functionsInstance.nameInput).clear()
cy.get(selectors.edgeApplication.functionsInstance.nameInput).type(
fixtures.functionInstanceName
)
cy.get(selectors.edgeApplication.functionsInstance.edgeFunctionsDropdown).click()
cy.get(selectors.edgeApplication.functionsInstance.createFunctionButton).click()
createFunctionCase()
cy.intercept('POST', 'api/v3/edge_applications/*/functions_instances*').as('postFunction')
cy.get(selectors.edgeApplication.rulesEngine.functionInstanceActionBar)
.find(selectors.form.actionsSubmitButton)
.click()
cy.intercept(
'GET',
'api/v3/edge_applications/*/functions_instances?order_by=id&sort=asc&page=1&page_size=200'
).as('getFunctionInstance')
cy.wait('@postFunction')
cy.wait('@getFunctionInstance')
cy.wait(3000)
cy.get(selectors.edgeApplication.rulesEngine.setFunctionInstanceSelect(0)).click()
cy.get(selectors.edgeApplication.rulesEngine.setFunctionInstanceSelect(0))
.find(
selectors.edgeApplication.rulesEngine.functionInstanceOption(fixtures.functionInstanceName)
)
.click()

cy.get(selectors.form.actionsSubmitButton).click()
cy.verifyToast('success', 'Your Rules Engine has been created.')

// Assert
cy.get(selectors.list.searchInput).type(fixtures.rulesEngineName)
cy.get(selectors.list.filteredRow.column('name')).should('have.text', fixtures.rulesEngineName)

// Cleanup - Remove the rule engine
cy.deleteEntityFromLoadedList().then(() => {
cy.verifyToast('Rule Engine successfully deleted')
})
})

afterEach(() => {
// Delete the edge application
cy.deleteEntityFromList({
entityName: fixtures.edgeApplicationName,
productName: 'Edge Application'
}).then(() => {
cy.verifyToast('Resource successfully deleted')
})
})
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
import generateUniqueName from '../../../support/utils'
import selectors from '../../../support/selectors'

let fixtures = {}

/**
* Creates a new edge application with basic settings.
*/
const createEdgeApplicationCase = () => {
// Act
cy.get(selectors.edgeApplication.mainSettings.createButton).click()
cy.get(selectors.edgeApplication.mainSettings.nameInput).type(fixtures.edgeApplicationName)
cy.get(selectors.edgeApplication.mainSettings.addressInput).clear()
cy.get(selectors.edgeApplication.mainSettings.addressInput).type('httpbingo.org')
cy.get(selectors.form.actionsSubmitButton).click()
cy.verifyToast('success', 'Your edge application has been created')
cy.get(selectors.form.actionsCancelButton).click()

// Assert - Verify the edge application was created
cy.get(selectors.list.searchInput).type(`${fixtures.edgeApplicationName}{enter}`)
cy.get(selectors.list.filteredRow.column('name')).should(
'have.text',
fixtures.edgeApplicationName
)

// Act - Navigate to the created edge application
cy.get(selectors.list.filteredRow.column('name')).click()
}

describe('Edge Application', { tags: ['@dev3'] }, () => {
beforeEach(() => {
fixtures.edgeApplicationName = generateUniqueName('EdgeApp')
// Login
cy.login()

fixtures = {
functionName: generateUniqueName('EdgeFunction'),
functionInstanceName: generateUniqueName('FunctionsInstance'),
edgeApplicationName: generateUniqueName('EdgeApp'),
originName: generateUniqueName('origin'),
rulesEngineName: generateUniqueName('RulesEng'),
cacheSettingName: generateUniqueName('cacheSetting')
}
})

it('should create a rule engine set cache policy', () => {
// Arrange
cy.openProduct('Edge Application')
createEdgeApplicationCase()
cy.get(selectors.edgeApplication.tabs('Rules Engine')).click()

// Act
// Create a rule
cy.get(selectors.edgeApplication.rulesEngine.createButton).click()
cy.get(selectors.edgeApplication.rulesEngine.ruleNameInput).type(fixtures.rulesEngineName)
cy.get(selectors.edgeApplication.rulesEngine.criteriaOperatorDropdown(0, 0)).click()
cy.get(selectors.edgeApplication.rulesEngine.criteriaOperatorOption('is equal')).click()
cy.get(selectors.edgeApplication.rulesEngine.criteriaInputValue(0, 0)).clear()
cy.get(selectors.edgeApplication.rulesEngine.criteriaInputValue(0, 0)).type('/')
cy.get(selectors.edgeApplication.rulesEngine.behaviorsDropdown(0)).click()
cy.get(selectors.edgeApplication.rulesEngine.behaviorsOption('Set Origin')).click()
cy.get(selectors.edgeApplication.rulesEngine.setOriginSelect(0)).click()
cy.get(selectors.edgeApplication.rulesEngine.createOriginButton).click()
cy.get(selectors.edgeApplication.origins.nameInput).type(fixtures.originName)
cy.get(selectors.edgeApplication.origins.originType).click()
cy.get(selectors.edgeApplication.origins.originType)
.find('li')
.eq(0)
.should('have.text', 'Single Origin')
.click()

cy.get(selectors.edgeApplication.origins.addressInput).type('test.com')

cy.intercept('GET', 'api/v3/edge_applications/*/origin*').as('getOrigin')
cy.get(selectors.edgeApplication.rulesEngine.originActionBar)
.find(selectors.form.actionsSubmitButton)
.click()
cy.verifyToast('success', 'Your origin has been created')
cy.wait('@getOrigin')
cy.get(selectors.edgeApplication.rulesEngine.setOriginSelect(0)).click()
cy.get(selectors.edgeApplication.rulesEngine.setOriginSelect(0))
.find(selectors.edgeApplication.rulesEngine.originOption(fixtures.originName))
.click()

cy.get(selectors.form.actionsSubmitButton).click()
cy.verifyToast('success', 'Your Rules Engine has been created.')

// Assert
cy.get(selectors.list.searchInput).type(fixtures.rulesEngineName)
cy.get(selectors.list.filteredRow.column('name')).should('have.text', fixtures.rulesEngineName)

// Cleanup - Remove the rule engine
cy.deleteEntityFromLoadedList().then(() => {
cy.verifyToast('Rule Engine successfully deleted')
})
})

afterEach(() => {
// Delete the edge application
cy.deleteEntityFromList({
entityName: fixtures.edgeApplicationName,
productName: 'Edge Application'
}).then(() => {
cy.verifyToast('Resource successfully deleted')
})
})
})
Loading
Loading