mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-05-12 17:04:46 +00:00
[ACS-3886] Fix edit button being disabled when opening edit rule dialog initially (#2754)
* [ACS-3886] Fix edit button being disabled when opening edit rule dialog initially * Fix test
This commit is contained in:
parent
423ab7e2d2
commit
2b12fa983c
@ -25,11 +25,11 @@
|
|||||||
|
|
||||||
export interface RuleAction {
|
export interface RuleAction {
|
||||||
actionDefinitionId: string;
|
actionDefinitionId: string;
|
||||||
params: { [key: string]: unknown };
|
params?: { [key: string]: unknown };
|
||||||
}
|
}
|
||||||
|
|
||||||
export const isRuleAction = (obj): obj is RuleAction =>
|
export const isRuleAction = (obj): obj is RuleAction =>
|
||||||
typeof obj === 'object' && typeof obj.actionDefinitionId === 'string' && typeof obj.params === 'object';
|
typeof obj === 'object' && typeof obj.actionDefinitionId === 'string' && (obj.params === undefined || typeof obj.params === 'object');
|
||||||
export const isRuleActions = (obj): obj is RuleAction[] =>
|
export const isRuleActions = (obj): obj is RuleAction[] =>
|
||||||
typeof obj === 'object' && obj instanceof Array && obj.reduce((acc, curr) => acc && isRuleAction(curr), true);
|
typeof obj === 'object' && obj instanceof Array && obj.reduce((acc, curr) => acc && isRuleAction(curr), true);
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
[aspects]="aspects$ | async"
|
[aspects]="aspects$ | async"
|
||||||
[value]="model"
|
[value]="model"
|
||||||
(formValueChanged)="formValue = $event"
|
(formValueChanged)="formValue = $event"
|
||||||
(formValidationChanged)="formValid = $event">
|
(formValidationChanged)="onFormValidChange($event)">
|
||||||
</aca-rule-details>
|
</aca-rule-details>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</mat-dialog-content>
|
</mat-dialog-content>
|
||||||
|
@ -35,8 +35,9 @@ import { RuleActionListUiComponent } from './actions/rule-action-list.ui-compone
|
|||||||
import { RuleActionUiComponent } from './actions/rule-action.ui-component';
|
import { RuleActionUiComponent } from './actions/rule-action.ui-component';
|
||||||
import { ActionsService } from '../services/actions.service';
|
import { ActionsService } from '../services/actions.service';
|
||||||
import { RuleOptionsUiComponent } from './options/rule-options.ui-component';
|
import { RuleOptionsUiComponent } from './options/rule-options.ui-component';
|
||||||
|
import { timer } from 'rxjs';
|
||||||
|
|
||||||
describe('EditRuleDialogComponent', () => {
|
describe('EditRuleDialogSmartComponent', () => {
|
||||||
let fixture: ComponentFixture<EditRuleDialogSmartComponent>;
|
let fixture: ComponentFixture<EditRuleDialogSmartComponent>;
|
||||||
let actionsService: ActionsService;
|
let actionsService: ActionsService;
|
||||||
|
|
||||||
@ -65,6 +66,7 @@ describe('EditRuleDialogComponent', () => {
|
|||||||
|
|
||||||
actionsService = TestBed.inject(ActionsService);
|
actionsService = TestBed.inject(ActionsService);
|
||||||
spyOn(actionsService, 'loadActionDefinitions').and.stub();
|
spyOn(actionsService, 'loadActionDefinitions').and.stub();
|
||||||
|
spyOn(actionsService, 'loadAspects').and.stub();
|
||||||
|
|
||||||
fixture = TestBed.createComponent(EditRuleDialogSmartComponent);
|
fixture = TestBed.createComponent(EditRuleDialogSmartComponent);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
@ -75,15 +77,20 @@ describe('EditRuleDialogComponent', () => {
|
|||||||
setupBeforeEach();
|
setupBeforeEach();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should activate the submit button only when a valid state is received', () => {
|
it('should activate the submit button only when a valid state is received', async () => {
|
||||||
const submitButton = fixture.debugElement.query(By.css('[data-automation-id="edit-rule-dialog-submit"]')).nativeElement as HTMLButtonElement;
|
const submitButton = fixture.debugElement.query(By.css('[data-automation-id="edit-rule-dialog-submit"]')).nativeElement as HTMLButtonElement;
|
||||||
const ruleDetails = fixture.debugElement.query(By.directive(RuleDetailsUiComponent)).componentInstance as RuleDetailsUiComponent;
|
const ruleDetails = fixture.debugElement.query(By.directive(RuleDetailsUiComponent)).componentInstance as RuleDetailsUiComponent;
|
||||||
ruleDetails.formValidationChanged.emit(true);
|
ruleDetails.formValidationChanged.emit(true);
|
||||||
|
|
||||||
|
fixture.detectChanges();
|
||||||
|
// timer needed to wait for the next tick to avoid ExpressionChangedAfterItHasBeenCheckedError
|
||||||
|
await timer(1).toPromise();
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
expect(submitButton.disabled).toBeFalsy();
|
expect(submitButton.disabled).toBeFalsy();
|
||||||
ruleDetails.formValidationChanged.emit(false);
|
ruleDetails.formValidationChanged.emit(false);
|
||||||
|
|
||||||
|
fixture.detectChanges();
|
||||||
|
await timer(1).toPromise();
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
expect(submitButton.disabled).toBeTruthy();
|
expect(submitButton.disabled).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
@ -72,4 +72,11 @@ export class EditRuleDialogSmartComponent implements OnInit {
|
|||||||
this.actionsService.loadAspects();
|
this.actionsService.loadAspects();
|
||||||
this.actionsService.loadActionDefinitions();
|
this.actionsService.loadActionDefinitions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onFormValidChange(isValid: boolean) {
|
||||||
|
// setTimeout needed to avoid ExpressionChangedAfterItHasBeenCheckedError
|
||||||
|
setTimeout(() => {
|
||||||
|
this.formValid = isValid;
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user