mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-07-24 17:59:52 +00:00
* Fixed: UI: Test case result & profiler result is not visible in UI #8114 * removed only keyword
This commit is contained in:
parent
615b1a9647
commit
b22bfccbf4
@ -33,6 +33,13 @@ export const SEARCH_INDEX = {
|
||||
mlmodels: 'mlmodel_search_index',
|
||||
};
|
||||
|
||||
export const DATA_QUALITY_SAMPLE_DATA_TABLE = {
|
||||
term: 'dim_address',
|
||||
entity: MYDATA_SUMMARY_OPTIONS.tables,
|
||||
serviceName: 'sample_data',
|
||||
testCaseName: 'column_value_max_to_be_between',
|
||||
};
|
||||
|
||||
export const SEARCH_ENTITY_TABLE = {
|
||||
table_1: {
|
||||
term: 'raw_customer',
|
||||
|
@ -14,7 +14,7 @@
|
||||
/// <reference types="cypress" />
|
||||
|
||||
import { deleteCreatedService, descriptionBox, goToAddNewServicePage, handleIngestionRetry, interceptURL, login, mySqlConnectionInput, scheduleIngestion, testServiceCreationAndIngestion, uuid, verifyResponseStatusCode, visitEntityDetailsPage } from '../../common/common';
|
||||
import { DELETE_TERM, LOGIN, MYDATA_SUMMARY_OPTIONS, NEW_COLUMN_TEST_CASE, NEW_TABLE_TEST_CASE, NEW_TEST_SUITE, SERVICE_TYPE, TEAM_ENTITY } from '../../constants/constants';
|
||||
import { DATA_QUALITY_SAMPLE_DATA_TABLE, DELETE_TERM, LOGIN, MYDATA_SUMMARY_OPTIONS, NEW_COLUMN_TEST_CASE, NEW_TABLE_TEST_CASE, NEW_TEST_SUITE, SERVICE_TYPE, TEAM_ENTITY } from '../../constants/constants';
|
||||
|
||||
const serviceType = 'Mysql';
|
||||
const serviceName = `${serviceType}-ct-test-${uuid()}`;
|
||||
@ -392,4 +392,43 @@ describe('Data Quality and Profiler should work properly', () => {
|
||||
cy.goToHomePage();
|
||||
deleteCreatedService(SERVICE_TYPE.Database, serviceName);
|
||||
});
|
||||
|
||||
it('Profiler matrix and test case graph should visible', () => {
|
||||
login(LOGIN.username, LOGIN.password);
|
||||
cy.goToHomePage();
|
||||
const { term, entity, serviceName, testCaseName } =
|
||||
DATA_QUALITY_SAMPLE_DATA_TABLE;
|
||||
visitEntityDetailsPage(term, serviceName, entity);
|
||||
cy.get('[data-testid="inactive-link"]').should('be.visible').contains(term);
|
||||
cy.get('[data-testid="Profiler & Data Quality"]')
|
||||
.should('be.visible')
|
||||
.click();
|
||||
cy.get('[data-testid="Profiler & Data Quality"]').should(
|
||||
'have.class',
|
||||
'active'
|
||||
);
|
||||
interceptURL('GET', '/api/v1/tables/*/columnProfile?*', 'getProfilerInfo');
|
||||
|
||||
cy.get('[data-row-key="shop_id"] > :nth-child(1) > a')
|
||||
.scrollIntoView()
|
||||
.should('be.visible')
|
||||
.click();
|
||||
verifyResponseStatusCode('@getProfilerInfo', 200);
|
||||
|
||||
cy.get('#count_graph').scrollIntoView().should('be.visible');
|
||||
cy.get('#proportion_graph').scrollIntoView().should('be.visible');
|
||||
cy.get('#math_graph').scrollIntoView().should('be.visible');
|
||||
cy.get('#sum_graph').scrollIntoView().should('be.visible');
|
||||
|
||||
interceptURL('GET', '/api/v1/testCase?*', 'getTestCaseInfo');
|
||||
interceptURL('GET', '/api/v1/testCase/*/testCaseResult?*', 'getTestResult');
|
||||
cy.get('[data-testid="profiler-switch"]')
|
||||
.contains('Data Quality')
|
||||
.scrollIntoView()
|
||||
.click();
|
||||
verifyResponseStatusCode('@getTestCaseInfo', 200);
|
||||
cy.get(`[data-testid="${testCaseName}"]`).should('be.visible').click();
|
||||
verifyResponseStatusCode('@getTestResult', 200);
|
||||
cy.get(`[id="${testCaseName}_graph"]`).should('be.visible');
|
||||
});
|
||||
});
|
||||
|
@ -29,8 +29,8 @@ import { Pipeline, PipelineStatus } from '../../generated/entity/data/pipeline';
|
||||
import jsonData from '../../jsons/en';
|
||||
import { STATUS_OPTIONS } from '../../utils/PipelineDetailsUtils';
|
||||
import {
|
||||
getDateToMilliSecondsOfCurrentDate,
|
||||
getPastDatesToMilliSecondsFromCurrentDate,
|
||||
getCurrentDateTimeStamp,
|
||||
getPastDatesTimeStampFromCurrentDate,
|
||||
} from '../../utils/TimeUtils';
|
||||
import { showErrorToast } from '../../utils/ToastUtils';
|
||||
import { reactSingleSelectCustomStyle } from '../common/react-select-component/reactSelectCustomStyle';
|
||||
@ -78,11 +78,11 @@ const PipelineStatusList: FC<Prop> = ({
|
||||
|
||||
const fetchPipelineStatus = async () => {
|
||||
try {
|
||||
const startTs = getPastDatesToMilliSecondsFromCurrentDate(
|
||||
const startTs = getPastDatesTimeStampFromCurrentDate(
|
||||
PROFILER_FILTER_RANGE.last60days.days
|
||||
);
|
||||
|
||||
const endTs = getDateToMilliSecondsOfCurrentDate();
|
||||
const endTs = getCurrentDateTimeStamp();
|
||||
|
||||
const response = await getPipelineStatus(pipelineFQN, {
|
||||
startTs,
|
||||
|
@ -30,6 +30,7 @@ import { ProfilerDetailsCardProps } from '../profilerDashboard.interface';
|
||||
const ProfilerDetailsCard: React.FC<ProfilerDetailsCardProps> = ({
|
||||
chartCollection,
|
||||
tickFormatter,
|
||||
name,
|
||||
}) => {
|
||||
const { data, information } = chartCollection;
|
||||
|
||||
@ -58,7 +59,7 @@ const ProfilerDetailsCard: React.FC<ProfilerDetailsCardProps> = ({
|
||||
</Col>
|
||||
<Col span={20}>
|
||||
{data.length > 0 ? (
|
||||
<ResponsiveContainer minHeight={300}>
|
||||
<ResponsiveContainer id={`${name}_graph`} minHeight={300}>
|
||||
<LineChart
|
||||
className="tw-w-full"
|
||||
data={data}
|
||||
|
@ -257,19 +257,20 @@ const ProfilerTab: React.FC<ProfilerTabProps> = ({
|
||||
/>
|
||||
</Col>
|
||||
<Col span={24}>
|
||||
<ProfilerDetailsCard chartCollection={countMetrics} />
|
||||
<ProfilerDetailsCard chartCollection={countMetrics} name="count" />
|
||||
</Col>
|
||||
<Col span={24}>
|
||||
<ProfilerDetailsCard
|
||||
chartCollection={proportionMetrics}
|
||||
name="proportion"
|
||||
tickFormatter="%"
|
||||
/>
|
||||
</Col>
|
||||
<Col span={24}>
|
||||
<ProfilerDetailsCard chartCollection={mathMetrics} />
|
||||
<ProfilerDetailsCard chartCollection={mathMetrics} name="math" />
|
||||
</Col>
|
||||
<Col span={24}>
|
||||
<ProfilerDetailsCard chartCollection={sumMetrics} />
|
||||
<ProfilerDetailsCard chartCollection={sumMetrics} name="sum" />
|
||||
</Col>
|
||||
</Row>
|
||||
);
|
||||
|
@ -40,9 +40,9 @@ import {
|
||||
} from '../../../generated/tests/testCase';
|
||||
import { getEncodedFqn } from '../../../utils/StringsUtils';
|
||||
import {
|
||||
getDateToMilliSecondsOfCurrentDate,
|
||||
getCurrentDateTimeStamp,
|
||||
getFormattedDateFromSeconds,
|
||||
getPastDatesToMilliSecondsFromCurrentDate,
|
||||
getPastDatesTimeStampFromCurrentDate,
|
||||
} from '../../../utils/TimeUtils';
|
||||
import { showErrorToast } from '../../../utils/ToastUtils';
|
||||
import ErrorPlaceHolder from '../../common/error-with-placeholder/ErrorPlaceHolder';
|
||||
@ -130,11 +130,11 @@ const TestSummary: React.FC<TestSummaryProps> = ({ data }) => {
|
||||
if (isEmpty(data)) return;
|
||||
|
||||
try {
|
||||
const startTs = getPastDatesToMilliSecondsFromCurrentDate(
|
||||
const startTs = getPastDatesTimeStampFromCurrentDate(
|
||||
PROFILER_FILTER_RANGE[selectedTimeRange].days
|
||||
);
|
||||
|
||||
const endTs = getDateToMilliSecondsOfCurrentDate();
|
||||
const endTs = getCurrentDateTimeStamp();
|
||||
|
||||
const { data: chartData } = await getListTestCaseResults(
|
||||
getEncodedFqn(data.fullyQualifiedName || ''),
|
||||
@ -217,7 +217,10 @@ const TestSummary: React.FC<TestSummaryProps> = ({ data }) => {
|
||||
</Space>
|
||||
|
||||
{results.length ? (
|
||||
<ResponsiveContainer className="tw-bg-white" minHeight={300}>
|
||||
<ResponsiveContainer
|
||||
className="tw-bg-white"
|
||||
id={`${data.name}_graph`}
|
||||
minHeight={300}>
|
||||
<LineChart
|
||||
data={chartData.data}
|
||||
margin={{
|
||||
|
@ -42,6 +42,7 @@ export type MetricChartType = {
|
||||
|
||||
export interface ProfilerDetailsCardProps {
|
||||
chartCollection: MetricChartType;
|
||||
name: string;
|
||||
tickFormatter?: string;
|
||||
}
|
||||
|
||||
|
@ -46,8 +46,8 @@ import { DEFAULT_ENTITY_PERMISSION } from '../../utils/PermissionsUtils';
|
||||
import { getDecodedFqn } from '../../utils/StringsUtils';
|
||||
import { generateEntityLink } from '../../utils/TableUtils';
|
||||
import {
|
||||
getDateToMilliSecondsOfCurrentDate,
|
||||
getPastDatesToMilliSecondsFromCurrentDate,
|
||||
getCurrentDateTimeStamp,
|
||||
getPastDatesTimeStampFromCurrentDate,
|
||||
} from '../../utils/TimeUtils';
|
||||
import { showErrorToast } from '../../utils/ToastUtils';
|
||||
|
||||
@ -89,9 +89,9 @@ const ProfilerDashboardPage = () => {
|
||||
|
||||
const fetchProfilerData = async (fqn: string, days = 3) => {
|
||||
try {
|
||||
const startTs = getPastDatesToMilliSecondsFromCurrentDate(days);
|
||||
const startTs = getPastDatesTimeStampFromCurrentDate(days);
|
||||
|
||||
const endTs = getDateToMilliSecondsOfCurrentDate();
|
||||
const endTs = getCurrentDateTimeStamp();
|
||||
|
||||
const { data } = await getColumnProfilerList(fqn, {
|
||||
startTs,
|
||||
|
@ -275,15 +275,13 @@ export const getDateOrTimeFromSeconds = (seconds: number, format?: string) =>
|
||||
* the current date
|
||||
* @param {number} pastDayCount - The number of days you want to go back from the current date.
|
||||
*/
|
||||
export const getPastDatesToMilliSecondsFromCurrentDate = (
|
||||
pastDayCount: number
|
||||
) => DateTime.now().minus({ days: pastDayCount }).toMillis();
|
||||
export const getPastDatesTimeStampFromCurrentDate = (pastDayCount: number) =>
|
||||
DateTime.now().minus({ days: pastDayCount }).toUnixInteger();
|
||||
|
||||
/**
|
||||
* Get the current date and time in seconds.
|
||||
*/
|
||||
export const getDateToMilliSecondsOfCurrentDate = () =>
|
||||
DateTime.now().toMillis();
|
||||
export const getCurrentDateTimeStamp = () => DateTime.now().toUnixInteger();
|
||||
|
||||
/**
|
||||
* It takes a timestamp in seconds and returns a formatted date string
|
||||
|
Loading…
x
Reference in New Issue
Block a user