mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
refactor
Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
parent
5c89ea9d7d
commit
65c7a183d3
@ -26,6 +26,7 @@ describe("Lens cluster pages", () => {
|
|||||||
const addCluster = async () => {
|
const addCluster = async () => {
|
||||||
await utils.clickWhatsNew(app);
|
await utils.clickWhatsNew(app);
|
||||||
await utils.clickWelcomeNotification(app);
|
await utils.clickWelcomeNotification(app);
|
||||||
|
await app.client.waitUntilTextExists("h5", "Catalog");
|
||||||
await addMinikubeCluster(app);
|
await addMinikubeCluster(app);
|
||||||
await waitForMinikubeDashboard(app);
|
await waitForMinikubeDashboard(app);
|
||||||
await app.client.click('a[href="/nodes"]');
|
await app.client.click('a[href="/nodes"]');
|
||||||
|
|||||||
@ -1,75 +0,0 @@
|
|||||||
import { Application } from "spectron";
|
|
||||||
import * as utils from "../helpers/utils";
|
|
||||||
import { addMinikubeCluster, minikubeReady } from "../helpers/minikube";
|
|
||||||
import { exec } from "child_process";
|
|
||||||
import * as util from "util";
|
|
||||||
|
|
||||||
export const promiseExec = util.promisify(exec);
|
|
||||||
|
|
||||||
jest.setTimeout(60000);
|
|
||||||
|
|
||||||
describe("Lens integration tests", () => {
|
|
||||||
let app: Application;
|
|
||||||
const ready = minikubeReady("workspace-int-tests");
|
|
||||||
|
|
||||||
utils.describeIf(ready)("workspaces", () => {
|
|
||||||
utils.beforeAllWrapped(async () => {
|
|
||||||
app = await utils.appStart();
|
|
||||||
await utils.clickWhatsNew(app);
|
|
||||||
});
|
|
||||||
|
|
||||||
utils.afterAllWrapped(async () => {
|
|
||||||
if (app?.isRunning()) {
|
|
||||||
return utils.tearDown(app);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const switchToWorkspace = async (name: string) => {
|
|
||||||
await app.client.click("[data-test-id=current-workspace]");
|
|
||||||
await app.client.keys(name);
|
|
||||||
await app.client.keys("Enter");
|
|
||||||
await app.client.waitUntilTextExists("[data-test-id=current-workspace-name]", name);
|
|
||||||
};
|
|
||||||
|
|
||||||
const createWorkspace = async (name: string) => {
|
|
||||||
await app.client.click("[data-test-id=current-workspace]");
|
|
||||||
await app.client.keys("add workspace");
|
|
||||||
await app.client.keys("Enter");
|
|
||||||
await app.client.keys(name);
|
|
||||||
await app.client.keys("Enter");
|
|
||||||
await app.client.waitUntilTextExists("[data-test-id=current-workspace-name]", name);
|
|
||||||
};
|
|
||||||
|
|
||||||
it("creates new workspace", async () => {
|
|
||||||
const name = "test-workspace";
|
|
||||||
|
|
||||||
await createWorkspace(name);
|
|
||||||
await app.client.waitUntilTextExists("[data-test-id=current-workspace-name]", name);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("edits current workspaces", async () => {
|
|
||||||
await createWorkspace("to-be-edited");
|
|
||||||
await app.client.click("[data-test-id=current-workspace]");
|
|
||||||
await app.client.keys("edit current workspace");
|
|
||||||
await app.client.keys("Enter");
|
|
||||||
await app.client.keys("edited-workspace");
|
|
||||||
await app.client.keys("Enter");
|
|
||||||
await app.client.waitUntilTextExists("[data-test-id=current-workspace-name]", "edited-workspace");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("adds cluster in default workspace", async () => {
|
|
||||||
await switchToWorkspace("default");
|
|
||||||
await addMinikubeCluster(app);
|
|
||||||
await app.client.waitUntilTextExists("pre.kube-auth-out", "Authentication proxy started");
|
|
||||||
await app.client.waitForExist(`iframe[name="minikube"]`);
|
|
||||||
await app.client.waitForVisible(".ClustersMenu .ClusterIcon.active");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("adds cluster in test-workspace", async () => {
|
|
||||||
await switchToWorkspace("test-workspace");
|
|
||||||
await addMinikubeCluster(app);
|
|
||||||
await app.client.waitUntilTextExists("pre.kube-auth-out", "Authentication proxy started");
|
|
||||||
await app.client.waitForExist(`iframe[name="minikube"]`);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@ -80,7 +80,7 @@ export async function appStart() {
|
|||||||
export async function clickWhatsNew(app: Application) {
|
export async function clickWhatsNew(app: Application) {
|
||||||
await app.client.waitUntilTextExists("h1", "What's new?");
|
await app.client.waitUntilTextExists("h1", "What's new?");
|
||||||
await app.client.click("button.primary");
|
await app.client.click("button.primary");
|
||||||
await app.client.waitUntilTextExists("h2", "default");
|
await app.client.waitUntilTextExists("h5", "Catalog");
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function clickWelcomeNotification(app: Application) {
|
export async function clickWelcomeNotification(app: Application) {
|
||||||
|
|||||||
@ -35,7 +35,10 @@ export class HotbarStore extends BaseStore<HotbarStoreModel> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@action protected async fromStore(data: Partial<HotbarStoreModel> = {}) {
|
@action protected async fromStore(data: Partial<HotbarStoreModel> = {}) {
|
||||||
this.hotbars = data.hotbars || [];
|
this.hotbars = data.hotbars || [{
|
||||||
|
name: "default",
|
||||||
|
items: []
|
||||||
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
getByName(name: string) {
|
getByName(name: string) {
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import { preferencesURL } from "../renderer/components/+preferences/preferences.
|
|||||||
import { whatsNewURL } from "../renderer/components/+whats-new/whats-new.route";
|
import { whatsNewURL } from "../renderer/components/+whats-new/whats-new.route";
|
||||||
import { clusterSettingsURL } from "../renderer/components/+cluster-settings/cluster-settings.route";
|
import { clusterSettingsURL } from "../renderer/components/+cluster-settings/cluster-settings.route";
|
||||||
import { extensionsURL } from "../renderer/components/+extensions/extensions.route";
|
import { extensionsURL } from "../renderer/components/+extensions/extensions.route";
|
||||||
import { landingURL } from "../renderer/components/+landing-page/landing-page.route";
|
import { catalogURL } from "../renderer/components/+catalog/catalog.route";
|
||||||
import { menuRegistry } from "../extensions/registries/menu-registry";
|
import { menuRegistry } from "../extensions/registries/menu-registry";
|
||||||
import logger from "./logger";
|
import logger from "./logger";
|
||||||
import { exitApp } from "./exit-app";
|
import { exitApp } from "./exit-app";
|
||||||
@ -180,7 +180,7 @@ export function buildMenu(windowManager: WindowManager) {
|
|||||||
label: "Catalog",
|
label: "Catalog",
|
||||||
accelerator: "Shift+CmdOrCtrl+C",
|
accelerator: "Shift+CmdOrCtrl+C",
|
||||||
click() {
|
click() {
|
||||||
navigate(landingURL());
|
navigate(catalogURL());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
8
src/renderer/components/+catalog/catalog.route.ts
Normal file
8
src/renderer/components/+catalog/catalog.route.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import type { RouteProps } from "react-router";
|
||||||
|
import { buildURL } from "../../../common/utils/buildUrl";
|
||||||
|
|
||||||
|
export const catalogRoute: RouteProps = {
|
||||||
|
path: "/catalog"
|
||||||
|
};
|
||||||
|
|
||||||
|
export const catalogURL = buildURL(catalogRoute.path);
|
||||||
@ -1,4 +1,4 @@
|
|||||||
import "./landing-page.scss";
|
import "./catalog.scss";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { ItemListLayout } from "../item-object-list";
|
import { ItemListLayout } from "../item-object-list";
|
||||||
@ -14,6 +14,7 @@ import { Badge } from "../badge";
|
|||||||
import { hotbarStore } from "../../../common/hotbar-store";
|
import { hotbarStore } from "../../../common/hotbar-store";
|
||||||
import { addClusterURL } from "../+add-cluster";
|
import { addClusterURL } from "../+add-cluster";
|
||||||
import { autobind } from "../../utils";
|
import { autobind } from "../../utils";
|
||||||
|
import { Notifications } from "../notifications";
|
||||||
|
|
||||||
enum sortBy {
|
enum sortBy {
|
||||||
name = "name",
|
name = "name",
|
||||||
@ -22,7 +23,7 @@ enum sortBy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
export class LandingPage extends React.Component {
|
export class Catalog extends React.Component {
|
||||||
@observable private catalogEntityStore?: CatalogEntityStore;
|
@observable private catalogEntityStore?: CatalogEntityStore;
|
||||||
@observable.deep private contextMenu: CatalogEntityContextMenuContext;
|
@observable.deep private contextMenu: CatalogEntityContextMenuContext;
|
||||||
private disposers: IReactionDisposer[] = [];
|
private disposers: IReactionDisposer[] = [];
|
||||||
@ -34,6 +35,13 @@ export class LandingPage extends React.Component {
|
|||||||
};
|
};
|
||||||
this.catalogEntityStore = new CatalogEntityStore();
|
this.catalogEntityStore = new CatalogEntityStore();
|
||||||
this.disposers.push(this.catalogEntityStore.watch());
|
this.disposers.push(this.catalogEntityStore.watch());
|
||||||
|
|
||||||
|
if (this.catalogEntityStore.items.length === 0) {
|
||||||
|
Notifications.info(<><b>Welcome!</b><p>Get started by associating one or more clusters to Lens</p></>, {
|
||||||
|
timeout: 30_000,
|
||||||
|
id: "landing-welcome"
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
2
src/renderer/components/+catalog/index.tsx
Normal file
2
src/renderer/components/+catalog/index.tsx
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export * from "./catalog.route";
|
||||||
|
export * from "./catalog";
|
||||||
@ -1,2 +0,0 @@
|
|||||||
export * from "./landing-page.route";
|
|
||||||
export * from "./landing-page";
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
import type { RouteProps } from "react-router";
|
|
||||||
import { buildURL } from "../../../common/utils/buildUrl";
|
|
||||||
|
|
||||||
export const landingRoute: RouteProps = {
|
|
||||||
path: "/landing"
|
|
||||||
};
|
|
||||||
|
|
||||||
export const landingURL = buildURL(landingRoute.path);
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import uniqueId from "lodash/uniqueId";
|
import uniqueId from "lodash/uniqueId";
|
||||||
import { clusterSettingsURL } from "../+cluster-settings";
|
import { clusterSettingsURL } from "../+cluster-settings";
|
||||||
import { landingURL } from "../+landing-page";
|
import { catalogURL } from "../+catalog";
|
||||||
|
|
||||||
import { clusterStore } from "../../../common/cluster-store";
|
import { clusterStore } from "../../../common/cluster-store";
|
||||||
import { broadcastMessage, requestMain } from "../../../common/ipc";
|
import { broadcastMessage, requestMain } from "../../../common/ipc";
|
||||||
@ -25,7 +25,7 @@ export const ClusterActions = (cluster: Cluster) => ({
|
|||||||
})),
|
})),
|
||||||
disconnect: async () => {
|
disconnect: async () => {
|
||||||
clusterStore.deactivate(cluster.id);
|
clusterStore.deactivate(cluster.id);
|
||||||
navigate(landingURL());
|
navigate(catalogURL());
|
||||||
await requestMain(clusterDisconnectHandler, cluster.id);
|
await requestMain(clusterDisconnectHandler, cluster.id);
|
||||||
},
|
},
|
||||||
remove: () => {
|
remove: () => {
|
||||||
@ -40,7 +40,7 @@ export const ClusterActions = (cluster: Cluster) => ({
|
|||||||
ok: () => {
|
ok: () => {
|
||||||
clusterStore.deactivate(cluster.id);
|
clusterStore.deactivate(cluster.id);
|
||||||
clusterStore.removeById(cluster.id);
|
clusterStore.removeById(cluster.id);
|
||||||
navigate(landingURL());
|
navigate(catalogURL());
|
||||||
},
|
},
|
||||||
message: <p>
|
message: <p>
|
||||||
Are you sure want to remove cluster <b id={tooltipId}>{cluster.name}</b>?
|
Are you sure want to remove cluster <b id={tooltipId}>{cluster.name}</b>?
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import { Redirect, Route, Switch } from "react-router";
|
|||||||
import { comparer, reaction } from "mobx";
|
import { comparer, reaction } from "mobx";
|
||||||
import { disposeOnUnmount, observer } from "mobx-react";
|
import { disposeOnUnmount, observer } from "mobx-react";
|
||||||
import { BottomBar } from "./bottom-bar";
|
import { BottomBar } from "./bottom-bar";
|
||||||
import { LandingPage, landingRoute, landingURL } from "../+landing-page";
|
import { Catalog, catalogRoute, catalogURL } from "../+catalog";
|
||||||
import { Preferences, preferencesRoute } from "../+preferences";
|
import { Preferences, preferencesRoute } from "../+preferences";
|
||||||
import { AddCluster, addClusterRoute } from "../+add-cluster";
|
import { AddCluster, addClusterRoute } from "../+add-cluster";
|
||||||
import { ClusterView } from "./cluster-view";
|
import { ClusterView } from "./cluster-view";
|
||||||
@ -44,7 +44,7 @@ export class ClusterManager extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get startUrl() {
|
get startUrl() {
|
||||||
return landingURL();
|
return catalogURL();
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
@ -53,7 +53,7 @@ export class ClusterManager extends React.Component {
|
|||||||
<main>
|
<main>
|
||||||
<div id="lens-views"/>
|
<div id="lens-views"/>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route component={LandingPage} {...landingRoute} />
|
<Route component={Catalog} {...catalogRoute} />
|
||||||
<Route component={Preferences} {...preferencesRoute} />
|
<Route component={Preferences} {...preferencesRoute} />
|
||||||
<Route component={Extensions} {...extensionsRoute} />
|
<Route component={Extensions} {...extensionsRoute} />
|
||||||
<Route component={AddCluster} {...addClusterRoute} />
|
<Route component={AddCluster} {...addClusterRoute} />
|
||||||
|
|||||||
@ -17,6 +17,11 @@ export class HotbarMenu extends React.Component<Props> {
|
|||||||
render() {
|
render() {
|
||||||
const { className } = this.props;
|
const { className } = this.props;
|
||||||
const hotbar = hotbarStore.getByName("default"); // FIXME
|
const hotbar = hotbarStore.getByName("default"); // FIXME
|
||||||
|
|
||||||
|
if (!hotbar) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
const items = hotbar.items.map((item) => catalogEntityRegistry.items.find((entity) => entity.metadata.uid === item.entity.uid)).filter(Boolean);
|
const items = hotbar.items.map((item) => catalogEntityRegistry.items.find((entity) => entity.metadata.uid === item.entity.uid)).filter(Boolean);
|
||||||
const runContext = {
|
const runContext = {
|
||||||
navigate: (url: string) => navigate(url)
|
navigate: (url: string) => navigate(url)
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { addClusterURL } from "../components/+add-cluster";
|
import { addClusterURL } from "../components/+add-cluster";
|
||||||
import { clusterSettingsURL } from "../components/+cluster-settings";
|
import { clusterSettingsURL } from "../components/+cluster-settings";
|
||||||
import { extensionsURL } from "../components/+extensions";
|
import { extensionsURL } from "../components/+extensions";
|
||||||
import { landingURL } from "../components/+landing-page";
|
import { catalogURL } from "../components/+catalog";
|
||||||
import { preferencesURL } from "../components/+preferences";
|
import { preferencesURL } from "../components/+preferences";
|
||||||
import { clusterViewURL } from "../components/cluster-manager/cluster-view.route";
|
import { clusterViewURL } from "../components/cluster-manager/cluster-view.route";
|
||||||
import { LensProtocolRouterRenderer } from "./router";
|
import { LensProtocolRouterRenderer } from "./router";
|
||||||
@ -15,10 +15,10 @@ export function bindProtocolAddRouteHandlers() {
|
|||||||
navigate(preferencesURL({ fragment: highlight }));
|
navigate(preferencesURL({ fragment: highlight }));
|
||||||
})
|
})
|
||||||
.addInternalHandler("/", () => {
|
.addInternalHandler("/", () => {
|
||||||
navigate(landingURL());
|
navigate(catalogURL());
|
||||||
})
|
})
|
||||||
.addInternalHandler("/landing", () => {
|
.addInternalHandler("/catalog", () => {
|
||||||
navigate(landingURL());
|
navigate(catalogURL());
|
||||||
})
|
})
|
||||||
.addInternalHandler("/cluster", () => {
|
.addInternalHandler("/cluster", () => {
|
||||||
navigate(addClusterURL());
|
navigate(addClusterURL());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user