This is an automated email from the ASF dual-hosted git repository.
zehnder pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git
The following commit(s) were added to refs/heads/dev by this push:
new 2e5d0c1a88 Add Assets during charts generation /edition (#3841)
2e5d0c1a88 is described below
commit 2e5d0c1a8882e42187ccdc82f83a275492907787
Author: Jacqueline Höllig <[email protected]>
AuthorDate: Thu Oct 16 16:04:27 2025 +0200
Add Assets during charts generation /edition (#3841)
Co-authored-by: Philipp Zehnder <[email protected]>
Co-authored-by: Dominik Riemer <[email protected]>
---
.../support/utils/DataDownloadDialogUtils.ts | 6 +-
.../support/utils/ProcessingElementTestUtils.ts | 4 +-
ui/cypress/support/utils/connect/ConnectUtils.ts | 4 +-
.../DataExplorerBtns.ts} | 0
.../DataExplorerUtils.ts} | 92 +++++++++++-----
.../DataExplorerWidgetTableUtils.ts} | 2 +-
ui/cypress/tests/connect/editAdapter.smoke.spec.ts | 14 +--
.../editAdapterSettingsAndPipeline.smoke.spec.ts | 6 +-
.../connect/rules/addNumericalStaticValue.spec.ts | 4 +-
.../dataDownloadDialogTest.smoke.spec.ts | 6 +-
.../charts}/heatmap.spec.ts | 9 +-
.../charts}/histogram.spec.ts | 8 +-
.../charts}/indicator.spec.ts | 8 +-
.../widgets => dataExplorer/charts}/map.spec.ts | 10 +-
.../charts}/scatter.smoke.spec.ts | 10 +-
.../widgets => dataExplorer/charts}/table.spec.ts | 10 +-
.../charts}/timeSeriesSave.spec.ts | 16 +--
.../configuration.smoke.spec.ts | 10 +-
.../dataExplorer/dataViewAssets.smoke.spec.ts | 60 +++++++++++
.../dataExplorer/deleteViewAndDashboard.spec.ts | 76 +++++++++++++
.../filterNumericalStringProperties.spec.ts | 36 +++----
.../missingDataInDataLake.spec.ts | 12 +--
.../timeOrderDataView.spec.ts | 32 +++---
.../timeRangeSelectors.spec.ts | 14 +--
.../widgetDataConfiguration.smoke.spec.ts | 119 +++++++++++++++++++++
.../tests/datalake/deleteViewAndDashboard.spec.ts | 76 -------------
ui/cypress/tests/datalake/deleteWidget.ts | 61 -----------
.../datalake/widgetDataConfiguration.smoke.spec.ts | 105 ------------------
.../restartStreamPipes/restartStreamPipes2.ts | 4 +-
.../data-explorer-chart-view.component.ts | 19 +++-
ui/src/app/data-explorer/data-explorer.module.ts | 10 +-
.../dialog/asset-dialog.component.html | 69 ++++++++++++
.../data-explorer/dialog/asset-dialog.component.ts | 103 ++++++++++++++++++
33 files changed, 634 insertions(+), 381 deletions(-)
diff --git a/ui/cypress/support/utils/DataDownloadDialogUtils.ts
b/ui/cypress/support/utils/DataDownloadDialogUtils.ts
index b7cf5a148d..28e44ff751 100644
--- a/ui/cypress/support/utils/DataDownloadDialogUtils.ts
+++ b/ui/cypress/support/utils/DataDownloadDialogUtils.ts
@@ -17,7 +17,7 @@
*/
import { ExportConfig } from
'../../../projects/streampipes/shared-ui/src/lib/dialog/data-download-dialog/model/export-config.model';
-import { DataLakeUtils } from './datalake/DataLakeUtils';
+import { DataExplorerUtils } from './dataExplorer/DataExplorerUtils';
import { FileNameService } from
'../../../projects/streampipes/shared-ui/src/lib/dialog/data-download-dialog/services/file-name.service';
import { CsvFormatExportConfig } from
'../../../projects/streampipes/shared-ui/src/lib/dialog/data-download-dialog/model/format-export-config.model';
import { GeneralUtils } from './GeneralUtils';
@@ -29,11 +29,11 @@ export class DataDownloadDialogUtils {
dataViewName: string,
) {
// const exportDate: Date;
- DataLakeUtils.goToDatalake();
+ DataExplorerUtils.goToDatalake();
GeneralUtils.openMenuForRow(dataViewName);
// select data view in edit mode
- DataLakeUtils.editDataView(dataViewName);
+ DataExplorerUtils.editDataView(dataViewName);
// select download button
cy.dataCy('data-view-data-download-btn').click();
diff --git a/ui/cypress/support/utils/ProcessingElementTestUtils.ts
b/ui/cypress/support/utils/ProcessingElementTestUtils.ts
index 6340635b48..5baed8ff61 100644
--- a/ui/cypress/support/utils/ProcessingElementTestUtils.ts
+++ b/ui/cypress/support/utils/ProcessingElementTestUtils.ts
@@ -19,7 +19,7 @@
import { FileManagementUtils } from './FileManagementUtils';
import { ConnectUtils } from './connect/ConnectUtils';
import { PipelineUtils } from './pipeline/PipelineUtils';
-import { DataLakeUtils } from './datalake/DataLakeUtils';
+import { DataExplorerUtils } from './dataExplorer/DataExplorerUtils';
import { PipelineBuilder } from '../builder/PipelineBuilder';
import { PipelineElementBuilder } from '../builder/PipelineElementBuilder';
import { ProcessorTest } from '../model/ProcessorTest';
@@ -96,7 +96,7 @@ export class ProcessingElementTestUtils {
cy.wait(3000);
- DataLakeUtils.checkResults(
+ DataExplorerUtils.checkResults(
dataLakeIndex,
'cypress/fixtures/' + expectedResultFile,
pipelineElementTest.processor.ignoreTimestamp,
diff --git a/ui/cypress/support/utils/connect/ConnectUtils.ts
b/ui/cypress/support/utils/connect/ConnectUtils.ts
index fcb4d0a779..db144b1765 100644
--- a/ui/cypress/support/utils/connect/ConnectUtils.ts
+++ b/ui/cypress/support/utils/connect/ConnectUtils.ts
@@ -19,7 +19,7 @@
import { StaticPropertyUtils } from '../userInput/StaticPropertyUtils';
import { AdapterInput } from '../../model/AdapterInput';
import { ConnectEventSchemaUtils } from './ConnectEventSchemaUtils';
-import { DataLakeUtils } from '../datalake/DataLakeUtils';
+import { DataExplorerUtils } from '../dataExplorer/DataExplorerUtils';
import { ConnectBtns } from './ConnectBtns';
import { AdapterBuilder } from '../../builder/AdapterBuilder';
import { UserUtils } from '../UserUtils';
@@ -492,7 +492,7 @@ export class ConnectUtils {
// Wait till data is stored
cy.wait(waitTime);
- DataLakeUtils.checkResults(
+ DataExplorerUtils.checkResults(
'Adapter to test rules',
expectedFile,
ignoreTime,
diff --git a/ui/cypress/support/utils/datalake/DataLakeBtns.ts
b/ui/cypress/support/utils/dataExplorer/DataExplorerBtns.ts
similarity index 100%
rename from ui/cypress/support/utils/datalake/DataLakeBtns.ts
rename to ui/cypress/support/utils/dataExplorer/DataExplorerBtns.ts
diff --git a/ui/cypress/support/utils/datalake/DataLakeUtils.ts
b/ui/cypress/support/utils/dataExplorer/DataExplorerUtils.ts
similarity index 85%
rename from ui/cypress/support/utils/datalake/DataLakeUtils.ts
rename to ui/cypress/support/utils/dataExplorer/DataExplorerUtils.ts
index 0aafa64f91..3bdaf3a855 100644
--- a/ui/cypress/support/utils/datalake/DataLakeUtils.ts
+++ b/ui/cypress/support/utils/dataExplorer/DataExplorerUtils.ts
@@ -27,7 +27,7 @@ import { AdapterBuilder } from '../../builder/AdapterBuilder';
import { differenceInMonths } from 'date-fns';
import { GeneralUtils } from '../GeneralUtils';
-export class DataLakeUtils {
+export class DataExplorerUtils {
public static goToDatalake() {
cy.visit('#/dataexplorer');
}
@@ -39,7 +39,7 @@ export class DataLakeUtils {
public static initDataLakeTests() {
cy.initStreamPipesTest();
- DataLakeUtils.loadRandomDataSetIntoDataLake();
+ DataExplorerUtils.loadRandomDataSetIntoDataLake();
}
public static getDataLakeTestSetAdapter(
@@ -95,22 +95,22 @@ export class DataLakeUtils {
dataSet: string,
widgetType: string,
) {
- DataLakeUtils.goToDatalake();
- DataLakeUtils.createAndEditDataView();
+ DataExplorerUtils.goToDatalake();
+ DataExplorerUtils.createAndEditDataView();
- DataLakeUtils.selectTimeRange(
+ DataExplorerUtils.selectTimeRange(
new Date(2020, 10, 20, 22, 44),
- DataLakeUtils.getFutureDate(),
+ DataExplorerUtils.getFutureDate(),
);
- // DataLakeUtils.addNewWidget();
- DataLakeUtils.selectDataSet(dataSet);
- DataLakeUtils.dataConfigSelectAllFields();
+ // DataExplorerUtils.addNewWidget();
+ DataExplorerUtils.selectDataSet(dataSet);
+ DataExplorerUtils.dataConfigSelectAllFields();
- DataLakeUtils.selectAppearanceConfig();
- DataLakeUtils.selectDataViewName(dataViewName);
+ DataExplorerUtils.selectAppearanceConfig();
+ DataExplorerUtils.selectDataViewName(dataViewName);
- DataLakeUtils.openVisualizationConfig();
- DataLakeUtils.selectVisualizationType(widgetType);
+ DataExplorerUtils.openVisualizationConfig();
+ DataExplorerUtils.selectVisualizationType(widgetType);
cy.wait(1000);
}
@@ -136,6 +136,13 @@ export class DataLakeUtils {
DataExplorerWidget.TIME_SERIES,
);
}
+ public static renameWidget(newName: string) {
+ cy.dataCy('appearance-config-widget-title').clear().type(newName);
+ cy.dataCy('appearance-config-widget-title').should(
+ 'have.value',
+ newName,
+ );
+ }
public static loadRandomDataSetIntoDataLake() {
PrepareTestDataUtils.loadDataIntoDataLake('fileTest/random.csv');
@@ -190,6 +197,15 @@ export class DataLakeUtils {
cy.dataCy('save-data-view-btn', { timeout: 10000 }).click({
force: true,
});
+ cy.dataCy('asset-dialog-cancel-delete', { timeout: 10000 }).click({
+ force: true,
+ });
+ }
+
+ public static saveToAddAssets() {
+ cy.dataCy('save-data-view-btn', { timeout: 10000 }).click({
+ force: true,
+ });
}
public static saveDashboardConfiguration() {
@@ -200,6 +216,21 @@ export class DataLakeUtils {
return cy.dataCy('empty-dashboard');
}
+ public static addToAsset(assetNameList = []) {
+ cy.get('mat-tree.asset-tree', { timeout: 10000 }).should('exist');
+
+ assetNameList.forEach(assetName => {
+ cy.get('mat-tree.asset-tree')
+ .find('.mat-tree-node')
+ .contains(assetName)
+ .click();
+ });
+
+ cy.dataCy('asset-dialog-confirm-delete', { timeout: 10000 }).click({
+ force: true,
+ });
+ }
+
public static deleteDashboard(dashboardName: string) {
GeneralUtils.openMenuForRow(dashboardName);
cy.dataCy('delete-dashboard-' + dashboardName, {
@@ -243,14 +274,14 @@ export class DataLakeUtils {
public static saveAndReEditWidget(dataViewName: string) {
// Save data view configuration
- DataLakeUtils.saveDataViewConfiguration();
- DataLakeUtils.editDataView(dataViewName);
+ DataExplorerUtils.saveDataViewConfiguration();
+ DataExplorerUtils.editDataView(dataViewName);
}
public static saveAndReEditDashboard(dashboardName: string) {
// Save dashboard configuration
- DataLakeUtils.saveDashboardConfiguration();
- DataLakeUtils.editDashboard(dashboardName);
+ DataExplorerUtils.saveDashboardConfiguration();
+ DataExplorerUtils.editDashboard(dashboardName);
}
public static clickTab(tabName: string) {
@@ -483,19 +514,19 @@ export class DataLakeUtils {
}
public static selectTimeRange(from: Date, to: Date) {
- DataLakeUtils.openTimeSelectorMenu();
+ DataExplorerUtils.openTimeSelectorMenu();
const monthsBack = Math.abs(differenceInMonths(from, new Date())) + 1;
- DataLakeUtils.navigateCalendar('previous', monthsBack);
- DataLakeUtils.selectDay(from.getDate());
+ DataExplorerUtils.navigateCalendar('previous', monthsBack);
+ DataExplorerUtils.selectDay(from.getDate());
const monthsForward = Math.abs(differenceInMonths(from, to));
- DataLakeUtils.navigateCalendar('next', monthsForward);
+ DataExplorerUtils.navigateCalendar('next', monthsForward);
- DataLakeUtils.selectDay(to.getDate());
+ DataExplorerUtils.selectDay(to.getDate());
- DataLakeUtils.setTimeInput('time-selector-start-time', from);
- DataLakeUtils.setTimeInput('time-selector-end-time', to);
- DataLakeUtils.applyCustomTimeSelection();
+ DataExplorerUtils.setTimeInput('time-selector-start-time', from);
+ DataExplorerUtils.setTimeInput('time-selector-end-time', to);
+ DataExplorerUtils.applyCustomTimeSelection();
}
public static navigateCalendar(direction: string, numberOfMonths: number) {
@@ -521,7 +552,7 @@ export class DataLakeUtils {
}
public static setTimeInput(field: string, date: Date) {
- cy.dataCy(field).type(DataLakeUtils.makeTimeString(date));
+ cy.dataCy(field).type(DataExplorerUtils.makeTimeString(date));
}
public static makeTimeString(date: Date) {
@@ -567,4 +598,13 @@ export class DataLakeUtils {
public static checkIfConfirmationDialogIsShowing(): void {
cy.get('confirmation-dialog').should('be.visible');
}
+ public static createDataViewWithAssets(assetNames) {
+ DataExplorerUtils.loadDataIntoDataLake('datalake/sample.csv');
+
+ // Create Diagram
+ DataExplorerUtils.addDataViewAndTableWidget('NewWidget', 'Persist');
+ //Save
+ DataExplorerUtils.saveToAddAssets();
+ DataExplorerUtils.addToAsset(assetNames);
+ }
}
diff --git a/ui/cypress/support/utils/datalake/DataLakeWidgetTableUtils.ts
b/ui/cypress/support/utils/dataExplorer/DataExplorerWidgetTableUtils.ts
similarity index 96%
rename from ui/cypress/support/utils/datalake/DataLakeWidgetTableUtils.ts
rename to ui/cypress/support/utils/dataExplorer/DataExplorerWidgetTableUtils.ts
index d09177c6ea..cf977fad47 100644
--- a/ui/cypress/support/utils/datalake/DataLakeWidgetTableUtils.ts
+++ b/ui/cypress/support/utils/dataExplorer/DataExplorerWidgetTableUtils.ts
@@ -16,7 +16,7 @@
*
*/
-export class DataLakeWidgetTableUtils {
+export class DataExplorerWidgetTableUtils {
public static dataExplorerTableRowTimestamp() {
return cy.dataCy('data-explorer-table-row-timestamp', {
timeout: 10000,
diff --git a/ui/cypress/tests/connect/editAdapter.smoke.spec.ts
b/ui/cypress/tests/connect/editAdapter.smoke.spec.ts
index 91c960c129..3348b683fe 100644
--- a/ui/cypress/tests/connect/editAdapter.smoke.spec.ts
+++ b/ui/cypress/tests/connect/editAdapter.smoke.spec.ts
@@ -20,8 +20,8 @@ import { ConnectUtils } from
'../../support/utils/connect/ConnectUtils';
import { ConnectBtns } from '../../support/utils/connect/ConnectBtns';
import { AdapterBuilder } from '../../support/builder/AdapterBuilder';
import { ConnectEventSchemaUtils } from
'../../support/utils/connect/ConnectEventSchemaUtils';
-import { DataLakeUtils } from '../../support/utils/datalake/DataLakeUtils';
-import { DataLakeBtns } from '../../support/utils/datalake/DataLakeBtns';
+import { DataExplorerUtils } from
'../../support/utils/dataExplorer/DataExplorerUtils';
+import { DataLakeBtns } from
'../../support/utils/dataExplorer/DataExplorerBtns';
describe('Test Edit Adapter', () => {
beforeEach('Setup Test', () => {
@@ -98,13 +98,13 @@ describe('Test Edit Adapter', () => {
ConnectUtils.storeAndStartEditedAdapter();
// Validate that the data is further persisted in the database by
checking if the amount of events in the data lake changes
- DataLakeUtils.goToDatalakeConfiguration();
+ DataExplorerUtils.goToDatalakeConfiguration();
- DataLakeUtils.waitForCountingResults();
+ DataExplorerUtils.waitForCountingResults();
let initialValue;
- DataLakeUtils.getDatalakeNumberOfEvents().then(value => {
+ DataExplorerUtils.getDatalakeNumberOfEvents().then(value => {
initialValue = value;
});
@@ -112,9 +112,9 @@ describe('Test Edit Adapter', () => {
DataLakeBtns.refreshDataLakeMeasures().click();
- DataLakeUtils.waitForCountingResults();
+ DataExplorerUtils.waitForCountingResults();
- DataLakeUtils.getDatalakeNumberOfEvents().then(newValue => {
+ DataExplorerUtils.getDatalakeNumberOfEvents().then(newValue => {
expect(newValue).not.equal(initialValue);
});
});
diff --git
a/ui/cypress/tests/connect/editAdapterSettingsAndPipeline.smoke.spec.ts
b/ui/cypress/tests/connect/editAdapterSettingsAndPipeline.smoke.spec.ts
index 3b1e63e37c..8c26ec3f7f 100644
--- a/ui/cypress/tests/connect/editAdapterSettingsAndPipeline.smoke.spec.ts
+++ b/ui/cypress/tests/connect/editAdapterSettingsAndPipeline.smoke.spec.ts
@@ -23,7 +23,7 @@ import { PipelineElementBuilder } from
'../../support/builder/PipelineElementBui
import { PipelineBuilder } from '../../support/builder/PipelineBuilder';
import { AdapterBuilder } from '../../support/builder/AdapterBuilder';
import { DashboardUtils } from '../../support/utils/DashboardUtils';
-import { DataLakeUtils } from '../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../support/utils/dataExplorer/DataExplorerUtils';
import { GeneralUtils } from '../../support/utils/GeneralUtils';
describe('Test Edit Adapter and Pipeline', () => {
@@ -102,8 +102,8 @@ describe('Test Edit Adapter and Pipeline', () => {
// Visit dashboard
cy.wait(5000);
- DataLakeUtils.goToDatalake();
- DataLakeUtils.createAndEditDataView();
+ DataExplorerUtils.goToDatalake();
+ DataExplorerUtils.createAndEditDataView();
cy.dataCy('data-explorer-field-selection-panel').should(
'include.text',
diff --git a/ui/cypress/tests/connect/rules/addNumericalStaticValue.spec.ts
b/ui/cypress/tests/connect/rules/addNumericalStaticValue.spec.ts
index f4962830bd..4fb2992ddd 100644
--- a/ui/cypress/tests/connect/rules/addNumericalStaticValue.spec.ts
+++ b/ui/cypress/tests/connect/rules/addNumericalStaticValue.spec.ts
@@ -19,7 +19,7 @@
import { ConnectUtils } from '../../../support/utils/connect/ConnectUtils';
import { FileManagementUtils } from
'../../../support/utils/FileManagementUtils';
import { ConnectEventSchemaUtils } from
'../../../support/utils/connect/ConnectEventSchemaUtils';
-import { DataLakeUtils } from '../../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../../support/utils/dataExplorer/DataExplorerUtils';
import { ConnectBtns } from '../../../support/utils/connect/ConnectBtns';
import { GeneralUtils } from '../../../support/utils/GeneralUtils';
@@ -55,7 +55,7 @@ describe('Connect schema rule transformations', () => {
cy.wait(1000);
- DataLakeUtils.checkResults(
+ DataExplorerUtils.checkResults(
'Adapter to test rules',
'cypress/fixtures/connect/addNumericalStaticValue/expected.json',
true,
diff --git
a/ui/cypress/tests/dataDownloadDialog/dataDownloadDialogTest.smoke.spec.ts
b/ui/cypress/tests/dataDownloadDialog/dataDownloadDialogTest.smoke.spec.ts
index 19646718da..618c96c8d3 100644
--- a/ui/cypress/tests/dataDownloadDialog/dataDownloadDialogTest.smoke.spec.ts
+++ b/ui/cypress/tests/dataDownloadDialog/dataDownloadDialogTest.smoke.spec.ts
@@ -18,7 +18,7 @@
import { ExportConfig } from
'../../../projects/streampipes/shared-ui/src/lib/dialog/data-download-dialog/model/export-config.model';
import { DataDownloadDialogUtils } from
'../../support/utils/DataDownloadDialogUtils';
-import { DataLakeUtils } from '../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../support/utils/dataExplorer/DataExplorerUtils';
import { PrepareTestDataUtils } from
'../../support/utils/PrepareTestDataUtils';
describe('Test data explorer data download dialog', () => {
@@ -29,8 +29,8 @@ describe('Test data explorer data download dialog', () => {
'json_array',
);
- DataLakeUtils.addDataViewAndTableWidget(dataViewName, 'Persist');
- DataLakeUtils.saveDataViewConfiguration();
+ DataExplorerUtils.addDataViewAndTableWidget(dataViewName, 'Persist');
+ DataExplorerUtils.saveDataViewConfiguration();
});
beforeEach('Setup Test', () => {
diff --git a/ui/cypress/tests/datalake/widgets/heatmap.spec.ts
b/ui/cypress/tests/dataExplorer/charts/heatmap.spec.ts
similarity index 77%
rename from ui/cypress/tests/datalake/widgets/heatmap.spec.ts
rename to ui/cypress/tests/dataExplorer/charts/heatmap.spec.ts
index ac463a9647..080176a99f 100644
--- a/ui/cypress/tests/datalake/widgets/heatmap.spec.ts
+++ b/ui/cypress/tests/dataExplorer/charts/heatmap.spec.ts
@@ -16,19 +16,18 @@
*
*/
-import { DataLakeUtils } from '../../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../../support/utils/dataExplorer/DataExplorerUtils';
describe('Test Heatmap View in Data Explorer', () => {
beforeEach('Setup Test', () => {
- DataLakeUtils.initDataLakeTests();
+ DataExplorerUtils.initDataLakeTests();
});
it('Perform Test', () => {
- DataLakeUtils.addDataViewAndWidget('view', 'Persist', 'heatmap');
+ DataExplorerUtils.addDataViewAndWidget('view', 'Persist', 'heatmap');
// Check checkbox
- DataLakeUtils.openVisualizationConfig();
- cy.get('mat-checkbox input').click({ force: true });
+ DataExplorerUtils.openVisualizationConfig();
// Check if heatmap chart is visible
cy.dataCy('heatmap').should('be.visible');
diff --git a/ui/cypress/tests/datalake/widgets/histogram.spec.ts
b/ui/cypress/tests/dataExplorer/charts/histogram.spec.ts
similarity index 83%
rename from ui/cypress/tests/datalake/widgets/histogram.spec.ts
rename to ui/cypress/tests/dataExplorer/charts/histogram.spec.ts
index eb31c64a10..6e955a5097 100644
--- a/ui/cypress/tests/datalake/widgets/histogram.spec.ts
+++ b/ui/cypress/tests/dataExplorer/charts/histogram.spec.ts
@@ -16,22 +16,22 @@
*
*/
-import { DataLakeUtils } from '../../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../../support/utils/dataExplorer/DataExplorerUtils';
describe('Test Histogram View in Data Explorer', () => {
beforeEach('Setup Test', () => {
- DataLakeUtils.initDataLakeTests();
+ DataExplorerUtils.initDataLakeTests();
});
it('Perform Test', () => {
- DataLakeUtils.addDataViewAndWidget(
+ DataExplorerUtils.addDataViewAndWidget(
'view',
'Persist',
'histogram-chart',
);
// Change field for histogram
- DataLakeUtils.openVisualizationConfig();
+ DataExplorerUtils.openVisualizationConfig();
// Check if histogram chart is displayed
cy.dataCy('histogram-chart').should('be.visible');
diff --git a/ui/cypress/tests/datalake/widgets/indicator.spec.ts
b/ui/cypress/tests/dataExplorer/charts/indicator.spec.ts
similarity index 83%
rename from ui/cypress/tests/datalake/widgets/indicator.spec.ts
rename to ui/cypress/tests/dataExplorer/charts/indicator.spec.ts
index 0fb0bfc00c..047206a4a6 100644
--- a/ui/cypress/tests/datalake/widgets/indicator.spec.ts
+++ b/ui/cypress/tests/dataExplorer/charts/indicator.spec.ts
@@ -16,22 +16,22 @@
*
*/
-import { DataLakeUtils } from '../../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../../support/utils/dataExplorer/DataExplorerUtils';
describe('Test Indicator View in Data Explorer', () => {
beforeEach('Setup Test', () => {
- DataLakeUtils.initDataLakeTests();
+ DataExplorerUtils.initDataLakeTests();
});
it('Perform Test', () => {
- DataLakeUtils.addDataViewAndWidget(
+ DataExplorerUtils.addDataViewAndWidget(
'view',
'Persist',
'indicator-chart',
);
// Check checkbox
- DataLakeUtils.openVisualizationConfig();
+ DataExplorerUtils.openVisualizationConfig();
cy.dataCy('data-explorer-select-delta-checkbox').click();
cy.dataCy('indicator-chart').should('be.visible');
diff --git a/ui/cypress/tests/datalake/widgets/map.spec.ts
b/ui/cypress/tests/dataExplorer/charts/map.spec.ts
similarity index 85%
rename from ui/cypress/tests/datalake/widgets/map.spec.ts
rename to ui/cypress/tests/dataExplorer/charts/map.spec.ts
index e5e13c2b4a..574628226c 100644
--- a/ui/cypress/tests/datalake/widgets/map.spec.ts
+++ b/ui/cypress/tests/dataExplorer/charts/map.spec.ts
@@ -16,18 +16,18 @@
*
*/
-import { DataLakeUtils } from '../../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../../support/utils/dataExplorer/DataExplorerUtils';
describe('Test Map View in Data Explorer', () => {
beforeEach('Setup Test', () => {
- DataLakeUtils.initDataLakeTests();
+ DataExplorerUtils.initDataLakeTests();
});
it('Perform Test', () => {
- DataLakeUtils.addDataViewAndWidget('view', 'Persist', 'map');
+ DataExplorerUtils.addDataViewAndWidget('view', 'Persist', 'map');
// Change marker positions
- DataLakeUtils.openVisualizationConfig();
+ DataExplorerUtils.openVisualizationConfig();
cy.dataCy('data-view-map-select-latitude')
.click()
.get('mat-option')
@@ -48,7 +48,7 @@ describe('Test Map View in Data Explorer', () => {
);
// Change from markers to trace
- DataLakeUtils.openVisualizationConfig();
+ DataExplorerUtils.openVisualizationConfig();
cy.dataCy('data-view-map-select-marker-or-trace')
.click()
.get('mat-option')
diff --git a/ui/cypress/tests/datalake/widgets/scatter.smoke.spec.ts
b/ui/cypress/tests/dataExplorer/charts/scatter.smoke.spec.ts
similarity index 79%
rename from ui/cypress/tests/datalake/widgets/scatter.smoke.spec.ts
rename to ui/cypress/tests/dataExplorer/charts/scatter.smoke.spec.ts
index e92dbe872a..c402f928b4 100644
--- a/ui/cypress/tests/datalake/widgets/scatter.smoke.spec.ts
+++ b/ui/cypress/tests/dataExplorer/charts/scatter.smoke.spec.ts
@@ -16,15 +16,19 @@
*
*/
-import { DataLakeUtils } from '../../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../../support/utils/dataExplorer/DataExplorerUtils';
describe('Test Scatter View in Data Explorer', () => {
beforeEach('Setup Test', () => {
- DataLakeUtils.initDataLakeTests();
+ DataExplorerUtils.initDataLakeTests();
});
it('Perform Test', () => {
- DataLakeUtils.addDataViewAndWidget('view', 'Persist', 'scatter-chart');
+ DataExplorerUtils.addDataViewAndWidget(
+ 'view',
+ 'Persist',
+ 'scatter-chart',
+ );
// Check if scatter plot is displayed
cy.dataCy('scatter-chart').should('be.visible');
diff --git a/ui/cypress/tests/datalake/widgets/table.spec.ts
b/ui/cypress/tests/dataExplorer/charts/table.spec.ts
similarity index 76%
rename from ui/cypress/tests/datalake/widgets/table.spec.ts
rename to ui/cypress/tests/dataExplorer/charts/table.spec.ts
index 3a501efa68..8149e021d6 100644
--- a/ui/cypress/tests/datalake/widgets/table.spec.ts
+++ b/ui/cypress/tests/dataExplorer/charts/table.spec.ts
@@ -16,23 +16,23 @@
*
*/
-import { DataLakeUtils } from '../../../support/utils/datalake/DataLakeUtils';
-import { DataLakeWidgetTableUtils } from
'../../../support/utils/datalake/DataLakeWidgetTableUtils';
+import { DataExplorerUtils } from
'../../../support/utils/dataExplorer/DataExplorerUtils';
+import { DataExplorerWidgetTableUtils } from
'../../../support/utils/dataExplorer/DataExplorerWidgetTableUtils';
import { DataExplorerWidget } from '../../../support/model/DataExplorerWidget';
describe('Test Table View in Data Explorer', () => {
beforeEach('Setup Test', () => {
- DataLakeUtils.initDataLakeTests();
+ DataExplorerUtils.initDataLakeTests();
});
it('Perform Test', () => {
- DataLakeUtils.addDataViewAndWidget(
+ DataExplorerUtils.addDataViewAndWidget(
'view',
'Persist',
DataExplorerWidget.TABLE,
);
// Check if table is displayed correctly
- DataLakeWidgetTableUtils.checkAmountOfRows(10);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(10);
});
});
diff --git a/ui/cypress/tests/datalake/widgets/timeSeriesSave.spec.ts
b/ui/cypress/tests/dataExplorer/charts/timeSeriesSave.spec.ts
similarity index 79%
rename from ui/cypress/tests/datalake/widgets/timeSeriesSave.spec.ts
rename to ui/cypress/tests/dataExplorer/charts/timeSeriesSave.spec.ts
index 760c65fd2c..d789f280f1 100644
--- a/ui/cypress/tests/datalake/widgets/timeSeriesSave.spec.ts
+++ b/ui/cypress/tests/dataExplorer/charts/timeSeriesSave.spec.ts
@@ -16,7 +16,7 @@
*
*/
-import { DataLakeUtils } from '../../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../../support/utils/dataExplorer/DataExplorerUtils';
const testView1 = 'TestView1';
const testView2 = 'TestView2';
@@ -24,16 +24,16 @@ const dataSet = 'Persist';
describe('Test if widget configuration is updated correctly', () => {
beforeEach('Setup Test', () => {
- DataLakeUtils.initDataLakeTests();
+ DataExplorerUtils.initDataLakeTests();
// Create first test data view with one time series widget
- DataLakeUtils.addDataViewAndTimeSeriesWidget(testView1, dataSet);
- DataLakeUtils.saveDataViewConfiguration();
+ DataExplorerUtils.addDataViewAndTimeSeriesWidget(testView1, dataSet);
+ DataExplorerUtils.saveDataViewConfiguration();
cy.wait(1000);
// Create second test data view with one time series widget
- DataLakeUtils.addDataViewAndTimeSeriesWidget(testView2, dataSet);
- DataLakeUtils.saveDataViewConfiguration();
+ DataExplorerUtils.addDataViewAndTimeSeriesWidget(testView2, dataSet);
+ DataExplorerUtils.saveDataViewConfiguration();
});
it('Perform Test', () => {
@@ -43,10 +43,10 @@ describe('Test if widget configuration is updated
correctly', () => {
const runTestCase = () => {
// Visit settings of widget
- DataLakeUtils.editDataView(testView1);
+ DataExplorerUtils.editDataView(testView1);
// Change first field from line plot to scatter plot
- DataLakeUtils.openVisualizationConfig();
+ DataExplorerUtils.openVisualizationConfig();
// select type scatter
cy.dataCy('time-series-item-config-toggle').first().click();
diff --git a/ui/cypress/tests/datalake/configuration.smoke.spec.ts
b/ui/cypress/tests/dataExplorer/configuration.smoke.spec.ts
similarity index 89%
rename from ui/cypress/tests/datalake/configuration.smoke.spec.ts
rename to ui/cypress/tests/dataExplorer/configuration.smoke.spec.ts
index a8fd3129a6..aae4ddf7f5 100644
--- a/ui/cypress/tests/datalake/configuration.smoke.spec.ts
+++ b/ui/cypress/tests/dataExplorer/configuration.smoke.spec.ts
@@ -17,16 +17,16 @@
*/
import { PipelineUtils } from '../../support/utils/pipeline/PipelineUtils';
-import { DataLakeUtils } from '../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../support/utils/dataExplorer/DataExplorerUtils';
describe('Test Truncate data in datalake', () => {
beforeEach('Setup Test', () => {
cy.initStreamPipesTest();
- DataLakeUtils.loadRandomDataSetIntoDataLake();
+ DataExplorerUtils.loadRandomDataSetIntoDataLake();
});
it('Perform Test', () => {
- DataLakeUtils.goToDatalakeConfiguration();
+ DataExplorerUtils.goToDatalakeConfiguration();
// Check if amount of events is correct
cy.dataCy('datalake-number-of-events', { timeout: 10000 })
@@ -52,12 +52,12 @@ describe('Test Truncate data in datalake', () => {
describe('Delete data in datalake', () => {
before('Setup Test', () => {
cy.initStreamPipesTest();
- DataLakeUtils.loadRandomDataSetIntoDataLake();
+ DataExplorerUtils.loadRandomDataSetIntoDataLake();
PipelineUtils.deletePipeline('Persist prepared_data');
});
it('Perform Test', () => {
- DataLakeUtils.goToDatalakeConfiguration();
+ DataExplorerUtils.goToDatalakeConfiguration();
// Check if amount of events is correct
cy.dataCy('datalake-number-of-events', { timeout: 10000 })
diff --git a/ui/cypress/tests/dataExplorer/dataViewAssets.smoke.spec.ts
b/ui/cypress/tests/dataExplorer/dataViewAssets.smoke.spec.ts
new file mode 100644
index 0000000000..8cf59a59b9
--- /dev/null
+++ b/ui/cypress/tests/dataExplorer/dataViewAssets.smoke.spec.ts
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ */
+
+import { AssetUtils } from '../../support/utils/asset/AssetUtils';
+import { DataExplorerUtils } from
'../../support/utils/dataExplorer/DataExplorerUtils';
+
+describe('Creates a new adapter with a linked asset', () => {
+ const assetName1 = 'TestAsset1';
+ const assetName2 = 'TestAsset2';
+ const assetName3 = 'TestAsset3';
+
+ beforeEach('Setup Test', () => {
+ cy.initStreamPipesTest();
+ AssetUtils.goToAssets();
+ AssetUtils.addAndSaveAsset(assetName3);
+ AssetUtils.addAndSaveAsset(assetName2);
+ AssetUtils.addAndSaveAsset(assetName1);
+ });
+
+ it('Add Assets during Chart generation', () => {
+ DataExplorerUtils.createDataViewWithAssets([assetName1, assetName2]);
+ //Test
+ AssetUtils.checkAmountOfLinkedResourcesByAssetName(assetName1, 1);
+ AssetUtils.checkAmountOfLinkedResourcesByAssetName(assetName2, 1);
+ });
+
+ it('Edit Assets during Chart generation', () => {
+ DataExplorerUtils.createDataViewWithAssets([assetName1, assetName2]);
+ //Test
+ AssetUtils.checkAmountOfLinkedResourcesByAssetName(assetName1, 1);
+ AssetUtils.checkAmountOfLinkedResourcesByAssetName(assetName2, 1);
+
+ // Go To Chart and Edit
+ DataExplorerUtils.goToDatalake();
+ DataExplorerUtils.editDataView('NewWidget');
+ DataExplorerUtils.renameWidget('Rename');
+
+ DataExplorerUtils.saveToAddAssets();
+ DataExplorerUtils.addToAsset([assetName1, assetName3]);
+
+ AssetUtils.checkAmountOfLinkedResourcesByAssetName(assetName2, 1);
+ AssetUtils.checkAmountOfLinkedResourcesByAssetName(assetName3, 1);
+ AssetUtils.checkResourceNamingByAssetName(assetName2, 'Rename');
+ });
+});
diff --git a/ui/cypress/tests/dataExplorer/deleteViewAndDashboard.spec.ts
b/ui/cypress/tests/dataExplorer/deleteViewAndDashboard.spec.ts
new file mode 100644
index 0000000000..8dbef56943
--- /dev/null
+++ b/ui/cypress/tests/dataExplorer/deleteViewAndDashboard.spec.ts
@@ -0,0 +1,76 @@
+/*
+ * 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.
+ *
+ */
+import { DataExplorerUtils } from
'../../support/utils/dataExplorer/DataExplorerUtils';
+
+describe('Test Deletion of Data View and Dashboard', () => {
+ beforeEach('Setup Test', () => {
+ cy.initStreamPipesTest();
+ DataExplorerUtils.loadDataIntoDataLake('datalake/sample.csv');
+ });
+
+ it('Perform Test', () => {
+ const dashboard = 'TestDashboard';
+ const dataView = 'TestView';
+
+ DataExplorerUtils.goToDatalake();
+
+ DataExplorerUtils.addDataViewAndTableWidget(dataView, 'Persist');
+
+ DataExplorerUtils.saveDataViewConfiguration();
+
+ DataExplorerUtils.checkRowsViewsTable(1);
+
+ DataExplorerUtils.goToDashboard();
+
+ DataExplorerUtils.createAndEditDashboard(dashboard);
+
+ DataExplorerUtils.addDataViewToDashboard(dataView, true);
+
+ DataExplorerUtils.saveDashboardConfiguration();
+
+ DataExplorerUtils.checkRowsDashboardTable(1);
+
+ // Click "Delete" but cancel action and check if dashboard and view
are still displayed
+ DataExplorerUtils.cancelDeleteDashboard(dashboard);
+
+ DataExplorerUtils.checkRowsDashboardTable(1);
+
+ DataExplorerUtils.goToDatalake();
+
+ DataExplorerUtils.cancelDeleteDataView(dataView);
+
+ DataExplorerUtils.checkRowsViewsTable(1);
+
+ DataExplorerUtils.deleteDataView(dataView);
+
+ DataExplorerUtils.checkRowsViewsTable(0);
+
+ DataExplorerUtils.goToDashboard();
+
+ DataExplorerUtils.editDashboard(dashboard);
+
+ // Validate that data view is removed from dashboard
+ DataExplorerUtils.getEmptyDashboardInformation().should('be.visible');
+
+ DataExplorerUtils.saveDashboardConfiguration();
+
+ DataExplorerUtils.deleteDashboard(dashboard);
+
+ DataExplorerUtils.checkRowsDashboardTable(0);
+ });
+});
diff --git a/ui/cypress/tests/datalake/filterNumericalStringProperties.spec.ts
b/ui/cypress/tests/dataExplorer/filterNumericalStringProperties.spec.ts
similarity index 71%
rename from ui/cypress/tests/datalake/filterNumericalStringProperties.spec.ts
rename to ui/cypress/tests/dataExplorer/filterNumericalStringProperties.spec.ts
index 40b179a5f3..647f8b0b26 100644
--- a/ui/cypress/tests/datalake/filterNumericalStringProperties.spec.ts
+++ b/ui/cypress/tests/dataExplorer/filterNumericalStringProperties.spec.ts
@@ -16,8 +16,8 @@
*
*/
-import { DataLakeUtils } from '../../support/utils/datalake/DataLakeUtils';
-import { DataLakeWidgetTableUtils } from
'../../support/utils/datalake/DataLakeWidgetTableUtils';
+import { DataExplorerUtils } from
'../../support/utils/dataExplorer/DataExplorerUtils';
+import { DataExplorerWidgetTableUtils } from
'../../support/utils/dataExplorer/DataExplorerWidgetTableUtils';
import { DataLakeFilterConfig } from
'../../support/model/DataLakeFilterConfig';
import { AdapterBuilder } from '../../support/builder/AdapterBuilder';
import { ConnectBtns } from '../../support/utils/connect/ConnectBtns';
@@ -46,46 +46,46 @@ describe('Validate that filter works for numerical
dimension property', () => {
});
it('Perform Test', () => {
- DataLakeUtils.goToDatalake();
- DataLakeUtils.createAndEditDataView();
+ DataExplorerUtils.goToDatalake();
+ DataExplorerUtils.createAndEditDataView();
// create table widget and select time range
const startDate = new Date(1737029442000);
const endDate = new Date(1742220659000);
- DataLakeUtils.clickOrderBy('descending');
+ DataExplorerUtils.clickOrderBy('descending');
- DataLakeUtils.openVisualizationConfig();
- DataLakeUtils.selectVisualizationType(DataExplorerWidget.TABLE);
- DataLakeUtils.selectTimeRange(startDate, endDate);
+ DataExplorerUtils.openVisualizationConfig();
+ DataExplorerUtils.selectVisualizationType(DataExplorerWidget.TABLE);
+ DataExplorerUtils.selectTimeRange(startDate, endDate);
cy.wait(1000);
// validate data in table
- DataLakeWidgetTableUtils.checkAmountOfRows(2);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(2);
// select filter for tag
- DataLakeUtils.selectDataConfig();
+ DataExplorerUtils.selectDataConfig();
var filterConfig = new DataLakeFilterConfig('dimensionKey', '1', '=');
- DataLakeUtils.dataConfigAddFilter(filterConfig);
+ DataExplorerUtils.dataConfigAddFilter(filterConfig);
// validate data in table is filtered
- DataLakeWidgetTableUtils.checkAmountOfRows(1);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(1);
// remove filter
- DataLakeUtils.dataConfigRemoveFilter();
+ DataExplorerUtils.dataConfigRemoveFilter();
- DataLakeUtils.selectDataConfig();
+ DataExplorerUtils.selectDataConfig();
filterConfig = new DataLakeFilterConfig('v1', '20', '=');
- DataLakeUtils.dataConfigAddFilter(filterConfig);
+ DataExplorerUtils.dataConfigAddFilter(filterConfig);
// validate data in table is filtered
- DataLakeWidgetTableUtils.checkAmountOfRows(1);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(1);
// remove filter
- DataLakeUtils.dataConfigRemoveFilter();
+ DataExplorerUtils.dataConfigRemoveFilter();
// validate data again
- DataLakeWidgetTableUtils.checkAmountOfRows(2);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(2);
});
});
diff --git a/ui/cypress/tests/datalake/missingDataInDataLake.spec.ts
b/ui/cypress/tests/dataExplorer/missingDataInDataLake.spec.ts
similarity index 75%
rename from ui/cypress/tests/datalake/missingDataInDataLake.spec.ts
rename to ui/cypress/tests/dataExplorer/missingDataInDataLake.spec.ts
index 77e57710b1..f8327105f4 100644
--- a/ui/cypress/tests/datalake/missingDataInDataLake.spec.ts
+++ b/ui/cypress/tests/dataExplorer/missingDataInDataLake.spec.ts
@@ -16,9 +16,9 @@
*
*/
-import { DataLakeUtils } from '../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../support/utils/dataExplorer/DataExplorerUtils';
import { PrepareTestDataUtils } from
'../../support/utils/PrepareTestDataUtils';
-import { DataLakeWidgetTableUtils } from
'../../support/utils/datalake/DataLakeWidgetTableUtils';
+import { DataExplorerWidgetTableUtils } from
'../../support/utils/dataExplorer/DataExplorerWidgetTableUtils';
describe('Test missing properties in data lake', () => {
const dataViewName = 'TestView';
@@ -32,15 +32,15 @@ describe('Test missing properties in data lake', () => {
});
it('Test table with missing properties', () => {
- DataLakeUtils.addDataViewAndTableWidget(dataViewName, 'Persist');
+ DataExplorerUtils.addDataViewAndTableWidget(dataViewName, 'Persist');
- DataLakeWidgetTableUtils.checkAmountOfRows(5);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(5);
- DataLakeUtils.selectDataConfig();
+ DataExplorerUtils.selectDataConfig();
cy.dataCy('data-explorer-ignore-missing-values-checkbox')
.children()
.click();
- DataLakeWidgetTableUtils.checkAmountOfRows(3);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(3);
});
});
diff --git a/ui/cypress/tests/datalake/timeOrderDataView.spec.ts
b/ui/cypress/tests/dataExplorer/timeOrderDataView.spec.ts
similarity index 72%
rename from ui/cypress/tests/datalake/timeOrderDataView.spec.ts
rename to ui/cypress/tests/dataExplorer/timeOrderDataView.spec.ts
index 2144304754..a02c8a7a8f 100644
--- a/ui/cypress/tests/datalake/timeOrderDataView.spec.ts
+++ b/ui/cypress/tests/dataExplorer/timeOrderDataView.spec.ts
@@ -16,27 +16,27 @@
*
*/
-import { DataLakeUtils } from '../../support/utils/datalake/DataLakeUtils';
-import { DataLakeBtns } from '../../support/utils/datalake/DataLakeBtns';
+import { DataExplorerUtils } from
'../../support/utils/dataExplorer/DataExplorerUtils';
+import { DataLakeBtns } from
'../../support/utils/dataExplorer/DataExplorerBtns';
import { DataExplorerWidget } from '../../support/model/DataExplorerWidget';
describe('Test Time Order in Data Explorer', () => {
beforeEach('Setup Test', () => {
cy.initStreamPipesTest();
- DataLakeUtils.loadDataIntoDataLake('datalake/sample.csv');
- DataLakeUtils.goToDatalake();
- DataLakeUtils.createAndEditDataView();
+ DataExplorerUtils.loadDataIntoDataLake('datalake/sample.csv');
+ DataExplorerUtils.goToDatalake();
+ DataExplorerUtils.createAndEditDataView();
});
it('Perform Test with ascending and descending order', () => {
const startDate = new Date('2022-04-01T00:00:00Z');
const endDate = new Date('2022-07-01T23:59:59Z');
- DataLakeUtils.clickOrderBy('descending');
+ DataExplorerUtils.clickOrderBy('descending');
- DataLakeUtils.openVisualizationConfig();
- DataLakeUtils.selectVisualizationType(DataExplorerWidget.TABLE);
- DataLakeUtils.selectTimeRange(startDate, endDate);
+ DataExplorerUtils.openVisualizationConfig();
+ DataExplorerUtils.selectVisualizationType(DataExplorerWidget.TABLE);
+ DataExplorerUtils.selectTimeRange(startDate, endDate);
cy.wait(1000);
cy.dataCy('data-explorer-table').then($cells => {
@@ -52,12 +52,12 @@ describe('Test Time Order in Data Explorer', () => {
});
// Save and leave view, edit view again and check ascending order
- DataLakeBtns.saveDataViewButton();
+ DataExplorerUtils.saveDataViewConfiguration();
DataLakeBtns.editDataViewButton('New chart');
- DataLakeUtils.clickOrderBy('ascending');
- DataLakeUtils.openVisualizationConfig();
- DataLakeUtils.selectVisualizationType(DataExplorerWidget.TABLE);
- DataLakeUtils.selectTimeRange(startDate, endDate);
+ DataExplorerUtils.clickOrderBy('ascending');
+ DataExplorerUtils.openVisualizationConfig();
+ DataExplorerUtils.selectVisualizationType(DataExplorerWidget.TABLE);
+ DataExplorerUtils.selectTimeRange(startDate, endDate);
cy.wait(1000);
cy.dataCy('data-explorer-table').then($cells => {
@@ -73,7 +73,7 @@ describe('Test Time Order in Data Explorer', () => {
});
// Check if dialog window is showing after applying changes to time
settings
- DataLakeUtils.goToDatalake();
- DataLakeUtils.checkIfConfirmationDialogIsShowing();
+ DataExplorerUtils.goToDatalake();
+ DataExplorerUtils.checkIfConfirmationDialogIsShowing();
});
});
diff --git a/ui/cypress/tests/datalake/timeRangeSelectors.spec.ts
b/ui/cypress/tests/dataExplorer/timeRangeSelectors.spec.ts
similarity index 92%
rename from ui/cypress/tests/datalake/timeRangeSelectors.spec.ts
rename to ui/cypress/tests/dataExplorer/timeRangeSelectors.spec.ts
index 3688e7f789..38de9e38a9 100644
--- a/ui/cypress/tests/datalake/timeRangeSelectors.spec.ts
+++ b/ui/cypress/tests/dataExplorer/timeRangeSelectors.spec.ts
@@ -16,7 +16,7 @@
*
*/
-import { DataLakeUtils } from '../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../support/utils/dataExplorer/DataExplorerUtils';
import {
subDays,
subHours,
@@ -46,20 +46,20 @@ describe('Test Time Range Selectors in Data Explorer', ()
=> {
before('Setup Tests', () => {
cy.initStreamPipesTest();
- DataLakeUtils.loadDataIntoDataLake('datalake/sample.csv');
+ DataExplorerUtils.loadDataIntoDataLake('datalake/sample.csv');
});
it('Perform Test', () => {
- DataLakeUtils.goToDatalake();
- DataLakeUtils.createAndEditDataView();
+ DataExplorerUtils.goToDatalake();
+ DataExplorerUtils.createAndEditDataView();
periods.forEach(period => {
cy.log('Testing period: ' + period.selector);
- DataLakeUtils.openTimeSelectorMenu();
+ DataExplorerUtils.openTimeSelectorMenu();
// Choosing time period and saving initial start and end dates
cy.dataCy(`time-selector-quick-${period.selector}`).click();
const expectedEndDate = new Date();
- DataLakeUtils.openTimeSelectorMenu();
+ DataExplorerUtils.openTimeSelectorMenu();
// check if dates can differ from the selected dates
const expectedStartDate = getExpectedStartDate(
expectedEndDate,
@@ -101,7 +101,7 @@ describe('Test Time Range Selectors in Data Explorer', ()
=> {
).to.be.true;
});
- DataLakeUtils.applyCustomTimeSelection();
+ DataExplorerUtils.applyCustomTimeSelection();
});
});
});
diff --git
a/ui/cypress/tests/dataExplorer/widgetDataConfiguration.smoke.spec.ts
b/ui/cypress/tests/dataExplorer/widgetDataConfiguration.smoke.spec.ts
new file mode 100644
index 0000000000..91ee753bb0
--- /dev/null
+++ b/ui/cypress/tests/dataExplorer/widgetDataConfiguration.smoke.spec.ts
@@ -0,0 +1,119 @@
+/*
+ * 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.
+ *
+ */
+
+import { DataLakeFilterConfig } from
'../../support/model/DataLakeFilterConfig';
+import { DataExplorerUtils } from
'../../support/utils/dataExplorer/DataExplorerUtils';
+import { DataExplorerWidgetTableUtils } from
'../../support/utils/dataExplorer/DataExplorerWidgetTableUtils';
+
+describe('Test Table View in Data Explorer', () => {
+ beforeEach('Setup Test', () => {
+ cy.initStreamPipesTest();
+ DataExplorerUtils.loadDataIntoDataLake('datalake/sample.csv');
+ });
+
+ it('Perform Test', () => {
+ /**
+ * Prepare tests
+ */
+ DataExplorerUtils.addDataViewAndTableWidget('NewWidget', 'Persist');
+
+ // Validate that X lines are available
+ DataExplorerWidgetTableUtils.checkAmountOfRows(10);
+
+ // Go back to data configuration
+ DataExplorerUtils.selectDataConfig();
+
+ /**
+ * Test filter configuration
+ */
+ // Test number
+ let filterConfig = new DataLakeFilterConfig('randomnumber', '22', '=');
+ DataExplorerUtils.dataConfigAddFilter(filterConfig);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(2);
+ DataExplorerUtils.validateFilterOptions([
+ '=',
+ '<',
+ '<=',
+ '>=',
+ '>',
+ '!=',
+ ]);
+ DataExplorerUtils.dataConfigRemoveFilter();
+ DataExplorerWidgetTableUtils.checkAmountOfRows(10);
+
+ // Test number greater then
+ filterConfig = new DataLakeFilterConfig('randomnumber', '50', '>');
+ DataExplorerUtils.dataConfigAddFilter(filterConfig);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(5);
+ DataExplorerUtils.validateFilterOptions([
+ '=',
+ '<',
+ '<=',
+ '>=',
+ '>',
+ '!=',
+ ]);
+ DataExplorerUtils.dataConfigRemoveFilter();
+
+ // Test number smaller then
+ filterConfig = new DataLakeFilterConfig('randomnumber', '50', '<');
+ DataExplorerUtils.dataConfigAddFilter(filterConfig);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(5);
+ DataExplorerUtils.dataConfigRemoveFilter();
+
+ // Test boolean
+ filterConfig = new DataLakeFilterConfig('randombool', 'true', '=');
+ DataExplorerUtils.dataConfigAddFilter(filterConfig);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(6);
+ DataExplorerUtils.validateFilterOptions(['=', '!=']);
+ DataExplorerUtils.validateAutoCompleteOptions(['true', 'false']);
+ DataExplorerUtils.dataConfigRemoveFilter();
+
+ // Test string & if filter is persisted correctly
+ filterConfig = new DataLakeFilterConfig('randomtext', 'a', '=');
+ DataExplorerUtils.checkIfFilterIsSet(0);
+ DataExplorerUtils.dataConfigAddFilter(filterConfig);
+ DataExplorerUtils.checkIfFilterIsSet(1);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(4);
+ DataExplorerUtils.validateFilterOptions(['=', '!=']);
+ DataExplorerUtils.validateAutoCompleteOptions(['a', 'b', 'c']);
+ DataExplorerUtils.saveAndReEditWidget('NewWidget');
+ DataExplorerUtils.checkIfFilterIsSet(1);
+ DataExplorerWidgetTableUtils.checkAmountOfRows(4);
+ DataExplorerUtils.dataConfigRemoveFilter();
+
+ /**
+ * Test groupBy configuration and if it is persisted correctly
+ */
+ cy.wait(1000);
+ DataExplorerUtils.clickGroupBy('randomtext');
+ cy.wait(1000);
+ cy.dataCy('data-explorer-table-row-randomtext', { timeout: 10000 })
+ .last({ timeout: 10000 })
+ .contains('a', { timeout: 10000 });
+ cy.dataCy('data-explorer-table-row-randomtext', { timeout: 10000 })
+ .first({ timeout: 10000 })
+ .contains('c', { timeout: 10000 });
+ DataExplorerWidgetTableUtils.checkAmountOfRows(10);
+ DataExplorerUtils.saveAndReEditWidget('NewWidget');
+ cy.dataCy('data-explorer-group-by-randomtext')
+ .find('input')
+ .should('be.checked');
+ DataExplorerUtils.clickGroupBy('randomtext');
+ });
+});
diff --git a/ui/cypress/tests/datalake/deleteViewAndDashboard.spec.ts
b/ui/cypress/tests/datalake/deleteViewAndDashboard.spec.ts
deleted file mode 100644
index 800b459277..0000000000
--- a/ui/cypress/tests/datalake/deleteViewAndDashboard.spec.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * 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.
- *
- */
-import { DataLakeUtils } from '../../support/utils/datalake/DataLakeUtils';
-
-describe('Test Deletion of Data View and Dashboard', () => {
- beforeEach('Setup Test', () => {
- cy.initStreamPipesTest();
- DataLakeUtils.loadDataIntoDataLake('datalake/sample.csv');
- });
-
- it('Perform Test', () => {
- const dashboard = 'TestDashboard';
- const dataView = 'TestView';
-
- DataLakeUtils.goToDatalake();
-
- DataLakeUtils.addDataViewAndTableWidget(dataView, 'Persist');
-
- DataLakeUtils.saveDataViewConfiguration();
-
- DataLakeUtils.checkRowsViewsTable(1);
-
- DataLakeUtils.goToDashboard();
-
- DataLakeUtils.createAndEditDashboard(dashboard);
-
- DataLakeUtils.addDataViewToDashboard(dataView, true);
-
- DataLakeUtils.saveDashboardConfiguration();
-
- DataLakeUtils.checkRowsDashboardTable(1);
-
- // Click "Delete" but cancel action and check if dashboard and view
are still displayed
- DataLakeUtils.cancelDeleteDashboard(dashboard);
-
- DataLakeUtils.checkRowsDashboardTable(1);
-
- DataLakeUtils.goToDatalake();
-
- DataLakeUtils.cancelDeleteDataView(dataView);
-
- DataLakeUtils.checkRowsViewsTable(1);
-
- DataLakeUtils.deleteDataView(dataView);
-
- DataLakeUtils.checkRowsViewsTable(0);
-
- DataLakeUtils.goToDashboard();
-
- DataLakeUtils.editDashboard(dashboard);
-
- // Validate that data view is removed from dashboard
- DataLakeUtils.getEmptyDashboardInformation().should('be.visible');
-
- DataLakeUtils.saveDashboardConfiguration();
-
- DataLakeUtils.deleteDashboard(dashboard);
-
- DataLakeUtils.checkRowsDashboardTable(0);
- });
-});
diff --git a/ui/cypress/tests/datalake/deleteWidget.ts
b/ui/cypress/tests/datalake/deleteWidget.ts
deleted file mode 100644
index 6c7b2aeadf..0000000000
--- a/ui/cypress/tests/datalake/deleteWidget.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.
- *
- */
-import { DataLakeUtils } from '../../support/utils/datalake/DataLakeUtils';
-
-describe('Test Table View in Data Explorer', () => {
- beforeEach('Setup Test', () => {
- cy.initStreamPipesTest();
- DataLakeUtils.loadDataIntoDataLake('datalake/sample.csv');
- });
-
- it('Perform Test', () => {
- /**
- * Prepare tests
- */
- DataLakeUtils.addDataViewAndTableWidget('TestView', 'Persist');
- DataLakeUtils.saveDataViewConfiguration();
- DataLakeUtils.goToDashboard();
- DataLakeUtils.createAndEditDashboard('TestDashboard');
- DataLakeUtils.addDataViewToDashboard('TestView');
-
- // Check that widget is visible
- cy.dataCy('widget-TestView', { timeout: 10000 }).should('be.visible');
-
- // Activate edit mode
- DataLakeUtils.saveAndReEditDashboard('TestDashboard');
-
- // Delete widget
- DataLakeUtils.removeWidget('TestView');
-
- // Go back to dashboard
- DataLakeUtils.saveAndReEditDashboard('TestDashboard');
-
- // Check that widget is gone
- cy.dataCy('widget-TestView', { timeout: 10000 }).should('not.exist');
-
- DataLakeUtils.goBackToOverview();
-
- DataLakeUtils.checkRowsDashboardTable(1);
-
- // Delete dashboard
- DataLakeUtils.deleteDashboard('TestDashboard');
-
- // Check that dashboard is gone
- DataLakeUtils.checkRowsDashboardTable(0);
- });
-});
diff --git a/ui/cypress/tests/datalake/widgetDataConfiguration.smoke.spec.ts
b/ui/cypress/tests/datalake/widgetDataConfiguration.smoke.spec.ts
deleted file mode 100644
index 3b9eb2f858..0000000000
--- a/ui/cypress/tests/datalake/widgetDataConfiguration.smoke.spec.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * 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.
- *
- */
-
-import { DataLakeFilterConfig } from
'../../support/model/DataLakeFilterConfig';
-import { DataLakeUtils } from '../../support/utils/datalake/DataLakeUtils';
-import { DataLakeWidgetTableUtils } from
'../../support/utils/datalake/DataLakeWidgetTableUtils';
-
-describe('Test Table View in Data Explorer', () => {
- beforeEach('Setup Test', () => {
- cy.initStreamPipesTest();
- DataLakeUtils.loadDataIntoDataLake('datalake/sample.csv');
- });
-
- it('Perform Test', () => {
- /**
- * Prepare tests
- */
- DataLakeUtils.addDataViewAndTableWidget('NewWidget', 'Persist');
-
- // Validate that X lines are available
- DataLakeWidgetTableUtils.checkAmountOfRows(10);
-
- // Go back to data configuration
- DataLakeUtils.selectDataConfig();
-
- /**
- * Test filter configuration
- */
- // Test number
- let filterConfig = new DataLakeFilterConfig('randomnumber', '22', '=');
- DataLakeUtils.dataConfigAddFilter(filterConfig);
- DataLakeWidgetTableUtils.checkAmountOfRows(2);
- DataLakeUtils.validateFilterOptions(['=', '<', '<=', '>=', '>', '!=']);
- DataLakeUtils.dataConfigRemoveFilter();
- DataLakeWidgetTableUtils.checkAmountOfRows(10);
-
- // Test number greater then
- filterConfig = new DataLakeFilterConfig('randomnumber', '50', '>');
- DataLakeUtils.dataConfigAddFilter(filterConfig);
- DataLakeWidgetTableUtils.checkAmountOfRows(5);
- DataLakeUtils.validateFilterOptions(['=', '<', '<=', '>=', '>', '!=']);
- DataLakeUtils.dataConfigRemoveFilter();
-
- // Test number smaller then
- filterConfig = new DataLakeFilterConfig('randomnumber', '50', '<');
- DataLakeUtils.dataConfigAddFilter(filterConfig);
- DataLakeWidgetTableUtils.checkAmountOfRows(5);
- DataLakeUtils.dataConfigRemoveFilter();
-
- // Test boolean
- filterConfig = new DataLakeFilterConfig('randombool', 'true', '=');
- DataLakeUtils.dataConfigAddFilter(filterConfig);
- DataLakeWidgetTableUtils.checkAmountOfRows(6);
- DataLakeUtils.validateFilterOptions(['=', '!=']);
- DataLakeUtils.validateAutoCompleteOptions(['true', 'false']);
- DataLakeUtils.dataConfigRemoveFilter();
-
- // Test string & if filter is persisted correctly
- filterConfig = new DataLakeFilterConfig('randomtext', 'a', '=');
- DataLakeUtils.checkIfFilterIsSet(0);
- DataLakeUtils.dataConfigAddFilter(filterConfig);
- DataLakeUtils.checkIfFilterIsSet(1);
- DataLakeWidgetTableUtils.checkAmountOfRows(4);
- DataLakeUtils.validateFilterOptions(['=', '!=']);
- DataLakeUtils.validateAutoCompleteOptions(['a', 'b', 'c']);
- DataLakeUtils.saveAndReEditWidget('NewWidget');
- DataLakeUtils.checkIfFilterIsSet(1);
- DataLakeWidgetTableUtils.checkAmountOfRows(4);
- DataLakeUtils.dataConfigRemoveFilter();
-
- /**
- * Test groupBy configuration and if it is persisted correctly
- */
- cy.wait(1000);
- DataLakeUtils.clickGroupBy('randomtext');
- cy.wait(1000);
- cy.dataCy('data-explorer-table-row-randomtext', { timeout: 10000 })
- .last({ timeout: 10000 })
- .contains('a', { timeout: 10000 });
- cy.dataCy('data-explorer-table-row-randomtext', { timeout: 10000 })
- .first({ timeout: 10000 })
- .contains('c', { timeout: 10000 });
- DataLakeWidgetTableUtils.checkAmountOfRows(10);
- DataLakeUtils.saveAndReEditWidget('NewWidget');
- cy.dataCy('data-explorer-group-by-randomtext')
- .find('input')
- .should('be.checked');
- DataLakeUtils.clickGroupBy('randomtext');
- });
-});
diff --git
a/ui/cypress/tests/experimental/restartStreamPipes/restartStreamPipes2.ts
b/ui/cypress/tests/experimental/restartStreamPipes/restartStreamPipes2.ts
index c55366f9d3..81bbb8bee2 100644
--- a/ui/cypress/tests/experimental/restartStreamPipes/restartStreamPipes2.ts
+++ b/ui/cypress/tests/experimental/restartStreamPipes/restartStreamPipes2.ts
@@ -17,7 +17,7 @@
*/
import { DashboardUtils } from '../../../support/utils/DashboardUtils';
-import { DataLakeUtils } from '../../../support/utils/datalake/DataLakeUtils';
+import { DataExplorerUtils } from
'../../../support/utils/dataExplorer/DataExplorerUtils';
describe('Validate StreamPipes after restart', () => {
beforeEach('Setup Test', () => {
@@ -26,7 +26,7 @@ describe('Validate StreamPipes after restart', () => {
it('Perform Test', () => {
// Truncate data in db
- DataLakeUtils.goToDatalakeConfiguration();
+ DataExplorerUtils.goToDatalakeConfiguration();
cy.dataCy('datalake-truncate-btn').should('be.visible').click();
cy.dataCy('confirm-truncate-data-btn', { timeout: 10000 })
.should('be.visible')
diff --git
a/ui/src/app/data-explorer/components/chart-view/data-explorer-chart-view.component.ts
b/ui/src/app/data-explorer/components/chart-view/data-explorer-chart-view.component.ts
index 62028c22ef..e86cb7090f 100644
---
a/ui/src/app/data-explorer/components/chart-view/data-explorer-chart-view.component.ts
+++
b/ui/src/app/data-explorer/components/chart-view/data-explorer-chart-view.component.ts
@@ -48,6 +48,7 @@ import { MatDialog } from '@angular/material/dialog';
import { map } from 'rxjs/operators';
import { TranslateService } from '@ngx-translate/core';
import { ResizeEchartsService } from
'../../../data-explorer-shared/services/resize-echarts.service';
+import { AssetDialogComponent } from '../../dialog/asset-dialog.component';
@Component({
selector: 'sp-data-explorer-data-view',
@@ -181,7 +182,23 @@ export class DataExplorerChartViewComponent
this.dataView.elementId !== undefined
? this.dataViewService.updateChart(this.dataView)
: this.dataViewService.saveChart(this.dataView);
- observable.subscribe(() => {
+ observable.subscribe(data => {
+ const dialogRef = this.dialog.open(AssetDialogComponent, {
+ width: '500px',
+ data: {
+ title: this.translateService.instant(
+ 'Do you want to link the chart to an Asset?',
+ ),
+ subtitle: this.translateService.instant(
+ 'Update asset links or close.',
+ ),
+ cancelTitle: this.translateService.instant('Close'),
+ okTitle: this.translateService.instant('Update'),
+ confirmAndCancel: true,
+ editMode: this.editMode,
+ dataInput: data,
+ },
+ });
this.routingService.navigateToDataViewOverview(true);
});
}
diff --git a/ui/src/app/data-explorer/data-explorer.module.ts
b/ui/src/app/data-explorer/data-explorer.module.ts
index 3d152dc565..ac4ab4fe07 100644
--- a/ui/src/app/data-explorer/data-explorer.module.ts
+++ b/ui/src/app/data-explorer/data-explorer.module.ts
@@ -51,7 +51,11 @@ import { NgxEchartsModule } from 'ngx-echarts';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { MatCheckboxModule } from '@angular/material/checkbox';
-import { MatDialogModule } from '@angular/material/dialog';
+import {
+ MatDialogActions,
+ MatDialogContent,
+ MatDialogModule,
+} from '@angular/material/dialog';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatListModule } from '@angular/material/list';
@@ -82,6 +86,7 @@ import { FilterSelectionPanelRowValueAutocompleteComponent }
from './components/
import { DataExplorerSharedModule } from
'../data-explorer-shared/data-explorer-shared.module';
import { AggregateConfigurationComponent } from
'./components/chart-view/designer-panel/data-settings/aggregate-configuration/aggregate-configuration.component';
import { TranslateModule } from '@ngx-translate/core';
+import { AssetDialogComponent } from './dialog/asset-dialog.component';
@NgModule({
imports: [
@@ -89,6 +94,8 @@ import { TranslateModule } from '@ngx-translate/core';
MatCardModule,
MatCheckboxModule,
MatDialogModule,
+ MatDialogContent,
+ MatDialogActions,
MatIconModule,
MatInputModule,
MatListModule,
@@ -173,6 +180,7 @@ import { TranslateModule } from '@ngx-translate/core';
FilterSelectionPanelRowOperationSelectionComponent,
FilterSelectionPanelRowValueInputComponent,
FilterSelectionPanelRowValueAutocompleteComponent,
+ AssetDialogComponent,
],
exports: [],
})
diff --git a/ui/src/app/data-explorer/dialog/asset-dialog.component.html
b/ui/src/app/data-explorer/dialog/asset-dialog.component.html
new file mode 100644
index 0000000000..bab116961a
--- /dev/null
+++ b/ui/src/app/data-explorer/dialog/asset-dialog.component.html
@@ -0,0 +1,69 @@
+<!--
+ ~ 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.
+ ~
+ -->
+
+<div fxFlex="100" fxLayout="column">
+ <mat-dialog-content>
+ <div>
+ <h4>{{ data.title }}</h4>
+ <mat-checkbox
+ [(ngModel)]="addToAssets"
+ color="accent"
+ data-cy="sp-show-chart-asset-checkbox"
+ >
+ Add Pipeline to Assets
+ </mat-checkbox>
+ @if (addToAssets) {
+ <div class="mt-10">
+ <sp-asset-link-configuration
+ [isEdit]="data.editMode"
+ [itemId]="data.dataInput.elementId"
+ (selectedAssetsChange)="onSelectedAssetsChange($event)"
+ (deselectedAssetsChange)="
+ onDeselectedAssetsChange($event)
+ "
+ (originalAssetsEmitter)="
+ onOriginalAssetsEmitted($event)
+ "
+ >
+ </sp-asset-link-configuration>
+ </div>
+ }
+ </div>
+ </mat-dialog-content>
+ <mat-dialog-actions>
+ <div fxFlex="100" fxLayoutAlign="end center" class="footer">
+ <button
+ mat-button
+ (click)="onCancel()"
+ *ngIf="data.confirmAndCancel"
+ data-cy="asset-dialog-cancel-delete"
+ >
+ {{ data.cancelTitle }}
+ </button>
+ <button
+ mat-flat-button
+ color="accent"
+ (click)="saveToAssets()"
+ cdkFocusInitial
+ data-cy="asset-dialog-confirm-delete"
+ >
+ {{ data.okTitle }}
+ </button>
+ </div>
+ </mat-dialog-actions>
+</div>
diff --git a/ui/src/app/data-explorer/dialog/asset-dialog.component.ts
b/ui/src/app/data-explorer/dialog/asset-dialog.component.ts
new file mode 100644
index 0000000000..f48e41b492
--- /dev/null
+++ b/ui/src/app/data-explorer/dialog/asset-dialog.component.ts
@@ -0,0 +1,103 @@
+/*
+ * 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.
+ *
+ */
+
+import {
+ Component,
+ EventEmitter,
+ inject,
+ Inject,
+ Input,
+ Output,
+} from '@angular/core';
+import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
+import {
+ DataExplorerWidgetModel,
+ LinkageData,
+ SpAssetTreeNode,
+} from '@streampipes/platform-services';
+import { AssetSaveService } from '@streampipes/shared-ui';
+
+@Component({
+ selector: 'sp-asset-dialog',
+ templateUrl: './asset-dialog.component.html',
+ standalone: false,
+})
+export class AssetDialogComponent {
+ private assetSaveService = inject(AssetSaveService);
+
+ selectedAssets: SpAssetTreeNode[];
+ deselectedAssets: SpAssetTreeNode[];
+ originalAssets: SpAssetTreeNode[];
+
+ addToAssets = false;
+
+ constructor(
+ public dialogRef: MatDialogRef<AssetDialogComponent>,
+ @Inject(MAT_DIALOG_DATA) public data: any,
+ ) {
+ if (this.data.editMode) {
+ this.addToAssets = true;
+ }
+ }
+
+ onSelectedAssetsChange(updatedAssets: SpAssetTreeNode[]): void {
+ this.selectedAssets = updatedAssets;
+ }
+
+ onDeselectedAssetsChange(updatedAssets: SpAssetTreeNode[]): void {
+ this.deselectedAssets = updatedAssets;
+ }
+
+ onOriginalAssetsEmitted(updatedAssets: SpAssetTreeNode[]): void {
+ this.originalAssets = updatedAssets;
+ }
+
+ saveToAssets(): void {
+ let linkageData: LinkageData[];
+ try {
+ linkageData = this.createLinkageData();
+
+ this.saveAssets(linkageData);
+ } catch (err) {
+ console.error('Error in addToAsset:', err);
+ }
+ }
+ private createLinkageData(): LinkageData[] {
+ return [
+ {
+ type: 'chart',
+ id: this.data.dataInput.elementId,
+ name: this.data.dataInput.baseAppearanceConfig.widgetTitle,
+ },
+ ];
+ }
+
+ private async saveAssets(linkageData: LinkageData[]): Promise<void> {
+ await this.assetSaveService.saveSelectedAssets(
+ this.selectedAssets,
+ linkageData,
+ this.deselectedAssets,
+ this.originalAssets,
+ );
+ this.dialogRef.close(true);
+ }
+
+ onCancel(): void {
+ this.dialogRef.close();
+ }
+}