mirror of
https://github.com/komodorio/helm-dashboard.git
synced 2026-03-24 11:48:04 +00:00
Added "Add repo" senario testing (#502)
* Adding start of add repository flow * Adding data-cy instead of css selectors * Saving progress * Adding fixture data * Cleaning the test
This commit is contained in:
@@ -7,4 +7,10 @@ export default defineConfig({
|
|||||||
bundler: "vite",
|
bundler: "vite",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
|
||||||
|
e2e: {
|
||||||
|
setupNodeEvents(on, config) {
|
||||||
|
// implement node event listeners here
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|||||||
53
frontend/cypress/e2e/addRepository.cy.ts
Normal file
53
frontend/cypress/e2e/addRepository.cy.ts
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
describe("Adding repository flow", () => {
|
||||||
|
const addChartNameInput = "[data-cy='add-chart-name']";
|
||||||
|
const addChartUrlInput = "[data-cy='add-chart-url']";
|
||||||
|
const addChartRepositoryButton = "[data-cy='add-chart-repository-button']";
|
||||||
|
|
||||||
|
it("Adding new chart repository", () => {
|
||||||
|
cy.intercept("GET", "http://localhost:5173/status", {
|
||||||
|
fixture: "status.json",
|
||||||
|
}).as("status");
|
||||||
|
|
||||||
|
cy.intercept("GET", "http://localhost:5173/api/helm/releases", {
|
||||||
|
fixture: "releases.json",
|
||||||
|
}).as("releases");
|
||||||
|
|
||||||
|
cy.visit(
|
||||||
|
"http://localhost:5173/#/minikube/installed?filteredNamespace=default"
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get("[data-cy='navigation-link']").contains("Repository").click();
|
||||||
|
cy.get("[data-cy='install-repository-button']").click();
|
||||||
|
|
||||||
|
cy.get(addChartNameInput).type("Komodorio");
|
||||||
|
cy.get(addChartUrlInput).type("https://helm-charts.komodor.io");
|
||||||
|
|
||||||
|
cy.intercept("GET", "http://localhost:5173/api/helm/repositories", {
|
||||||
|
fixture: "repositories.json",
|
||||||
|
}).as("repositories");
|
||||||
|
|
||||||
|
cy.get(addChartRepositoryButton).click();
|
||||||
|
|
||||||
|
cy.contains("https://helm-charts.komodor.io");
|
||||||
|
|
||||||
|
cy.get("[data-cy='chart-viewer-install-button']")
|
||||||
|
.eq(0)
|
||||||
|
.click({ force: true })
|
||||||
|
.contains("Install")
|
||||||
|
.click();
|
||||||
|
|
||||||
|
cy.intercept("POST", "http://localhost:5173/api/helm/releases/default", {
|
||||||
|
fixture: "defaultReleases.json",
|
||||||
|
}).as("defaultReleases");
|
||||||
|
|
||||||
|
cy.intercept(
|
||||||
|
"GET",
|
||||||
|
"http://localhost:5173/api/helm/releases/default/helm-dashboard/history",
|
||||||
|
{ fixture: "history.json" }
|
||||||
|
).as("history");
|
||||||
|
|
||||||
|
cy.contains("Confirm").click();
|
||||||
|
|
||||||
|
cy.wait(["@defaultReleases", "@history"]);
|
||||||
|
});
|
||||||
|
});
|
||||||
190
frontend/cypress/fixtures/defaultReleases.json
Normal file
190
frontend/cypress/fixtures/defaultReleases.json
Normal file
File diff suppressed because one or more lines are too long
5
frontend/cypress/fixtures/example.json
Normal file
5
frontend/cypress/fixtures/example.json
Normal file
@@ -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"
|
||||||
|
}
|
||||||
13
frontend/cypress/fixtures/history.json
Normal file
13
frontend/cypress/fixtures/history.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"revision": 1,
|
||||||
|
"updated": "2024-01-17T22:39:07.2371554+02:00",
|
||||||
|
"status": "deployed",
|
||||||
|
"chart": "helm-dashboard-0.1.10",
|
||||||
|
"app_version": "1.3.3",
|
||||||
|
"description": "Install complete",
|
||||||
|
"chart_name": "helm-dashboard",
|
||||||
|
"chart_ver": "0.1.10",
|
||||||
|
"has_tests": true
|
||||||
|
}
|
||||||
|
]
|
||||||
1
frontend/cypress/fixtures/releases.json
Normal file
1
frontend/cypress/fixtures/releases.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
6
frontend/cypress/fixtures/repositories.json
Normal file
6
frontend/cypress/fixtures/repositories.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "Komodorio",
|
||||||
|
"url": "https://helm-charts.komodor.io"
|
||||||
|
}
|
||||||
|
]
|
||||||
7
frontend/cypress/fixtures/status.json
Normal file
7
frontend/cypress/fixtures/status.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"CurVer": "0.0.0",
|
||||||
|
"LatestVer": "v1.3.3",
|
||||||
|
"Analytics": false,
|
||||||
|
"CacheHitRatio": 0,
|
||||||
|
"ClusterMode": false
|
||||||
|
}
|
||||||
20
frontend/cypress/support/e2e.ts
Normal file
20
frontend/cypress/support/e2e.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
// ***********************************************************
|
||||||
|
// This example support/e2e.ts 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";
|
||||||
|
|
||||||
|
// Alternatively you can use CommonJS syntax:
|
||||||
|
// require('./commands')
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"@types/luxon": "^3.3.0",
|
"@types/luxon": "^3.3.0",
|
||||||
"@types/marked": "^5.0.0",
|
"@types/marked": "^5.0.0",
|
||||||
"compare-versions": "^6.0.0-rc.2",
|
"compare-versions": "^6.0.0-rc.2",
|
||||||
"diff2html": "^3.4.35",
|
"diff2html": "^3.4.46",
|
||||||
"eslint-config-enpitech": "^1.0.9",
|
"eslint-config-enpitech": "^1.0.9",
|
||||||
"flowbite": "^1.6.6",
|
"flowbite": "^1.6.6",
|
||||||
"flowbite-react": "^0.4.9",
|
"flowbite-react": "^0.4.9",
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
"prettier": "npx prettier src/ --check",
|
"prettier": "npx prettier src/ --check",
|
||||||
"prettier:fix": "npm run prettier -- --write",
|
"prettier:fix": "npm run prettier -- --write",
|
||||||
"cypress:open": "cypress open",
|
"cypress:open": "cypress open",
|
||||||
"cypress:run": "cypress run"
|
"cypress:run": "cypress run"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const LinkWithSearchParams = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const { search } = useLocation();
|
const { search } = useLocation();
|
||||||
const { context } = useParams();
|
const { context } = useParams();
|
||||||
const {clusterMode} = useAppContext();
|
const { clusterMode } = useAppContext();
|
||||||
|
|
||||||
const params = new URLSearchParams(search);
|
const params = new URLSearchParams(search);
|
||||||
// For state we don't want to keep while navigating
|
// For state we don't want to keep while navigating
|
||||||
@@ -27,7 +27,13 @@ const LinkWithSearchParams = ({
|
|||||||
prefixedUrl = `/${context}${to}`;
|
prefixedUrl = `/${context}${to}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return <NavLink to={`${prefixedUrl}/?${params.toString()}`} {...props} />;
|
return (
|
||||||
|
<NavLink
|
||||||
|
data-cy="navigation-link"
|
||||||
|
to={`${prefixedUrl}/?${params.toString()}`}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default LinkWithSearchParams;
|
export default LinkWithSearchParams;
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ function AddRepositoryModal({ isOpen, onClose }: AddRepositoryModalProps) {
|
|||||||
bottomContent={
|
bottomContent={
|
||||||
<div className="flex justify-end p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
|
<div className="flex justify-end p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
|
||||||
<button
|
<button
|
||||||
|
data-cy="add-chart-repository-button"
|
||||||
className="flex items-center text-white font-medium px-3 py-1.5 bg-primary hover:bg-add-repo focus:ring-4 focus:outline-none focus:ring-blue-300 disabled:bg-blue-300 rounded-lg text-base text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800"
|
className="flex items-center text-white font-medium px-3 py-1.5 bg-primary hover:bg-add-repo focus:ring-4 focus:outline-none focus:ring-blue-300 disabled:bg-blue-300 rounded-lg text-base text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800"
|
||||||
onClick={addRepository}
|
onClick={addRepository}
|
||||||
disabled={isLoading}
|
disabled={isLoading}
|
||||||
@@ -104,6 +105,7 @@ function AddRepositoryModal({ isOpen, onClose }: AddRepositoryModalProps) {
|
|||||||
}
|
}
|
||||||
required
|
required
|
||||||
id="name"
|
id="name"
|
||||||
|
data-cy="add-chart-name"
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Komodorio"
|
placeholder="Komodorio"
|
||||||
className="rounded-lg p-2 w-full border border-gray-300 focus:outline-none focus:border-sky-500 input-box-shadow"
|
className="rounded-lg p-2 w-full border border-gray-300 focus:outline-none focus:border-sky-500 input-box-shadow"
|
||||||
@@ -121,6 +123,7 @@ function AddRepositoryModal({ isOpen, onClose }: AddRepositoryModalProps) {
|
|||||||
}
|
}
|
||||||
required
|
required
|
||||||
id="url"
|
id="url"
|
||||||
|
data-cy="add-chart-url"
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="https://helm-charts.komodor.io"
|
placeholder="https://helm-charts.komodor.io"
|
||||||
className="rounded-lg p-2 w-full border border-gray-300 focus:outline-none focus:border-sky-500 input-box-shadow"
|
className="rounded-lg p-2 w-full border border-gray-300 focus:outline-none focus:border-sky-500 input-box-shadow"
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ function ChartViewer({ chart }: ChartViewerProps) {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div
|
<div
|
||||||
|
data-cy="chart-viewer-install-button"
|
||||||
className="grid grid-cols-10 gap-3 hover:bg-body-background p-4 text-sm"
|
className="grid grid-cols-10 gap-3 hover:bg-body-background p-4 text-sm"
|
||||||
onMouseOver={handleMouseOver}
|
onMouseOver={handleMouseOver}
|
||||||
onMouseOut={handleMouseOut}
|
onMouseOut={handleMouseOut}
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ function RepositoriesList({
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
|
data-cy="install-repository-button"
|
||||||
type="button"
|
type="button"
|
||||||
style={{ marginTop: "10px" }}
|
style={{ marginTop: "10px" }}
|
||||||
className="h-8 w-fit flex items-center gap-2 border rounded text-muted border-gray-300 px-3 py-1 text-sm font-semibold"
|
className="h-8 w-fit flex items-center gap-2 border rounded text-muted border-gray-300 px-3 py-1 text-sm font-semibold"
|
||||||
|
|||||||
Reference in New Issue
Block a user