mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Catch empty string error is parseKubeApi - Add more debugging lines Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add some unit tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Use resolved pathname Signed-off-by: Sebastian Malton <sebastian@malton.name>
147 lines
4.3 KiB
TypeScript
147 lines
4.3 KiB
TypeScript
/**
|
|
* Copyright (c) 2021 OpenLens Authors
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
* this software and associated documentation files (the "Software"), to deal in
|
|
* the Software without restriction, including without limitation the rights to
|
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
* subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in all
|
|
* copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
jest.mock("../kube-object");
|
|
jest.mock("../kube-api");
|
|
jest.mock("../api-manager", () => ({
|
|
apiManager() {
|
|
return {
|
|
registerStore: jest.fn(),
|
|
};
|
|
}
|
|
}));
|
|
|
|
import { IKubeApiParsed, parseKubeApi } from "../kube-api-parse";
|
|
|
|
/**
|
|
* [<input-url>, <expected-result>]
|
|
*/
|
|
type KubeApiParseTestData = [string, Required<IKubeApiParsed>];
|
|
|
|
const tests: KubeApiParseTestData[] = [
|
|
["/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/prometheuses.monitoring.coreos.com", {
|
|
apiBase: "/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions",
|
|
apiPrefix: "/apis",
|
|
apiGroup: "apiextensions.k8s.io",
|
|
apiVersion: "v1beta1",
|
|
apiVersionWithGroup: "apiextensions.k8s.io/v1beta1",
|
|
namespace: undefined,
|
|
resource: "customresourcedefinitions",
|
|
name: "prometheuses.monitoring.coreos.com"
|
|
}],
|
|
["/api/v1/namespaces/kube-system/pods/coredns-6955765f44-v8p27", {
|
|
apiBase: "/api/v1/pods",
|
|
apiPrefix: "/api",
|
|
apiGroup: "",
|
|
apiVersion: "v1",
|
|
apiVersionWithGroup: "v1",
|
|
namespace: "kube-system",
|
|
resource: "pods",
|
|
name: "coredns-6955765f44-v8p27"
|
|
}],
|
|
["/apis/stable.example.com/foo1/crontabs", {
|
|
apiBase: "/apis/stable.example.com/foo1/crontabs",
|
|
apiPrefix: "/apis",
|
|
apiGroup: "stable.example.com",
|
|
apiVersion: "foo1",
|
|
apiVersionWithGroup: "stable.example.com/foo1",
|
|
resource: "crontabs",
|
|
name: undefined,
|
|
namespace: undefined,
|
|
}],
|
|
["/apis/cluster.k8s.io/v1alpha1/clusters", {
|
|
apiBase: "/apis/cluster.k8s.io/v1alpha1/clusters",
|
|
apiPrefix: "/apis",
|
|
apiGroup: "cluster.k8s.io",
|
|
apiVersion: "v1alpha1",
|
|
apiVersionWithGroup: "cluster.k8s.io/v1alpha1",
|
|
resource: "clusters",
|
|
name: undefined,
|
|
namespace: undefined,
|
|
}],
|
|
["/api/v1/namespaces", {
|
|
apiBase: "/api/v1/namespaces",
|
|
apiPrefix: "/api",
|
|
apiGroup: "",
|
|
apiVersion: "v1",
|
|
apiVersionWithGroup: "v1",
|
|
resource: "namespaces",
|
|
name: undefined,
|
|
namespace: undefined,
|
|
}],
|
|
["/api/v1/secrets", {
|
|
apiBase: "/api/v1/secrets",
|
|
apiPrefix: "/api",
|
|
apiGroup: "",
|
|
apiVersion: "v1",
|
|
apiVersionWithGroup: "v1",
|
|
resource: "secrets",
|
|
name: undefined,
|
|
namespace: undefined,
|
|
}],
|
|
["/api/v1/nodes/minikube", {
|
|
apiBase: "/api/v1/nodes",
|
|
apiPrefix: "/api",
|
|
apiGroup: "",
|
|
apiVersion: "v1",
|
|
apiVersionWithGroup: "v1",
|
|
resource: "nodes",
|
|
name: "minikube",
|
|
namespace: undefined,
|
|
}],
|
|
["/api/foo-bar/nodes/minikube", {
|
|
apiBase: "/api/foo-bar/nodes",
|
|
apiPrefix: "/api",
|
|
apiGroup: "",
|
|
apiVersion: "foo-bar",
|
|
apiVersionWithGroup: "foo-bar",
|
|
resource: "nodes",
|
|
name: "minikube",
|
|
namespace: undefined,
|
|
}],
|
|
["/api/v1/namespaces/kube-public", {
|
|
apiBase: "/api/v1/namespaces",
|
|
apiPrefix: "/api",
|
|
apiGroup: "",
|
|
apiVersion: "v1",
|
|
apiVersionWithGroup: "v1",
|
|
resource: "namespaces",
|
|
name: "kube-public",
|
|
namespace: undefined,
|
|
}],
|
|
];
|
|
|
|
const throwtests = [
|
|
undefined,
|
|
"",
|
|
"ajklsmh"
|
|
];
|
|
|
|
describe("parseApi unit tests", () => {
|
|
it.each(tests)("testing %j", (url, expected) => {
|
|
expect(parseKubeApi(url)).toStrictEqual(expected);
|
|
});
|
|
|
|
it.each(throwtests)("testing %j should throw", (url) => {
|
|
expect(() => parseKubeApi(url)).toThrowError("invalid apiPath");
|
|
});
|
|
});
|