forked from eclipsesource/jsonforms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdata.service.test.ts
101 lines (100 loc) · 3.87 KB
/
data.service.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import { test } from 'ava';
import { DataChangeListener, DataService } from '../src/core/data.service';
import { ControlElement } from '../src/models/uischema';
test('getValue returns data referenced by control', t => {
const data = {foo: {bar: 'John Doe'}};
const dataService = new DataService(data);
const value = dataService.getValue({scope: {$ref: '#/properties/foo/properties/bar'}});
t.is(value, 'John Doe');
});
test('getValue returns root data value', t => {
const data = {foo: {bar: 'John Doe'}};
const dataService = new DataService(data);
const value = dataService.getValue({scope: {$ref: '#'}});
t.is(value, data);
});
test('notifyAboutDataChange updates data ', t => {
const data = {foo: {bar: 'John Doe'}};
const dataService = new DataService(data);
const controlElement: ControlElement = {
type: 'Control',
scope: {
$ref: '#/properties/foo/properties/bar'
}
};
dataService.notifyAboutDataChange(controlElement, 'Jane');
const value = dataService.getValue(controlElement);
t.is(value, 'Jane');
});
test('Registered data change listeners are called on init', t => {
t.plan(1);
const dataService = new DataService({});
const listener1: DataChangeListener = {
needsNotificationAbout: (uischema: ControlElement): boolean => true,
dataChanged: (uischema: ControlElement, newValue: any, fullData: any): void => t.pass()
};
dataService.registerDataChangeListener(listener1);
const listener2: DataChangeListener = {
needsNotificationAbout: (uischema: ControlElement): boolean => false,
dataChanged: (uischema: ControlElement, newValue: any, fullData: any): void => t.fail()
};
dataService.registerDataChangeListener(listener2);
dataService.initDataChangeListeners();
});
test('De-registered data change listeners are not called on init', t => {
t.plan(0);
const dataService = new DataService({});
const listener: DataChangeListener = {
needsNotificationAbout: (uischema: ControlElement): boolean => true,
dataChanged: (uischema: ControlElement, newValue: any, fullData: any): void => t.fail()
};
dataService.registerDataChangeListener(listener);
dataService.deregisterDataChangeListener(listener);
dataService.initDataChangeListeners();
});
test('Registered data change listeners are called when notified', t => {
t.plan(3);
const data = {foo: {bar: 'John Doe'}};
const dataService = new DataService(data);
const controlElement: ControlElement = {
type: 'Control',
scope: {
$ref: '#/properties/foo/properties/bar'
}
};
const listener1: DataChangeListener = {
needsNotificationAbout: (uischema: ControlElement): boolean => true,
dataChanged: (uischema: ControlElement, newValue: any, fullData: any): void => {
t.is(uischema, controlElement);
t.is(newValue, 'Jane');
t.is(fullData, data);
}
};
dataService.registerDataChangeListener(listener1);
const listener2: DataChangeListener = {
needsNotificationAbout: (uischema: ControlElement): boolean => false,
dataChanged: (uischema: ControlElement, newValue: any, fullData: any): void => {
t.fail();
}
};
dataService.registerDataChangeListener(listener2);
dataService.notifyAboutDataChange(controlElement, 'Jane');
});
test('De-registered data change listeners are not called when notified', t => {
t.plan(0);
const data = {foo: {bar: 'John Doe'}};
const dataService = new DataService(data);
const controlElement: ControlElement = {
type: 'Control',
scope: {$ref: '#/properties/foo/properties/bar'}
};
const listener: DataChangeListener = {
needsNotificationAbout: (uischema: ControlElement): boolean => true,
dataChanged: (uischema: ControlElement, newValue: any, fullData: any): void => {
t.fail();
}
};
dataService.registerDataChangeListener(listener);
dataService.deregisterDataChangeListener(listener);
dataService.notifyAboutDataChange(controlElement, 'Jane');
});