From 1a2555a7049edadad17bb98e5211a20ad7043d93 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Fri, 5 Jan 2024 15:06:27 +0000 Subject: [PATCH] WIP Signed-off-by: John Cowen --- cypress/main.ts | 1 + .../DebugKClipboardProvider.vue | 28 +++++++++++++++++++ .../debug-k-clipboard-provider/README.md | 7 +++++ src/app/vue/index.ts | 8 +++--- src/services/development.ts | 14 ++++++++++ src/test-support/mocks/src/meshes/_.ts | 3 ++ .../mocks/src/meshes/_/circuit-breakers/_.ts | 3 ++ .../mocks/src/meshes/_/dataplanes/_.ts | 3 ++ .../mocks/src/meshes/_/external-services/_.ts | 3 ++ .../mocks/src/meshes/_/fault-injections/_.ts | 3 ++ .../mocks/src/meshes/_/health-checks/_.ts | 3 ++ .../src/meshes/_/meshfaultinjections/_.ts | 3 ++ .../mocks/src/meshes/_/meshgatewayroutes/_.ts | 3 ++ .../mocks/src/meshes/_/meshgateways/_.ts | 3 ++ .../mocks/src/meshes/_/proxytemplates/_.ts | 3 ++ .../mocks/src/meshes/_/traffic-logs/_.ts | 3 ++ .../src/meshes/_/traffic-permissions/_.ts | 3 ++ .../mocks/src/meshes/_/traffic-traces/_.ts | 3 ++ .../mocks/src/zone-ingresses/_.ts | 3 ++ src/test-support/mocks/src/zoneegresses/_.ts | 3 ++ test-support/index.ts | 8 +++--- 21 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 src/app/application/components/debug-k-clipboard-provider/DebugKClipboardProvider.vue create mode 100644 src/app/application/components/debug-k-clipboard-provider/README.md diff --git a/cypress/main.ts b/cypress/main.ts index c0eb6f2493..1fbd8f0575 100644 --- a/cypress/main.ts +++ b/cypress/main.ts @@ -6,6 +6,7 @@ import { build, token } from '@/services/utils' const $ = { // cypress doesn't need i18n but this quietens TS temporarily i18n: token('i18n'), + components: token('components'), ...DEV_TOKENS, ...TOKENS, } diff --git a/src/app/application/components/debug-k-clipboard-provider/DebugKClipboardProvider.vue b/src/app/application/components/debug-k-clipboard-provider/DebugKClipboardProvider.vue new file mode 100644 index 0000000000..0ca67e5327 --- /dev/null +++ b/src/app/application/components/debug-k-clipboard-provider/DebugKClipboardProvider.vue @@ -0,0 +1,28 @@ + + diff --git a/src/app/application/components/debug-k-clipboard-provider/README.md b/src/app/application/components/debug-k-clipboard-provider/README.md new file mode 100644 index 0000000000..114a0de7f9 --- /dev/null +++ b/src/app/application/components/debug-k-clipboard-provider/README.md @@ -0,0 +1,7 @@ +# DebugKClipboardProvider + +Wraps KClipboardProvider in a decorator to also `console.log` the text of any +copy (and also `console.error` the text if the copy fails). + +The component should always be injected as a replacement for KClipboardProvider +in debug/dev modes only and never used directly. diff --git a/src/app/vue/index.ts b/src/app/vue/index.ts index 4785fa7510..db97e89c95 100644 --- a/src/app/vue/index.ts +++ b/src/app/vue/index.ts @@ -35,14 +35,14 @@ export const services = (app: Record): ServiceDefinition[] => { return async (App: Component) => { const app = createApp(App) - components.forEach(([name, component]: [string, Component]) => { - app.component(name, component) - }) - plugins.forEach(([...args]) => { app.use(...args) }) + components.forEach(([name, component]: [string, Component]) => { + app.component(name, component) + }) + return app } }, diff --git a/src/services/development.ts b/src/services/development.ts index 779b7288d9..12cb58062d 100644 --- a/src/services/development.ts +++ b/src/services/development.ts @@ -1,6 +1,8 @@ +import { KClipboardProvider } from '@kong/kongponents' import { setupWorker, MockedRequest } from 'msw' import Logger from './logger/Logger' +import DebugKClipboardProvider from '@/app/application/components/debug-k-clipboard-provider/DebugKClipboardProvider.vue' import debugI18n from '@/app/application/services/i18n/DebugI18n' import { TOKENS as CONTROL_PLANES } from '@/app/control-planes' import cookied from '@/services/env/CookiedEnv' @@ -31,6 +33,7 @@ const $ = { type SupportedTokens = typeof $ & { i18n: Token + components: Token logger: Token env: Token } @@ -67,6 +70,17 @@ export const services: ServiceConfigurator = (app) => [ decorates: app.i18n, }], + [token('development.components'), { + service: () => { + return [ + ['KClipboardProvider', DebugKClipboardProvider], + ] + }, + labels: [ + app.components, + ], + }], + [token('env.debug'), { service: (env: () => AEnv) => { return cookied(env()) diff --git a/src/test-support/mocks/src/meshes/_.ts b/src/test-support/mocks/src/meshes/_.ts index 8e54920a7c..c7b80cf104 100644 --- a/src/test-support/mocks/src/meshes/_.ts +++ b/src/test-support/mocks/src/meshes/_.ts @@ -8,6 +8,9 @@ export default ({ fake, env }: EndpointDependencies): MockResponder => (req) => return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), name, type: 'Mesh', creationTime: '2020-06-19T12:18:02.097986-04:00', diff --git a/src/test-support/mocks/src/meshes/_/circuit-breakers/_.ts b/src/test-support/mocks/src/meshes/_/circuit-breakers/_.ts index db0b782652..ff61ff8288 100644 --- a/src/test-support/mocks/src/meshes/_/circuit-breakers/_.ts +++ b/src/test-support/mocks/src/meshes/_/circuit-breakers/_.ts @@ -4,6 +4,9 @@ export default (_deps: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'CircuitBreaker', mesh: params.mesh, name: params.name, diff --git a/src/test-support/mocks/src/meshes/_/dataplanes/_.ts b/src/test-support/mocks/src/meshes/_/dataplanes/_.ts index 90f1c8fa08..74f328adc4 100644 --- a/src/test-support/mocks/src/meshes/_/dataplanes/_.ts +++ b/src/test-support/mocks/src/meshes/_/dataplanes/_.ts @@ -16,6 +16,9 @@ export default ({ fake, env }: EndpointDependencies): MockResponder => (req) => return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'Dataplane', mesh, name, diff --git a/src/test-support/mocks/src/meshes/_/external-services/_.ts b/src/test-support/mocks/src/meshes/_/external-services/_.ts index b4f726c55c..d715cc945d 100644 --- a/src/test-support/mocks/src/meshes/_/external-services/_.ts +++ b/src/test-support/mocks/src/meshes/_/external-services/_.ts @@ -6,6 +6,9 @@ export default ({ fake }: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'ExternalService', mesh, name, diff --git a/src/test-support/mocks/src/meshes/_/fault-injections/_.ts b/src/test-support/mocks/src/meshes/_/fault-injections/_.ts index 3eeac7a50e..893e2c7658 100644 --- a/src/test-support/mocks/src/meshes/_/fault-injections/_.ts +++ b/src/test-support/mocks/src/meshes/_/fault-injections/_.ts @@ -4,6 +4,9 @@ export default ({ fake }: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'FaultInjection', mesh: params.mesh, name: params.name, diff --git a/src/test-support/mocks/src/meshes/_/health-checks/_.ts b/src/test-support/mocks/src/meshes/_/health-checks/_.ts index a6d592992a..461530652c 100644 --- a/src/test-support/mocks/src/meshes/_/health-checks/_.ts +++ b/src/test-support/mocks/src/meshes/_/health-checks/_.ts @@ -4,6 +4,9 @@ export default ({ fake }: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'HealthCheck', mesh: params.mesh, name: params.name, diff --git a/src/test-support/mocks/src/meshes/_/meshfaultinjections/_.ts b/src/test-support/mocks/src/meshes/_/meshfaultinjections/_.ts index 6b2cecb155..f956673ba9 100644 --- a/src/test-support/mocks/src/meshes/_/meshfaultinjections/_.ts +++ b/src/test-support/mocks/src/meshes/_/meshfaultinjections/_.ts @@ -6,6 +6,9 @@ export default ({ fake }: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'MeshFaultInjection', mesh, name, diff --git a/src/test-support/mocks/src/meshes/_/meshgatewayroutes/_.ts b/src/test-support/mocks/src/meshes/_/meshgatewayroutes/_.ts index bf0abb977f..a6ad90a1bd 100644 --- a/src/test-support/mocks/src/meshes/_/meshgatewayroutes/_.ts +++ b/src/test-support/mocks/src/meshes/_/meshgatewayroutes/_.ts @@ -4,6 +4,9 @@ export default ({ fake }: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'MeshGatewayRoute', mesh: params.mesh, name: params.name, diff --git a/src/test-support/mocks/src/meshes/_/meshgateways/_.ts b/src/test-support/mocks/src/meshes/_/meshgateways/_.ts index 5631b416a7..b69ddba6ca 100644 --- a/src/test-support/mocks/src/meshes/_/meshgateways/_.ts +++ b/src/test-support/mocks/src/meshes/_/meshgateways/_.ts @@ -4,6 +4,9 @@ export default (_deps: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'MeshGateway', mesh: params.mesh, name: params.name, diff --git a/src/test-support/mocks/src/meshes/_/proxytemplates/_.ts b/src/test-support/mocks/src/meshes/_/proxytemplates/_.ts index c308875a70..9708d889d1 100644 --- a/src/test-support/mocks/src/meshes/_/proxytemplates/_.ts +++ b/src/test-support/mocks/src/meshes/_/proxytemplates/_.ts @@ -4,6 +4,9 @@ export default ({ fake }: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'ProxyTemplate', mesh: params.mesh, name: params.name, diff --git a/src/test-support/mocks/src/meshes/_/traffic-logs/_.ts b/src/test-support/mocks/src/meshes/_/traffic-logs/_.ts index a6edd2a159..850684d75b 100644 --- a/src/test-support/mocks/src/meshes/_/traffic-logs/_.ts +++ b/src/test-support/mocks/src/meshes/_/traffic-logs/_.ts @@ -4,6 +4,9 @@ export default ({ fake }: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'TrafficLog', mesh: params.mesh, name: params.name, diff --git a/src/test-support/mocks/src/meshes/_/traffic-permissions/_.ts b/src/test-support/mocks/src/meshes/_/traffic-permissions/_.ts index 98be2e1266..f545932d50 100644 --- a/src/test-support/mocks/src/meshes/_/traffic-permissions/_.ts +++ b/src/test-support/mocks/src/meshes/_/traffic-permissions/_.ts @@ -4,6 +4,9 @@ export default ({ fake }: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'TrafficPermission', mesh: params.mesh, name: params.name, diff --git a/src/test-support/mocks/src/meshes/_/traffic-traces/_.ts b/src/test-support/mocks/src/meshes/_/traffic-traces/_.ts index 9850acd9e3..f12499b0df 100644 --- a/src/test-support/mocks/src/meshes/_/traffic-traces/_.ts +++ b/src/test-support/mocks/src/meshes/_/traffic-traces/_.ts @@ -4,6 +4,9 @@ export default ({ fake }: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'TrafficTrace', mesh: params.mesh, name: params.name, diff --git a/src/test-support/mocks/src/zone-ingresses/_.ts b/src/test-support/mocks/src/zone-ingresses/_.ts index 439ff7a1bb..42a8c0b3ed 100644 --- a/src/test-support/mocks/src/zone-ingresses/_.ts +++ b/src/test-support/mocks/src/zone-ingresses/_.ts @@ -7,6 +7,9 @@ export default ({ fake }: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'ZoneIngress', name, creationTime: '2021-07-13T08:40:59Z', diff --git a/src/test-support/mocks/src/zoneegresses/_.ts b/src/test-support/mocks/src/zoneegresses/_.ts index 071d78a144..0481c7ca93 100644 --- a/src/test-support/mocks/src/zoneegresses/_.ts +++ b/src/test-support/mocks/src/zoneegresses/_.ts @@ -7,6 +7,9 @@ export default ({ fake }: EndpointDependencies): MockResponder => (req) => { return { headers: {}, body: { + ...(req.url.searchParams.get('format') === 'kubernetes' && { + apiVersion: 'kuma.io/v1alpha1', + }), type: 'ZoneEgress', name, creationTime: '2021-07-13T08:40:59Z', diff --git a/test-support/index.ts b/test-support/index.ts index ff64cd738f..9a922fb744 100644 --- a/test-support/index.ts +++ b/test-support/index.ts @@ -26,14 +26,14 @@ export const services: ServiceConfigurator = (app) => [ components: ComponentDefinition[], plugins: PluginDefinition[], ) => { - components.forEach(([name, component]: [string, Component]) => { - config.global.components[name] = component - }) - plugins.forEach(([...args]) => { config.global.plugins.push([...args]) }) + components.forEach(([name, component]: [string, Component]) => { + config.global.components[name] = component + }) + return async () => { throw new Error('You shouldn\'t be calling $.app during testing, just get(\'$.app\') is fine') }