Skip to content

Commit

Permalink
implement unit tests for enhanced adapter deletion
Browse files Browse the repository at this point in the history
  • Loading branch information
muyangye committed Nov 17, 2023
1 parent 2171682 commit bb22eeb
Show file tree
Hide file tree
Showing 4 changed files with 166 additions and 11 deletions.
17 changes: 14 additions & 3 deletions ui/cypress/support/utils/UserUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,15 @@ export class UserUtils {
.addRole(UserRole.ROLE_ADMIN)
.build();

public static adapterAndPipelineAdminUser = UserBuilder.create(
'[email protected]',
)
.setName('anpadmin')
.setPassword('anpadmin')
.addRole(UserRole.ROLE_PIPELINE_ADMIN)
.addRole(UserRole.ROLE_CONNECT_ADMIN)
.build();

public static goToUserConfiguration() {
cy.visit('#/configuration/security');
}
Expand All @@ -42,9 +51,11 @@ export class UserUtils {
cy.dataCy('new-user-password-repeat').type(user.password);

// Set role
cy.dataCy('role-' + user.role[0])
.children()
.click();
for (var i = 0; i < user.role.length; i++) {
cy.dataCy('role-' + user.role[i])
.children()
.click();
}
cy.dataCy('new-user-enabled').children().click();

// Store
Expand Down
96 changes: 93 additions & 3 deletions ui/cypress/support/utils/connect/ConnectUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import { ConnectEventSchemaUtils } from '../ConnectEventSchemaUtils';
import { DataLakeUtils } from '../datalake/DataLakeUtils';
import { ConnectBtns } from './ConnectBtns';
import { AdapterBuilder } from '../../builder/AdapterBuilder';
import { UserUtils } from '../UserUtils';
import { PipelineUtils } from '../PipelineUtils';

export class ConnectUtils {
public static testAdapter(adapterConfiguration: AdapterInput) {
Expand Down Expand Up @@ -193,11 +195,10 @@ export class ConnectUtils {

public static deleteAdapter() {
// Delete adapter
cy.visit('#/connect');
this.goToConnect();

cy.dataCy('delete-adapter').should('have.length', 1);
cy.dataCy('delete-adapter').click();
cy.dataCy('delete-adapter-confirmation').click();
this.clickDelete();
cy.dataCy('adapter-deletion-in-progress', { timeout: 10000 }).should(
'be.visible',
);
Expand All @@ -207,6 +208,95 @@ export class ConnectUtils {
);
}

public static deleteAdapterAndAssociatedPipelines(switchUserCheck = false) {
// Delete adapter and associated pipelines
this.goToConnect();
cy.dataCy('delete-adapter').should('have.length', 1);
this.clickDelete();
cy.dataCy('delete-adapter-and-associated-pipelines-confirmation', {
timeout: 10000,
}).should('be.visible');
cy.dataCy(
'delete-adapter-and-associated-pipelines-confirmation',
).click();
cy.dataCy('adapter-deletion-in-progress', { timeout: 10000 }).should(
'be.visible',
);
if (switchUserCheck) {
cy.switchUser(UserUtils.adapterAndPipelineAdminUser);
}
this.checkAdapterAndAssociatedPipelinesDeleted();
}

public static deleteAdapterAndAssociatedPipelinesPermissionDenied() {
// Associated pipelines not owned by the user (unless admin) should not be deleted during adapter deletion
this.goToConnect();
cy.dataCy('delete-adapter').should('have.length', 1);
this.clickDelete();
cy.dataCy('delete-adapter-and-associated-pipelines-confirmation', {
timeout: 10000,
}).should('be.visible');
cy.dataCy(
'delete-adapter-and-associated-pipelines-confirmation',
).click();
cy.dataCy('adapter-deletion-permission-denied', {
timeout: 10000,
}).should('be.visible');
cy.get('.sp-dialog-actions').click();
this.checkAdapterNotDeleted();

// Switch back to admin to clean up
cy.switchUser(UserUtils.adminUser);
this.goToConnect();
cy.dataCy('delete-adapter', { timeout: 10000 }).should(
'have.length',
1,
);
this.clickDelete();
cy.dataCy('delete-adapter-and-associated-pipelines-confirmation', {
timeout: 10000,
}).should('be.visible');
cy.dataCy(
'delete-adapter-and-associated-pipelines-confirmation',
).click();
cy.dataCy('adapter-deletion-in-progress', { timeout: 10000 }).should(
'be.visible',
);
this.checkAdapterAndAssociatedPipelinesDeleted();
UserUtils.deleteUser(UserUtils.adapterAndPipelineAdminUser);
// Verify that the user is removed
cy.dataCy('user-accounts-table-row', { timeout: 10000 }).should(
'have.length',
1,
);
}

private static clickDelete() {
cy.dataCy('delete-adapter').click();
cy.dataCy('delete-adapter-confirmation').click();
}

private static checkAdapterNotDeleted() {
this.goToConnect();
cy.dataCy('delete-adapter', { timeout: 20000 }).should(
'have.length',
1,
);
}

private static checkAdapterAndAssociatedPipelinesDeleted() {
this.goToConnect();
cy.dataCy('delete-adapter', { timeout: 20000 }).should(
'have.length',
0,
);
PipelineUtils.goToPipelines();
cy.dataCy('delete-pipeline', { timeout: 10000 }).should(
'have.length',
0,
);
}

public static setUpPreprocessingRuleTest(): AdapterInput {
const adapterConfiguration = AdapterBuilder.create('File_Stream')
.setStoreInDataLake()
Expand Down
63 changes: 58 additions & 5 deletions ui/cypress/tests/adapter/machineDataSimulator.smoke.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,72 @@

import { ConnectUtils } from '../../support/utils/connect/ConnectUtils';
import { AdapterBuilder } from '../../support/builder/AdapterBuilder';
import { PipelineBuilder } from '../../support/builder/PipelineBuilder';
import { PipelineElementBuilder } from '../../support/builder/PipelineElementBuilder';
import { PipelineUtils } from '../../support/utils/PipelineUtils';
import { UserUtils } from '../../support/utils/UserUtils';

const adapterName = 'simulator';

describe('Test Machine Data Simulator Adapter', () => {
beforeEach('Setup Test', () => {
cy.initStreamPipesTest();
});

it('Perform Test', () => {
const adapterInput = AdapterBuilder.create('Machine_Data_Simulator')
.setName('Machine Data Simulator Test')
.addInput('input', 'wait-time-ms', '1000')
.build();
const adapterInput = AdapterBuilder.create('Machine_Data_Simulator')
.setName(adapterName)
.addInput('input', 'wait-time-ms', '1000')
.build();

it('Test Basic Delete Adapter', () => {
ConnectUtils.testAdapter(adapterInput);
ConnectUtils.deleteAdapter();
});

const pipelineInput = PipelineBuilder.create('Pipeline Test')
.addSource(adapterName)
.addProcessingElement(
PipelineElementBuilder.create('field_renamer')
.addInput('drop-down', 'convert-property', 'timestamp')
.addInput('input', 'field-name', 't')
.build(),
)
.addSink(
PipelineElementBuilder.create('data_lake')
.addInput('input', 'db_measurement', 'demo')
.build(),
)
.build();

it('Test Delete Adapter and Associated Pipelines', () => {
UserUtils.addUser(UserUtils.adapterAndPipelineAdminUser);
cy.switchUser(UserUtils.adapterAndPipelineAdminUser);
ConnectUtils.testAdapter(adapterInput);
PipelineUtils.addPipeline(pipelineInput);
PipelineUtils.addPipeline(pipelineInput);
ConnectUtils.deleteAdapterAndAssociatedPipelines();
});

it('Test Admin Should Be Able to Delete Adapter and Not Owned Associated Pipelines', () => {
// Let the user create the adapter and the pipeline
// For some reason, I have to first go to a page before switching user
UserUtils.goToUserConfiguration();
cy.switchUser(UserUtils.adapterAndPipelineAdminUser);
ConnectUtils.testAdapter(adapterInput);
PipelineUtils.addPipeline(pipelineInput);
PipelineUtils.addPipeline(pipelineInput);
// Then let the admin delete them
cy.switchUser(UserUtils.adminUser);
ConnectUtils.deleteAdapterAndAssociatedPipelines(true);
});

it('Test Delete Adapter and Associated Pipelines Permission Denied', () => {
// Let the admin create the adapter and the pipeline
ConnectUtils.testAdapter(adapterInput);
PipelineUtils.addPipeline(pipelineInput);
PipelineUtils.addPipeline(pipelineInput);
// Then the user shouldn't be able to delete them
cy.switchUser(UserUtils.adapterAndPipelineAdminUser);
ConnectUtils.deleteAdapterAndAssociatedPipelinesPermissionDenied();
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ <h4>
fxLayoutAlign="center center"
fxLayout="column"
style="width: 100%"
data-cy="adapter-deletion-permission-denied"
>
<b>
<h4>
Expand Down

0 comments on commit bb22eeb

Please sign in to comment.