|
|
|
@ -12,30 +12,27 @@ import { RulesState } from './rules.state'; |
|
|
|
|
|
|
|
import { |
|
|
|
DialogService, |
|
|
|
RuleDto, |
|
|
|
RulesDto, |
|
|
|
RulesService, |
|
|
|
versioned |
|
|
|
} from '@app/shared/internal'; |
|
|
|
|
|
|
|
import { createRule } from '../services/rules.service.spec'; |
|
|
|
|
|
|
|
import { TestValues } from './_test-helpers'; |
|
|
|
|
|
|
|
describe('RulesState', () => { |
|
|
|
const { |
|
|
|
app, |
|
|
|
appsState, |
|
|
|
authService, |
|
|
|
creation, |
|
|
|
creator, |
|
|
|
modified, |
|
|
|
modifier, |
|
|
|
newVersion, |
|
|
|
version |
|
|
|
} = TestValues; |
|
|
|
|
|
|
|
const oldRules = [ |
|
|
|
new RuleDto('id1', creator, creator, creation, creation, version, false, {}, 'trigger1', {}, 'action1'), |
|
|
|
new RuleDto('id2', creator, creator, creation, creation, version, true, {}, 'trigger2', {}, 'action2') |
|
|
|
]; |
|
|
|
const rule1 = createRule(1); |
|
|
|
const rule2 = createRule(2); |
|
|
|
|
|
|
|
const newRule = createRule(3); |
|
|
|
|
|
|
|
let dialogs: IMock<DialogService>; |
|
|
|
let rulesService: IMock<RulesService>; |
|
|
|
@ -45,7 +42,7 @@ describe('RulesState', () => { |
|
|
|
dialogs = Mock.ofType<DialogService>(); |
|
|
|
|
|
|
|
rulesService = Mock.ofType<RulesService>(); |
|
|
|
rulesState = new RulesState(appsState.object, authService.object, dialogs.object, rulesService.object); |
|
|
|
rulesState = new RulesState(appsState.object, dialogs.object, rulesService.object); |
|
|
|
}); |
|
|
|
|
|
|
|
afterEach(() => { |
|
|
|
@ -55,11 +52,11 @@ describe('RulesState', () => { |
|
|
|
describe('Loading', () => { |
|
|
|
it('should load rules', () => { |
|
|
|
rulesService.setup(x => x.getRules(app)) |
|
|
|
.returns(() => of(oldRules)).verifiable(); |
|
|
|
.returns(() => of(new RulesDto(2, [rule1, rule2]))).verifiable(); |
|
|
|
|
|
|
|
rulesState.load().subscribe(); |
|
|
|
|
|
|
|
expect(rulesState.snapshot.rules.values).toEqual(oldRules); |
|
|
|
expect(rulesState.snapshot.rules.values).toEqual([rule1, rule2]); |
|
|
|
expect(rulesState.snapshot.isLoaded).toBeTruthy(); |
|
|
|
|
|
|
|
dialogs.verify(x => x.notifyInfo(It.isAnyString()), Times.never()); |
|
|
|
@ -67,7 +64,7 @@ describe('RulesState', () => { |
|
|
|
|
|
|
|
it('should show notification on load when reload is true', () => { |
|
|
|
rulesService.setup(x => x.getRules(app)) |
|
|
|
.returns(() => of(oldRules)).verifiable(); |
|
|
|
.returns(() => of(new RulesDto(2, [rule1, rule2]))).verifiable(); |
|
|
|
|
|
|
|
rulesState.load(true).subscribe(); |
|
|
|
|
|
|
|
@ -81,89 +78,85 @@ describe('RulesState', () => { |
|
|
|
describe('Updates', () => { |
|
|
|
beforeEach(() => { |
|
|
|
rulesService.setup(x => x.getRules(app)) |
|
|
|
.returns(() => of(oldRules)).verifiable(); |
|
|
|
.returns(() => of(new RulesDto(2, [rule1, rule2]))).verifiable(); |
|
|
|
|
|
|
|
rulesState.load().subscribe(); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should add rule to snapshot when created', () => { |
|
|
|
const newRule = new RuleDto('id3', modifier, modifier, modified, modified, version, true, { value: 3 }, 'trigger3', { value: 1 }, 'action3'); |
|
|
|
|
|
|
|
const request = { trigger: { triggerType: 'trigger3', value: 3 }, action: { actionType: 'action3', value: 1 } }; |
|
|
|
|
|
|
|
rulesService.setup(x => x.postRule(app, request)) |
|
|
|
.returns(() => of(versioned(version, { id: 'id3' }))); |
|
|
|
.returns(() => of(newRule)); |
|
|
|
|
|
|
|
rulesState.create(request, modified).subscribe(); |
|
|
|
rulesState.create(request).subscribe(); |
|
|
|
|
|
|
|
expect(rulesState.snapshot.rules.values).toEqual([...oldRules, newRule]); |
|
|
|
expect(rulesState.snapshot.rules.values).toEqual([rule1, rule2, newRule]); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should update action and update and user info when updated action', () => { |
|
|
|
it('should update rule when updated action', () => { |
|
|
|
const newAction = {}; |
|
|
|
|
|
|
|
rulesService.setup(x => x.putRule(app, oldRules[0].id, It.isAny(), version)) |
|
|
|
.returns(() => of(versioned(newVersion))).verifiable(); |
|
|
|
const updated = createRule(1, 'new'); |
|
|
|
|
|
|
|
rulesService.setup(x => x.putRule(app, rule1, It.isAny(), version)) |
|
|
|
.returns(() => of(updated)).verifiable(); |
|
|
|
|
|
|
|
rulesState.updateAction(oldRules[0], newAction, modified).subscribe(); |
|
|
|
rulesState.updateAction(rule1, newAction).subscribe(); |
|
|
|
|
|
|
|
const rule_1 = rulesState.snapshot.rules.at(0); |
|
|
|
const newRule1 = rulesState.snapshot.rules.at(0); |
|
|
|
|
|
|
|
expect(rule_1.action).toBe(newAction); |
|
|
|
expectToBeModified(rule_1); |
|
|
|
expect(newRule1).toEqual(updated); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should update trigger and update and user info when updated trigger', () => { |
|
|
|
it('should update rule when updated trigger', () => { |
|
|
|
const newTrigger = {}; |
|
|
|
|
|
|
|
rulesService.setup(x => x.putRule(app, oldRules[0].id, It.isAny(), version)) |
|
|
|
.returns(() => of(versioned(newVersion))).verifiable(); |
|
|
|
const updated = createRule(1, 'new'); |
|
|
|
|
|
|
|
rulesState.updateTrigger(oldRules[0], newTrigger, modified).subscribe(); |
|
|
|
rulesService.setup(x => x.putRule(app, rule1, It.isAny(), version)) |
|
|
|
.returns(() => of(updated)).verifiable(); |
|
|
|
|
|
|
|
const rule_1 = rulesState.snapshot.rules.at(0); |
|
|
|
rulesState.updateTrigger(rule1, newTrigger).subscribe(); |
|
|
|
|
|
|
|
expect(rule_1.trigger).toBe(newTrigger); |
|
|
|
expectToBeModified(rule_1); |
|
|
|
const rule1New = rulesState.snapshot.rules.at(0); |
|
|
|
|
|
|
|
expect(rule1New).toEqual(updated); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should mark as enabled and update and user info when enabled', () => { |
|
|
|
rulesService.setup(x => x.enableRule(app, oldRules[0].id, version)) |
|
|
|
.returns(() => of(versioned(newVersion))).verifiable(); |
|
|
|
it('should update rule when enabled', () => { |
|
|
|
const updated = createRule(1, 'new'); |
|
|
|
|
|
|
|
rulesService.setup(x => x.enableRule(app, rule1, version)) |
|
|
|
.returns(() => of(updated)).verifiable(); |
|
|
|
|
|
|
|
rulesState.enable(oldRules[0], modified).subscribe(); |
|
|
|
rulesState.enable(rule1).subscribe(); |
|
|
|
|
|
|
|
const rule_1 = rulesState.snapshot.rules.at(0); |
|
|
|
const rule1New = rulesState.snapshot.rules.at(0); |
|
|
|
|
|
|
|
expect(rule_1.isEnabled).toBeTruthy(); |
|
|
|
expectToBeModified(rule_1); |
|
|
|
expect(rule1New).toEqual(updated); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should mark as disabled and update and user info when disabled', () => { |
|
|
|
rulesService.setup(x => x.disableRule(app, oldRules[1].id, version)) |
|
|
|
.returns(() => of(versioned(newVersion))).verifiable(); |
|
|
|
it('should update rule when disabled', () => { |
|
|
|
const updated = createRule(1, 'new'); |
|
|
|
|
|
|
|
rulesService.setup(x => x.disableRule(app, rule1, version)) |
|
|
|
.returns(() => of(updated)).verifiable(); |
|
|
|
|
|
|
|
rulesState.disable(oldRules[1], modified).subscribe(); |
|
|
|
rulesState.disable(rule1).subscribe(); |
|
|
|
|
|
|
|
const rule_1 = rulesState.snapshot.rules.at(1); |
|
|
|
const rule1New = rulesState.snapshot.rules.at(0); |
|
|
|
|
|
|
|
expect(rule_1.isEnabled).toBeFalsy(); |
|
|
|
expectToBeModified(rule_1); |
|
|
|
expect(rule1New).toEqual(updated); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should remove rule from snapshot when deleted', () => { |
|
|
|
rulesService.setup(x => x.deleteRule(app, oldRules[0].id, version)) |
|
|
|
rulesService.setup(x => x.deleteRule(app, rule1, version)) |
|
|
|
.returns(() => of(versioned(newVersion))).verifiable(); |
|
|
|
|
|
|
|
rulesState.delete(oldRules[0]).subscribe(); |
|
|
|
rulesState.delete(rule1).subscribe(); |
|
|
|
|
|
|
|
expect(rulesState.snapshot.rules.values).toEqual([oldRules[1]]); |
|
|
|
expect(rulesState.snapshot.rules.values).toEqual([rule2]); |
|
|
|
}); |
|
|
|
|
|
|
|
function expectToBeModified(rule_1: RuleDto) { |
|
|
|
expect(rule_1.lastModified).toEqual(modified); |
|
|
|
expect(rule_1.lastModifiedBy).toEqual(modifier); |
|
|
|
expect(rule_1.version).toEqual(newVersion); |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |