Skip to content

Commit

Permalink
Merge branch 'develop' into chore/use-project-api-in-fw-lite
Browse files Browse the repository at this point in the history
  • Loading branch information
hahn-kev authored Nov 19, 2024
2 parents 0f11643 + c23a0bc commit e6d48a4
Show file tree
Hide file tree
Showing 9 changed files with 177 additions and 143 deletions.
55 changes: 55 additions & 0 deletions .github/actions/playwright-tests/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Setup and run playwright tests
inputs:
lexbox-hostname:
description: 'The hostname of the lexbox server, should include port if not 80'
required: true
lexbox-default-password:
description: 'The default password for the lexbox server'
required: true
viewer-tests:
description: 'Whether to run viewer tests'
required: false
default: 'true'

runs:
using: composite
steps:
# First we need to setup Node...
- uses: actions/setup-node@v4
with:
node-version-file: 'frontend/package.json'
# Then we can set up pnpm...
- uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d # v3.0.0
with:
package_json_file: 'frontend/package.json'
# Then we can have Node set up package caching
- uses: actions/setup-node@v4
with:
node-version-file: 'frontend/package.json'
cache: 'pnpm'
cache-dependency-path: 'frontend/pnpm-lock.yaml'
- name: Playwright setup
shell: bash
working-directory: frontend
run: pnpm install
- name: Set up Playwright dependencies
shell: bash
working-directory: frontend
run: pnpm exec playwright install --with-deps

- name: Integration tests (Playwright)
id: playwright-tests
shell: bash
env:
TEST_SERVER_HOSTNAME: ${{ inputs.lexbox-hostname }}
TEST_DEFAULT_PASSWORD: ${{ inputs.lexbox-default-password }}
working-directory: frontend
run: pnpm run test ${{ inputs.viewer-tests != 'true' && '-g "^(?!.*Viewer Page).*"' || '' }}

- name: Upload playwright results
if: ${{ always() && steps.playwright-tests.outcome != 'skipped' }}
uses: actions/upload-artifact@v4
with:
name: playwright-traces
path: |
./frontend/test-results
14 changes: 13 additions & 1 deletion .github/workflows/integration-test-gha.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,9 @@ jobs:
kubectl wait --for=condition=Ready --timeout=120s pod -l 'app.kubernetes.io/component=controller' -n languagedepot
kubectl wait --for=condition=Ready --timeout=120s pod -l 'app in (lexbox, ui, hg, db)' -n languagedepot
- name: forward ingress
run: kubectl port-forward service/ingress-nginx-controller 6579:80 -n languagedepot &
run: |
kubectl port-forward service/ingress-nginx-controller 6579:80 -n languagedepot &
kubectl port-forward service/lexbox 1080:1080 -n languagedepot &
- name: verify ingress
run: curl -v http://localhost:6579
- name: build
Expand All @@ -89,6 +91,16 @@ jobs:
TEST_PROJECT_CODE: 'sena-3'
TEST_DEFAULT_PASSWORD: 'pass'
run: dotnet test LexBoxOnly.slnf --logger GitHubActions --filter "Category=Integration|Category=FlakyIntegration" --blame-hang-timeout 40m

##playwright tests
- name: Setup and run playwright tests
if: ${{ !cancelled() }}
uses: ./.github/actions/playwright-tests
with:
lexbox-hostname: 'localhost:6579'
lexbox-default-password: 'pass'
viewer-tests: 'false' # exclude the viewer page tests, because mongo is not available

- name: status
if: failure()
run: |
Expand Down
44 changes: 9 additions & 35 deletions .github/workflows/integration-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,6 @@ jobs:
runs-on: ${{ inputs.runs-on }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup self-hosted dependencies
if: ${{ inputs.runs-on == 'self-hosted' }}
run: |
Expand All @@ -164,47 +162,23 @@ jobs:
sudo apt-get install -f
rm powershell_7.4.1-1.deb_amd64.deb
pwsh #validate that powershell installed correctly
# First we need to setup Node...
- uses: actions/setup-node@v4
with:
node-version-file: 'frontend/package.json'
# Then we can set up pnpm...
- uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d # v3.0.0
with:
package_json_file: 'frontend/package.json'
# Then we can have Node set up package caching
- uses: actions/setup-node@v4
with:
node-version-file: 'frontend/package.json'
cache: 'pnpm'
cache-dependency-path: 'frontend/pnpm-lock.yaml'
- name: Playwright setup
working-directory: frontend
run: pnpm install && pnpm pretest
- name: Set up Playwright dependencies
working-directory: frontend
if: ${{ inputs.runs-on == 'self-hosted' }}
run: sudo pnpm exec playwright install-deps
- name: Integration tests (Playwright)
env:
TEST_SERVER_HOSTNAME: ${{ vars.TEST_SERVER_HOSTNAME }}
# this is not a typo, we need to use the lf domain because it has a cert that hg will validate
TEST_STANDARD_HG_HOSTNAME: ${{ vars.TEST_STANDARD_HG_HOSTNAME }}
TEST_RESUMABLE_HG_HOSTNAME: ${{ vars.TEST_RESUMABLE_HG_HOSTNAME }}
TEST_PROJECT_CODE: 'sena-3'
TEST_DEFAULT_PASSWORD: ${{ secrets.TEST_USER_PASSWORD }}
working-directory: frontend
run: pnpm test
- name: Setup and run playwright tests
if: ${{ !cancelled() }}
uses: ./.github/actions/playwright-tests
with:
lexbox-hostname: ${{ vars.TEST_SERVER_HOSTNAME }}
lexbox-default-password: ${{ secrets.TEST_USER_PASSWORD }}
viewer-tests: 'true'
- name: Password protect Playwright traces
id: password_protect_test_results
if: ${{ always() }}
if: ${{ !cancelled() }}
shell: bash
env:
ZIP_PASSWORD: ${{ secrets.TEST_USER_PASSWORD }}
run: 7z a ./playwright-traces.7z -mx=0 -mmt=off ./frontend/test-results -p"$ZIP_PASSWORD"
- name: Upload playwright results
if: ${{ always() && steps.password_protect_test_results.outcome == 'success' }}
if: ${{ !cancelled() && steps.password_protect_test_results.outcome == 'success' }}
uses: actions/upload-artifact@v4
with:
name: playwright-traces-${{ inputs.runs-on }}-hg-${{ inputs.hg-version }}
Expand Down
2 changes: 1 addition & 1 deletion Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ tasks:
- git submodule update --recursive
- git config --local submodule.recurse true
- kubectl --context=docker-desktop apply -f deployment/setup/namespace.yaml
- kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.0/cert-manager.yaml
- kubectl --context=docker-desktop apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.0/cert-manager.yaml
- docker build -t local-dev-init data/
setup-win:
platforms: [ windows ]
Expand Down
3 changes: 2 additions & 1 deletion backend/LexBoxApi/Services/EmailService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ private async Task SendInvitationEmail(
var httpContext = httpContextAccessor.HttpContext;
ArgumentNullException.ThrowIfNull(httpContext);

//using GetPathByAction so the path is relative
var returnTo = _linkGenerator.GetPathByAction(httpContext,
nameof(Controllers.UserController.HandleInviteLink),
"User");
Expand Down Expand Up @@ -293,7 +294,7 @@ private string MakeLoginRedirectUrl(string jwt, string? returnTo)
{
ArgumentException.ThrowIfNullOrEmpty(jwt);
ArgumentException.ThrowIfNullOrEmpty(returnTo);
if (new Uri(returnTo).IsAbsoluteUri) throw new ArgumentException($"returnTo must be relative, was: {returnTo}", nameof(returnTo));
if (new Uri(returnTo, UriKind.RelativeOrAbsolute).IsAbsoluteUri) throw new ArgumentException($"returnTo must be relative, was: {returnTo}", nameof(returnTo));
var httpContext = httpContextAccessor.HttpContext;
ArgumentNullException.ThrowIfNull(httpContext);
var loginRedirect = _linkGenerator.GetUriByAction(httpContext,
Expand Down
4 changes: 3 additions & 1 deletion deployment/gha/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,6 @@ images:
- name: ghcr.io/sillsdev/lexbox-ui
newTag: develop
- name: ghcr.io/sillsdev/lexbox-hgweb
newTag: latest
newTag: develop
- name: ghcr.io/sillsdev/lexbox-fw-headless
newTag: develop
3 changes: 3 additions & 0 deletions deployment/gha/lexbox.patch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ spec:
spec:
containers:
- name: lexbox-api
env:
- name: Email__BaseUrl
value: "http://localhost:6579"
volumeMounts:
- mountPath: /frontend
name: gql-schema
Expand Down
16 changes: 0 additions & 16 deletions frontend/tests/envVars.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@ export const serverHostname = process.env.TEST_SERVER_HOSTNAME ?? 'localhost';
export const isDev = process.env.NODE_ENV === 'development' || serverHostname.startsWith('localhost');
export const httpScheme = isDev ? 'http://' : 'https://';
export const serverBaseUrl = `${httpScheme}${serverHostname}`;
export const standardHgHostname = process.env.TEST_STANDARD_HG_HOSTNAME ?? 'hg.localhost';
export const resumableHgHostname = process.env.TEST_RESUMABLE_HG_HOSTNAME ?? 'resumable.localhost';
export const resumableBaseUrl = `${httpScheme}${resumableHgHostname}`;
export const projectCode = process.env.TEST_PROJECT_CODE ?? 'sena-3';
export const defaultPassword = process.env.TEST_DEFAULT_PASSWORD ?? 'pass';
export const authCookieName = '.LexBoxAuth';
export const invalidJwt = 'eyJhbGciOiJIUzI1NiJ9.eyJSb2xlIjoiQWRtaW4iLCJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkphdmFJblVzZSIsImV4cCI6MTY5OTM0ODY2NywiaWF0IjoxNjk5MzQ4NjY3fQ.f8N63gcD_iv-E_x0ERhJwARaBKnZnORaZGe0N2J0VGM';
Expand All @@ -14,15 +10,3 @@ export const TEST_TIMEOUT = 40_000;
export const TEST_TIMEOUT_2X = TEST_TIMEOUT * 2;
export const ACTION_TIMEOUT = 5_000;
export const EXPECT_TIMEOUT = 5_000;

export enum HgProtocol {
Hgweb,
Resumable,
}

export function getTestHostName(protocol: HgProtocol) : string {
switch (protocol) {
case HgProtocol.Hgweb: return standardHgHostname;
case HgProtocol.Resumable: return resumableHgHostname;
}
}
Loading

0 comments on commit e6d48a4

Please sign in to comment.