From 8070a781b6292ce0795ceed6f36217dd61023dad Mon Sep 17 00:00:00 2001 From: Brent Bovenzi Date: Fri, 5 Aug 2022 22:35:22 +0100 Subject: [PATCH] Use meta value url for dataset links (#25551) * use macro for modal * fix datasets url * fix datasets urls --- .../static/js/components/Table/Cells.test.tsx | 94 +++++++++++++++++++ .../www/static/js/components/Table/Cells.tsx | 25 +++-- airflow/www/static/js/datasets/Details.tsx | 7 +- airflow/www/templates/airflow/datasets.html | 1 + 4 files changed, 116 insertions(+), 11 deletions(-) create mode 100644 airflow/www/static/js/components/Table/Cells.test.tsx diff --git a/airflow/www/static/js/components/Table/Cells.test.tsx b/airflow/www/static/js/components/Table/Cells.test.tsx new file mode 100644 index 0000000000000..e92722449c94b --- /dev/null +++ b/airflow/www/static/js/components/Table/Cells.test.tsx @@ -0,0 +1,94 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* global describe, test, expect */ + +import React from 'react'; +import '@testing-library/jest-dom'; +import { render } from '@testing-library/react'; + +import { ChakraWrapper } from 'src/utils/testUtils'; +import * as utils from 'src/utils'; +import { TaskInstanceLink } from './Cells'; + +const taskId = 'task_id'; +const sourceDagId = 'source_dag_id'; +const sourceRunId = 'source_run_id'; +const originalDagId = 'og_dag_id'; + +describe('Test TaskInstanceLink', () => { + test('Replaces __DAG_ID__ url param correctly', async () => { + jest.spyOn(utils, 'getMetaValue').mockImplementation( + (meta) => { + if (meta === 'grid_url') return '/dags/__DAG_ID__/grid'; + return null; + }, + ); + + const { getByText } = render( + , + { wrapper: ChakraWrapper }, + ); + + const link = getByText(`${sourceDagId}.${taskId}`); + expect(link).toBeInTheDocument(); + expect(link).toHaveAttribute('href', `/dags/${sourceDagId}/grid?dag_run_id=${sourceRunId}&task_id=${taskId}`); + }); + + test('Replaces existing dag id url param correctly', async () => { + jest.spyOn(utils, 'getMetaValue').mockImplementation( + (meta) => { + if (meta === 'dag_id') return originalDagId; + if (meta === 'grid_url') return `/dags/${originalDagId}/grid`; + return null; + }, + ); + + const { getByText } = render( + , + { wrapper: ChakraWrapper }, + ); + + const link = getByText(`${sourceDagId}.${taskId}`); + expect(link).toBeInTheDocument(); + expect(link).toHaveAttribute('href', `/dags/${sourceDagId}/grid?dag_run_id=${sourceRunId}&task_id=${taskId}`); + }); +}); diff --git a/airflow/www/static/js/components/Table/Cells.tsx b/airflow/www/static/js/components/Table/Cells.tsx index 0c06d9f7dc1e3..b111a8b6ddc77 100644 --- a/airflow/www/static/js/components/Table/Cells.tsx +++ b/airflow/www/static/js/components/Table/Cells.tsx @@ -23,6 +23,7 @@ import { } from '@chakra-ui/react'; import Time from 'src/components/Time'; +import { getMetaValue } from 'src/utils'; interface CellProps { cell: { @@ -35,18 +36,24 @@ interface CellProps { export const TimeCell = ({ cell: { value } }: CellProps) =>