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

Move multi app install test to Playwright #4920

Merged
merged 2 commits into from
Sep 24, 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
6 changes: 2 additions & 4 deletions .github/workflows/build-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2895,12 +2895,10 @@ jobs:
- run: chmod +x bin/*
- uses: ./.github/actions/kots-e2e
with:
test-focus: 'multi-app-install'
test-focus: 'Multi App Install'
kots-namespace: 'multi-app-install'
k8s-distribution: ${{ matrix.cluster.distribution }}
k8s-version: ${{ matrix.cluster.version }}
testim-access-token: '${{ secrets.TESTIM_ACCESS_TOKEN }}'
testim-branch: ${{ github.head_ref == 'main' && 'master' || github.head_ref }}
replicated-api-token: '${{ secrets.C11Y_MATRIX_TOKEN }}'
kots-dockerhub-username: '${{ secrets.E2E_DOCKERHUB_USERNAME }}'
kots-dockerhub-password: '${{ secrets.E2E_DOCKERHUB_PASSWORD }}'
Expand Down Expand Up @@ -4340,7 +4338,6 @@ jobs:
- validate-target-kots-version
- validate-range-kots-version
- validate-multi-app-backup-and-restore
- validate-multi-app-install
- validate-airgap-smoke-test
- validate-support-bundle
- validate-gitops
Expand All @@ -4350,6 +4347,7 @@ jobs:
- validate-no-required-config
- validate-config
- validate-change-channel
- validate-multi-app-install
# non-testim tests
- validate-minimal-rbac
- validate-minimal-rbac-override
Expand Down
7 changes: 5 additions & 2 deletions e2e/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,19 @@ PLAYWRIGHT_DIR := $(shell pwd)/playwright

SHELL := /bin/bash

OS ?= linux
ARCH ?= $(shell go env GOARCH)

.PHONY: all
all: build deps test

.PHONY: deps
deps:
docker build -t e2e-deps .
docker build --platform $(OS)/$(ARCH) -t e2e-deps .

.PHONY: build
build:
go test $(BUILDFLAGS) -c -o bin/e2e.test .
GOOS=$(OS) GOARCH=$(ARCH) go test $(BUILDFLAGS) -c -o bin/e2e.test .

.PHONY: test
test: export GINKGO_EDITOR_INTEGRATION=1 # disable error on programatic focus
Expand Down
40 changes: 9 additions & 31 deletions e2e/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,28 @@ E2E tests are run in build-test workflow on pull_request event.

e2e_test.go uses Ginkgo to build a test suite from inventory.go and runs each test using testim/client.go or playwright/playwright.go

Tests are parallelized using Gingko's test focus. Each workflow definition in .github/workflows/build-test.yaml must define a `test-focus` parameter that matches the `Test Name` property defined in inventory.go. Each e2e test workflow skips all tests but what is defined in `test-focus`. Please colocate new playwright tests under the playwright comment with the other pw tests.
Tests are parallelized using Gingko's test focus. Each workflow definition in .github/workflows/build-test.yaml must define a `test-focus` parameter that matches the `Test Name` property defined in inventory.go. Each e2e test workflow skips all tests but what is defined in `test-focus`. Please colocate new Playwright tests under the Playwright comment with the other pw tests.

New tests should be written with playwright.
New tests should be written with Playwright.

## Playwright
## Adding a new test

Playwright is the preferred testing framework for new tests moving forward. See playwright's [documentation](https://playwright.dev/docs/intro) for more information.

### Development environment

To install dependencies run:
Install Playwright dependencies:

```bash
cd e2e/playwright
npm ci
npx playwright install --with-deps
```

Install the playwright extension in vscode if you've not already done so:
Install the Playwright extension in VSCode if you've not already done so:

```bash
code --install-extension ms-playwright.playwright
```

### Adding a new test

To add a new test that you've already added in the [kots-tests-app repo](https://github.com/replicatedhq/kots-test-apps) - do the following:

- Update `.github/workflows/build-test.yaml` to include the new test. You can copy an existing pw entry like `validate-change-channel` and update the test-focus, kots-namespace, and any other parameters needed for the test.
Expand Down Expand Up @@ -64,21 +60,9 @@ e2e/playwright/tests/change-channel

- See `e2e/playwright/tests/shared` for test utility functions that can be used in your test for things like logging in or uploading a license.

## testim

Testim is our legacy testing framework. It is being phased out in favor of playwright.

### Development environment

To install dependencies run:
## Running tests

```bash
make kots
make -C e2e deps
npm install -g @testim/testim-cli
```

Set the testim access token:
For testIM tests, set the testim access token:
```bash
export TESTIM_ACCESS_TOKEN=<my-testim-access-token>
```
Expand All @@ -96,7 +80,7 @@ make e2e \
FOCUS="Change License"
```

To build and run with ttl.sh images run:
To build and run with ttl.sh images:

```bash
make all-ttl.sh
Expand All @@ -106,7 +90,7 @@ make e2e \
KOTSADM_IMAGE_TAG=24h
```

To run using a specific testim branch:
To run using a specific testIM branch:
```bash
make e2e \
TESTIM_BRANCH=$BRANCH_NAME
Expand Down Expand Up @@ -140,9 +124,3 @@ $ export KUBECONFIG="$(k3d kubeconfig merge kots-e2e3629427925)"
$ kubectl -n smoke-test port-forward svc/kotsadm 3000 --address=0.0.0.0
Forwarding from 0.0.0.0:3000 -> 3000
```

#### Requirements

*Currently, the admin console helm chart will not install on an M1 Macbook because of it's [node affinity](https://github.com/replicatedhq/kots-helm/blob/main/templates/kotsadm-deployment.yaml#L32-L35) rules*

1. [Docker](https://docs.docker.com/get-docker/)
7 changes: 4 additions & 3 deletions e2e/inventory/inventory.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,11 @@ func NewMultiAppBackupAndRestoreTest() Test {

func MultiAppTest() Test {
return Test{
Name: "multi-app-install",
TestimSuite: "multi-app-install",
ID: "multi-app-install",
Name: "Multi App Install",
Namespace: "multi-app-install",
UpstreamURI: "multi-app-install/automated",
AppSlug: "mutli-app-install",
UpstreamURI: "mutli-app-install/automated",
Comment on lines +120 to +121
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
AppSlug: "mutli-app-install",
UpstreamURI: "mutli-app-install/automated",
AppSlug: "multi-app-install",
UpstreamURI: "multi-app-install/automated",

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sgalsaleh this looks like a typo - but i see the license and playwright tests are looking for mutli as well so not positive.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, it's a typo in the app slug, but this matches so it should work...

}
}

Expand Down
23 changes: 23 additions & 0 deletions e2e/playwright/tests/multi-app-install/app1-license.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
apiVersion: kots.io/v1beta1
kind: License
metadata:
name: github-action
spec:
appSlug: mutli-app-install
channelID: 2GdNmeofxTIcwIhXo1bIyS3Pvu3
channelName: Automated
customerName: github-action
endpoint: https://replicated.app
entitlements:
expires_at:
description: License Expiration
title: Expiration
value: ""
valueType: String
isGitOpsSupported: true
isNewKotsUiEnabled: true
isSnapshotSupported: true
licenseID: 2GdOGMwrfz2KpRi2fzaIKPDHHbj
licenseSequence: 3
licenseType: dev
signature: eyJsaWNlbnNlRGF0YSI6ImV5SmhjR2xXWlhKemFXOXVJam9pYTI5MGN5NXBieTkyTVdKbGRHRXhJaXdpYTJsdVpDSTZJa3hwWTJWdWMyVWlMQ0p0WlhSaFpHRjBZU0k2ZXlKdVlXMWxJam9pWjJsMGFIVmlMV0ZqZEdsdmJpSjlMQ0p6Y0dWaklqcDdJbXhwWTJWdWMyVkpSQ0k2SWpKSFpFOUhUWGR5Wm5veVMzQlNhVEptZW1GSlMxQkVTRWhpYWlJc0lteHBZMlZ1YzJWVWVYQmxJam9pWkdWMklpd2lZM1Z6ZEc5dFpYSk9ZVzFsSWpvaVoybDBhSFZpTFdGamRHbHZiaUlzSW1Gd2NGTnNkV2NpT2lKdGRYUnNhUzFoY0hBdGFXNXpkR0ZzYkNJc0ltTm9ZVzV1Wld4SlJDSTZJakpIWkU1dFpXOW1lRlJKWTNkSmFGaHZNV0pKZVZNelVIWjFNeUlzSW1Ob1lXNXVaV3hPWVcxbElqb2lRWFYwYjIxaGRHVmtJaXdpYkdsalpXNXpaVk5sY1hWbGJtTmxJam96TENKbGJtUndiMmx1ZENJNkltaDBkSEJ6T2k4dmNtVndiR2xqWVhSbFpDNWhjSEFpTENKbGJuUnBkR3hsYldWdWRITWlPbnNpWlhod2FYSmxjMTloZENJNmV5SjBhWFJzWlNJNklrVjRjR2x5WVhScGIyNGlMQ0prWlhOamNtbHdkR2x2YmlJNklreHBZMlZ1YzJVZ1JYaHdhWEpoZEdsdmJpSXNJblpoYkhWbElqb2lJaXdpZG1Gc2RXVlVlWEJsSWpvaVUzUnlhVzVuSW4xOUxDSnBjMGRwZEU5d2MxTjFjSEJ2Y25SbFpDSTZkSEoxWlN3aWFYTlRibUZ3YzJodmRGTjFjSEJ2Y25SbFpDSTZkSEoxWlN3aWFYTk9aWGRMYjNSelZXbEZibUZpYkdWa0lqcDBjblZsZlgwPSIsImlubmVyU2lnbmF0dXJlIjoiZXlKc2FXTmxibk5sVTJsbmJtRjBkWEpsSWpvaWFrVnFVVTVyYUZSV2QwWnZTa2hoZHpNd1QwTTNOMDk1WkNzME1rVnNRbGxyZVVneFpXTmlRa3RvTTNNeWMyUXpNMjh5UjFkamJYcE9URWxyYVc4eFIzb3JjRzVyVEdoMlRsRlNSaXRyYlhOT1VtNXRNblo0YTBWc2Nra3diV2RaU0hRM1pFVXpVR2RKU1daTWFHNTVaMVV3VEVWRFJtcE1iR05XVDNOb1pIUmphRFpMVG5sQlZHUm9TakZyZDFoYU5uRkpOM1F6ZW1oMFpUbEtkRFZTWW5kSFEzSjVWRmx4WVVsUWNUSnZiSGxqUVRCWWRFWXdTWGt2TVV4TVRrWjFXVlZhTVZoeFVuTlFjSGMwWWpWTVQyTlRiRlpNTHpOdFlWY3lZMlYzVlZkV1l6TklhRzlpYm0xdmNqZHBZVGhhWVdSSVYzTlNOMWRsUzFOMGMxaFZaRWhoTVZsWk1ubzBjRVJtYzNwcGVuUktTa2RyT1ZoVkszQTViM2hKTTNCd1RXdHdkVlJwUmpjemRrZGxSVWRwWkhvclIzUjBjMWhXVlhkbFZuZGhVa295WXpSUU1tWlVRV2MyYzBndk9WTklSV3RvVm5GQlBUMGlMQ0p3ZFdKc2FXTkxaWGtpT2lJdExTMHRMVUpGUjBsT0lGQlZRa3hKUXlCTFJWa3RMUzB0TFZ4dVRVbEpRa2xxUVU1Q1oydHhhR3RwUnpsM01FSkJVVVZHUVVGUFEwRlJPRUZOU1VsQ1EyZExRMEZSUlVGNE5EbDZMelJVV200MWFtNW9OblIwVVdoSVkxeHVRM2N6U0ZwRVFqaHJaa0p2U0hFM1YwVkdabkJwV1ZrNWMxZG9TMHB5YVhrdmVVbEtVMVJzZFdKVWQzTnVNM1JSUkZWbmNTc3JWeXRrVFhKeU9HRjFVMXh1U1dnNEswZFNWbU4zTlcwM00wMTJkVkZUVFZrMGNFTTFlRk5IYUVRMVRVRm5ZMGxEYmtGdWVtRmliV1JoV1haeWVqRnBRMHhRT1ZWUUszaFdkRWhPVGx4dUwwNXJSbHBpV1hWSE9GbFBUR1phZDFCYU1YSklOVlY1VkZOSmNrVmhlV3RqYVc5U04yTkxMMU14VVVkMmNWTjZkR2hHVjNKUU1XSkxVa2xPVUZSWVQxeHVlV0pFYVdnMlUwVlRUbkppYVhaWVkxQnpSSEI0VFhGMFYwOUdURWRaV1ZsRGNIQlJNbkpLYW5wNlFucFBUV0V5YlcxelUzWnNXakJMZUVSUFdUZEhTVnh1VGxwT1NuUm9SRmhLZG1WWVJWUk1WRWwzTkVOdE5sbFdlVGxNT0VSamFHdGFOMjR3WkZjNFEwRkliMmRYWjNaa2VFWTJWMWhpVDFCbFpITjJlR05HVkZ4dWMzZEpSRUZSUVVKY2JpMHRMUzB0UlU1RUlGQlZRa3hKUXlCTFJWa3RMUzB0TFZ4dUlpd2lhMlY1VTJsbmJtRjBkWEpsSWpvaVpYbEtlbUZYWkhWWldGSXhZMjFWYVU5cFNrOVNibFpTVm1rNVVtRlVRa0pWTWprMlpHNUtjR015YUhGWFJGWlNXbGRHVDJOc2NFWmhSVkl4VVZaYWFWUnNjRVpsU0ZaR1VsVjBTRnBHUlhwTE0wNVVXa2N4TUZKWFRsVldhbHBWVjFWb01WUkdSVFZSVjBvelZESnpNbEpFYkZsVmFteDRWMVJXUm1JelZraFZNMDB6WkZaa2JHSnNWbk5PYWxsNlZsWmFSbVJyTlhWa01FNVpXVlJrTmxReWIzWmxXRlpLV2tWd2RrMVhWa2RhTVd4NVVUQk9kbE42UW5OVldHaHNaREI0UkZsc1drZFNNVnBQVkdwR1NWWlhkM2xSV0c4eVpETnNiRnA2YkZWalV6a3pWR3RXYUZveVVtRk5Sa3BFVVcxR2RsZEZUbEpaVlhNelpXNVNhR05FUm01aWVtaFRWV3hPUkZKcmFFTlpNRVpWVWxkc1NXVnRjRVJVTUhjMVYwVm9WRk51Wkc5UmJXaHRZek5LWVU1c1VuSlVhbEo1VVZoamVWWlZNWE5UUkZac1YwWndjVTVWYjNKVmJFSjNZVEp3VTFZeFpHMVVNRGx4WXpKd1NsSnJPWHBXTVU1V1pXNVNhMUpyVGs1YVZrcExVMnhrUW1SdFVteFZXRTUyWkZkT1Qwd3haRzVMZWtwd1RVUkdNMUV3YkhOU2JGWjRaREJuTUU5RVNYaFVXRTVQVkVVMGVsVlliekZrUmtwMldUTk9kR0pZUWxWU2JUVnlaRmRGTW1RelFsaGFWRkkyWWpCMFZXSldXbGhqYlRGelYwUkdlbEpYWXpsUVUwbHpTVzFrYzJJeVNtaGlSWFJzWlZWc2EwbHFiMmxaYlZKc1dsUlZNazVVV1hkWk1scHBUa1JPYWs5WFNYbFBSMHB0VDFSb2JGbFhUbWhhYlVVeVRrUlphV1pSUFQwaWZRPT0ifQ==
23 changes: 23 additions & 0 deletions e2e/playwright/tests/multi-app-install/app2-license.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
apiVersion: kots.io/v1beta1
kind: License
metadata:
name: github-action
spec:
appSlug: multi-app-install-2
channelID: 2GdO8R0L2IMuFHquevTI1c3Q9td
channelName: Automated
customerName: github-action
endpoint: https://replicated.app
entitlements:
expires_at:
description: License Expiration
title: Expiration
value: ""
valueType: String
isGitOpsSupported: true
isNewKotsUiEnabled: true
isSnapshotSupported: true
licenseID: 2GdODKSmUfw3FhCV4S3zRj6gCiY
licenseSequence: 2
licenseType: dev
signature: eyJsaWNlbnNlRGF0YSI6ImV5SmhjR2xXWlhKemFXOXVJam9pYTI5MGN5NXBieTkyTVdKbGRHRXhJaXdpYTJsdVpDSTZJa3hwWTJWdWMyVWlMQ0p0WlhSaFpHRjBZU0k2ZXlKdVlXMWxJam9pWjJsMGFIVmlMV0ZqZEdsdmJpSjlMQ0p6Y0dWaklqcDdJbXhwWTJWdWMyVkpSQ0k2SWpKSFpFOUVTMU50VldaM00wWm9RMVkwVXpONlVtbzJaME5wV1NJc0lteHBZMlZ1YzJWVWVYQmxJam9pWkdWMklpd2lZM1Z6ZEc5dFpYSk9ZVzFsSWpvaVoybDBhSFZpTFdGamRHbHZiaUlzSW1Gd2NGTnNkV2NpT2lKdGRXeDBhUzFoY0hBdGFXNXpkR0ZzYkMweUlpd2lZMmhoYm01bGJFbEVJam9pTWtka1R6aFNNRXd5U1UxMVJraHhkV1YyVkVreFl6TlJPWFJrSWl3aVkyaGhibTVsYkU1aGJXVWlPaUpCZFhSdmJXRjBaV1FpTENKc2FXTmxibk5sVTJWeGRXVnVZMlVpT2pJc0ltVnVaSEJ2YVc1MElqb2lhSFIwY0hNNkx5OXlaWEJzYVdOaGRHVmtMbUZ3Y0NJc0ltVnVkR2wwYkdWdFpXNTBjeUk2ZXlKbGVIQnBjbVZ6WDJGMElqcDdJblJwZEd4bElqb2lSWGh3YVhKaGRHbHZiaUlzSW1SbGMyTnlhWEIwYVc5dUlqb2lUR2xqWlc1elpTQkZlSEJwY21GMGFXOXVJaXdpZG1Gc2RXVWlPaUlpTENKMllXeDFaVlI1Y0dVaU9pSlRkSEpwYm1jaWZYMHNJbWx6UjJsMFQzQnpVM1Z3Y0c5eWRHVmtJanAwY25WbExDSnBjMU51WVhCemFHOTBVM1Z3Y0c5eWRHVmtJanAwY25WbExDSnBjMDVsZDB0dmRITlZhVVZ1WVdKc1pXUWlPblJ5ZFdWOWZRPT0iLCJpbm5lclNpZ25hdHVyZSI6ImV5SnNhV05sYm5ObFUybG5ibUYwZFhKbElqb2lVMEYyV1ZRd2JtSmlZVzV6YUUxUlVIQXlTWGxrWnpNMWNGVlZhMkpUVDAxR1ZFZExLekUwUmxkdGJEZFBVV0ppTWtwamFUZGlOM053Wm1KNWJTOXdaRW8wZFhRd2NXSTVNVTByU3pZdmVrY3ZTMVV5V25sSVNFdzVNRGRGU25GSlIyaGtXVXM0V21GNFlYWTBiR3R5TXpSbmMzaHlkWGs0ZEZRNE5tRkhWelY2VVRRNWVVNXlhUzlJTjB4eVVtOUdZV1J4V1ZwTE9VOUVPQzltT0ZwSFp6RlFUR2RJV0hsdldFWkRRV3hyVjI1eWQxWlhVbG93T1ZCNmFGQkxWM0p4VFdweWQydHlUMmsxUW1KM01YZ3lRa2gzWkZkV1Z6SlNWR0kzWVN0UVRVOHlSRXQ2YTBzeFpGa3ZTRVYyVTFoV1pXWjNWVVpPZEZOcWRtTlJLMEl5VGtOTFIydGhlSE4yVnpkV05VMTZSRkIyZW5wbWNrcG5abFZYY1hSck9FVllUbms1Y0daeFowWk5TM1pPVlhaUlUzSkZhbVUzY2xaRVZXcFhPV1l3YWpGd1NsSnNlV1U1VEd4TlFWTTJjRm96Ym5CMlRWTlJQVDBpTENKd2RXSnNhV05MWlhraU9pSXRMUzB0TFVKRlIwbE9JRkJWUWt4SlF5QkxSVmt0TFMwdExWeHVUVWxKUWtscVFVNUNaMnR4YUd0cFJ6bDNNRUpCVVVWR1FVRlBRMEZST0VGTlNVbENRMmRMUTBGUlJVRjBaWG9yUzBKd1JUQmpiMEZ3Tm1WVWRYWTJjRnh1VFdGck55OUpXVmhuTW1OSmNsWkVTMVpRVEdGR09YSjJWVzVpUjI4MmNVWTVjVms1YkVGa1lrcFhWV1EyUVhsdGVHdzRjMFF4TDFWeFdIUlRTbmhNV0Z4dU5WaDRPR1pvUmpWMWRqa3lVbmxPVlhwaVRtRkNhbE0zZWxKcVl5dENVVGMwVlRjemFIUjBkMU5FTlhsS2ExZHFjVlZFVDFaMVlWWldkVTFyV1VsNWMxeHVZMnRtYldOTWJFdEtheTlZY0VsbFpIaElNVE5tUjNGRGRVazVXV2xuVDJKSU9WVlRWRlpQYURoNU5pdERkMnBEVXk5dVRITTJkVXgwVkRsUWNYWklXVnh1YmtaRVJtZzRabVUwVjFaM1UzRklaMnBuTXpob1YzZHRlRFJ1UkdKWFJtcHdiRk0yWmt4cVFuZFdaVUl3Ykc5eE9YcDJTamhFY25SNlkyOXpZM0JpU0Z4dVkyMXJiV3h0T0doR05qQXlTMllyWTFwcmJFdzBSa3hXTmtkUVJVUkpaMGQyUnpCbmNXWnFiM0ZYUmtWRWVWUjVWM0YzVTFKVWVYWktObWRNVWtobWQxeHVWbmRKUkVGUlFVSmNiaTB0TFMwdFJVNUVJRkJWUWt4SlF5QkxSVmt0TFMwdExWeHVJaXdpYTJWNVUybG5ibUYwZFhKbElqb2laWGxLZW1GWFpIVlpXRkl4WTIxVmFVOXBTbFJWYkd4U1ZVVlNWbU14VmxaVGJrcE5XVmRzVUdKdGREVmhRM1J6VERGT2Ixb3pZM3BoV0ZZeVlWY3hXV0pFV2pCUk1uUlJUVEJuTWxkVk9IaFhibU15VEhrNWNsUXlUbWxVTW05NVZVZEZlRlpVYkdoaFIzUndUak53VDFwWGEzaGxWa1V3VVhwa05HRnNUVEZWVmtKb1lXNUZjbFJ0WkZGVmJFNVNUMVZ6TW1SRVZsUmhXR1F3V2tjMWExUjZValZrYkVad1UyeHdkMkZ0Y0RWT2FrSlVWMFZaZW1KV1drTk5hbFpWVVRCR1JGbFlSbFZoVnpsRVZqQXhVMkZWU2xKamJtUldWa2R3TldWSWNGRlpWbEkyWkROc01WcHRVVEppYldnd1RrWmFkV1JIT1hsTU1qbFFVbXBhUzJWV1FuSlpWa1p1VlZkS1JtUkVVblJrYkd4VlVraFNVazlIVW5SV2JHeHFVMnBLUlZNeFJtdGphbXQyV20xa1JGUlZiSFZpYldoM1ZsWmtWbVF4VW5kWFUzUkpaVlZOTVdOcmNFSmlWM2d4V20xT05WRlVSa0pSVnpsNFYxaFNRbUZIY0hCVFYxWjVZekZhZDJGWVFuTlBSRlkyWTNwT1VXUnJiRk5UTTJ3MFlVZEdSVTlGT0ROU01FcFVZVEJPY0VzeU1XRldXRVUxWlc1V1lWTXpaSHBYU0hCNVVWUnNOVkpzUmtkU1Z6RjBXa1JaTlZwSE9VUlpNVVpMVGtkR01HVnJaRlZrYTJ4UlZYcEdUMVJ1WTNka1NHeENaVWhOZDJWWVl6bFFVMGx6U1cxa2MySXlTbWhpUlhSc1pWVnNhMGxxYjJsWmJWSnNXbFJWTWs1VVdYZFpNbHBwVGtST2FrOVhTWGxQUjBwdFQxUm9iRmxYVG1oYWJVVXlUa1JaYVdaUlBUMGlmUT09In0=
41 changes: 41 additions & 0 deletions e2e/playwright/tests/multi-app-install/test.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { test, expect } from '@playwright/test';
import { login, uploadLicense } from '../shared';

const { execSync } = require("child_process");

test('multi app install', async ({ page }) => {
test.slow();
await login(page);
await uploadLicense(page, expect, "app1-license.yaml");
await expect(page.locator('#app')).toContainText('Configure Multi App Install 1', { timeout: 15000 });
await page.getByRole('button', { name: 'Continue' }).click();
await expect(page.locator('#app')).toContainText('Required Kubernetes Version', { timeout: 15000 });
await expect(page.locator('#app')).toContainText('Your cluster meets the recommended and required versions of Kubernetes');
await page.getByRole('button', { name: 'Deploy' }).click();
await expect(page.locator('#app')).toContainText('Multi App Install 1');
await expect(page.locator('#app')).toContainText('Ready', { timeout: 30000 });
await expect(page.locator('#app')).toContainText('Currently deployed version');
await expect(page.locator('#app')).toContainText('0.1.3');
const app1Status = execSync(`kubectl kots get apps -n ${process.env.NAMESPACE} | grep mutli-app-install | awk '{print $2}'`).toString().trim();
expect(app1Status).toBe('ready');
await page.locator('div').filter({ hasText: /^Change passwordAdd new applicationLog out$/ }).getByRole('img').click();
await page.getByText('Add new application').click();
await uploadLicense(page, expect, "app2-license.yaml");
await expect(page.locator('#app')).toContainText('Configure Multi App Install 2', { timeout: 15000 });
await page.getByRole('button', { name: 'Continue' }).click();
await expect(page.locator('#app')).toContainText('Required Kubernetes Version', { timeout: 15000 });
await expect(page.locator('#app')).toContainText('Your cluster meets the recommended and required versions of Kubernetes');
await page.getByRole('button', { name: 'Deploy' }).click();
await expect(page.locator('#app')).toContainText('Multi App Install 2');
await expect(page.locator('#app')).toContainText('Ready', { timeout: 30000 });
await expect(page.locator('#app')).toContainText('Currently deployed version');
await expect(page.locator('#app')).toContainText('2.1.2');
const app2Status = execSync(`kubectl kots get apps -n ${process.env.NAMESPACE} | grep multi-app-install-2 | awk '{print $2}'`).toString().trim();
expect(app2Status).toBe('ready');
await page.getByRole('link', { name: 'Version history' }).click();
await expect(page.locator('#app')).toContainText('2.1.2', { timeout: 10000 });
await page.getByRole('link', { name: 'Multi App Install 1' }).click();
await expect(page.locator('#app')).toContainText('0.1.3', { timeout: 10000 });
await page.getByRole('link', { name: 'Version history' }).click();
await expect(page.locator('#app')).toContainText('0.1.3', { timeout: 10000 });
});
4 changes: 2 additions & 2 deletions e2e/playwright/tests/shared/upload-license.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export const uploadLicense = async (page, expect) => {
await page.setInputFiles('input[type="file"][accept="application/x-yaml,.yaml,.yml,.rli"]', `${process.env.TEST_PATH}/license.yaml`)
export const uploadLicense = async (page, expect, licenseFile = "license.yaml") => {
await page.setInputFiles('input[type="file"][accept="application/x-yaml,.yaml,.yml,.rli"]', `${process.env.TEST_PATH}/${licenseFile}`);
await page.getByRole('button', { name: 'Upload license' }).click();
await expect(page.locator('#app')).toContainText('Installing your license');
};
Loading