Fix reules event filtering when no form is provided (#7592)

This commit is contained in:
Pablo Martinez Garcia 2022-04-22 13:04:49 +02:00 committed by GitHub
parent 039f167b75
commit 6174f8e100
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 7 deletions

View File

@ -26,6 +26,7 @@ import { FormModel } from '../components/widgets/core/form.model';
import { FormRulesEvent } from '../events/form-rules.event';
import { FormEvent } from '../events/form.event';
import { FormService } from '../services/form.service';
import { getTestScheduler } from 'jasmine-marbles';
class CustomRuleManager extends FormRulesManager<any> {
protected getRules() {
@ -76,20 +77,36 @@ describe('Form Rules', () => {
expect(customRuleManager.initialize).toHaveBeenCalled();
});
it('should send the form loaded event when initialized', async (done) => {
it('should send the form loaded event when initialized', () => {
const rulesManager = new CustomRuleManager(formService);
const getRulesSpy = spyOn<any>(rulesManager, 'getRules').and.returnValue({});
const handleRuleEventSpy = spyOn<any>(rulesManager, 'handleRuleEvent');
const formModel = new FormModel({ id: 'mock' }, {}, false);
const formEvent = new FormEvent(formModel);
const event = new FormRulesEvent('formLoaded', formEvent);
formService.formRulesEvent.subscribe(formRulesEvent => {
expect(formRulesEvent).toEqual(event);
done();
});
rulesManager.initialize(formModel);
getTestScheduler().flush();
expect(getRulesSpy).toHaveBeenCalled();
expect(handleRuleEventSpy).toHaveBeenCalledWith(event, {});
});
it('should not receive the form event when event has no form', () => {
const rulesManager = new CustomRuleManager(formService);
spyOn<any>(rulesManager, 'getRules').and.returnValue({});
const handleRuleEventSpy = spyOn<any>(rulesManager, 'handleRuleEvent');
const formModel = new FormModel({ id: 'mock' }, {}, false);
const formEvent = new FormEvent(new FormModel(null));
const event = new FormRulesEvent('formLoaded', formEvent);
rulesManager.initialize(formModel);
expect(getRulesSpy).toHaveBeenCalled();
formService.formRulesEvent.next(event);
getTestScheduler().flush();
expect(handleRuleEventSpy).not.toHaveBeenCalledWith(event, jasmine.anything());
});
});

View File

@ -53,7 +53,7 @@ export abstract class FormRulesManager<T> {
if (!!rules) {
this.formService.formRulesEvent
.pipe(
filter(event => !!event.form.id && event.form.id === formModel?.id),
filter(event => !!event?.form?.id && event.form.id === formModel?.id),
takeUntil(this.onDestroy$)
).subscribe(event => {
this.handleRuleEvent(event, rules);