Skip to content

Commit 738ba28

Browse files
feat(systems): Add acceptance tests for systems data source (#710)
Co-authored-by: Robert Aradei <sorin.robert.aradei@emerson.com>
1 parent 38c22c9 commit 738ba28

34 files changed

+1105
-249
lines changed

acceptance-tests/constants/asset-list-properties.constant.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,3 @@ export const nonDefaultAssetListProperties = [
5858
assetColumn.calibration_status,
5959
assetColumn.scan_code
6060
];
61-
62-
export const timeOutPeriod = 10000;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const timeOutPeriod = 10000;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export enum systemsColumn {
2+
id = 'id',
3+
alias = 'alias',
4+
connection_status = 'connection status',
5+
locked_status = 'locked status',
6+
system_start_time = 'system start time',
7+
model = 'model',
8+
vendor = 'vendor',
9+
operating_system = 'operating system',
10+
ip_address = 'ip address',
11+
workspace = 'workspace',
12+
scan_code = 'scan code',
13+
}
Lines changed: 170 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,172 @@
11
export const data = [
2-
{ alias: 'System-1', id: 'SYSTEM-1' },
3-
{ alias: 'System-2', id: 'SYSTEM-2' },
4-
{ alias: 'System-3', id: 'SYSTEM-3' }
2+
{
3+
alias: 'System-1',
4+
id: 'SYSTEM-1',
5+
state: "CONNECTED",
6+
locked: false,
7+
systemStartTime: "2025-12-18T16:59:31.000Z",
8+
model: "Model1",
9+
vendor: "Vendor1",
10+
osFullName: "OS1",
11+
ip4Interfaces: {
12+
"IP1": [
13+
"172.10.1.37"
14+
],
15+
},
16+
workspace: "default-workspace",
17+
scanCode: "scanCode1",
18+
},
19+
{
20+
alias: 'System-2',
21+
id: 'SYSTEM-2',
22+
state: "DISCONNECTED",
23+
locked: false,
24+
systemStartTime: "2025-01-8T16:59:31.000Z",
25+
model: "Model2",
26+
vendor: "Vendor2",
27+
osFullName: "OS2",
28+
ip4Interfaces: {
29+
"IP2": [
30+
"10.5.136.55"
31+
]
32+
},
33+
workspace: "default-workspace",
34+
scanCode: "scanCode2",
35+
},
36+
{
37+
alias: 'System-3',
38+
id: 'SYSTEM-3',
39+
state: "APPROVED",
40+
locked: false,
41+
systemStartTime: "2025-11-18T16:59:31.000Z",
42+
model: "Model3",
43+
vendor: "Vendor3",
44+
osFullName: "OS3",
45+
ip4Interfaces: {
46+
"IP3": [
47+
"10.5.136.44"
48+
]
49+
},
50+
workspace: "default-workspace",
51+
scanCode: "scanCode3",
52+
},
53+
{
54+
alias: 'System-4',
55+
id: 'SYSTEM-4',
56+
state: "DISCONNECTED",
57+
locked: false,
58+
systemStartTime: "2025-08-18T16:59:31.000Z",
59+
model: "Model4",
60+
vendor: "Vendor4",
61+
osFullName: "OS4",
62+
ip4Interfaces: {
63+
"IP4": [
64+
"10.8.127.44"
65+
]
66+
},
67+
workspace: "default-workspace",
68+
scanCode: "scanCode4",
69+
},
70+
{
71+
alias: 'System-5',
72+
id: 'SYSTEM-5',
73+
state: "ACTIVATED_WITHOUT_CONNECTION",
74+
locked: false,
75+
systemStartTime: "2025-03-18T16:59:31.000Z",
76+
model: "Model5",
77+
vendor: "Vendor5",
78+
osFullName: "OS5",
79+
ip4Interfaces: {
80+
"IP5": [
81+
"127.6.0.1"
82+
]
83+
},
84+
workspace: "workspace-2",
85+
scanCode: "scanCode5",
86+
},
87+
{
88+
alias: 'System-6',
89+
id: 'SYSTEM-6',
90+
state: "CONNECTED",
91+
locked: true,
92+
systemStartTime: "2025-06-21T16:59:31.000Z",
93+
model: "Model6",
94+
vendor: "Vendor6",
95+
osFullName: "OS6",
96+
ip4Interfaces: {
97+
"IP6": [
98+
"10.6.0.1"
99+
]
100+
},
101+
workspace: "default-workspace",
102+
scanCode: "scanCode6",
103+
},
104+
{
105+
alias: 'System-7',
106+
id: 'SYSTEM-7',
107+
state: "VIRTUAL",
108+
locked: false,
109+
systemStartTime: "2025-06-1T16:59:31.000Z",
110+
model: "Model7",
111+
vendor: "Vendor7",
112+
osFullName: "OS7",
113+
ip4Interfaces: {
114+
"IP7": [
115+
"10.6.0.1"
116+
]
117+
},
118+
workspace: "workspace-2",
119+
scanCode: "scanCode7",
120+
},
121+
{
122+
alias: 'System-8',
123+
id: 'SYSTEM-8',
124+
state: "CONNECTED_REFRESH_PENDING",
125+
locked: false,
126+
systemStartTime: "2026-01-21T16:59:31.000Z",
127+
model: "Model8",
128+
vendor: "Vendor8",
129+
osFullName: "OS8",
130+
ip4Interfaces: {
131+
"IP8": [
132+
"10.8.0.1"
133+
]
134+
},
135+
workspace: "workspace-2",
136+
scanCode: "scanCode8",
137+
},
138+
{
139+
alias: 'System-9',
140+
id: 'SYSTEM-9',
141+
state: "CONNECTED_REFRESH_FAILED",
142+
locked: false,
143+
systemStartTime: "2026-02-21T16:59:31.000Z",
144+
model: "Model9",
145+
vendor: "Vendor9",
146+
osFullName: "OS9",
147+
ip4Interfaces: {
148+
"IP9": [
149+
"10.8.0.2"
150+
]
151+
},
152+
workspace: "default-workspace",
153+
scanCode: "scanCode9",
154+
},
155+
{
156+
alias: 'System-10',
157+
id: 'SYSTEM-10',
158+
state: "DISCONNECTED",
159+
locked: false,
160+
systemStartTime: "2025-08-21T16:59:31.000Z",
161+
model: "Model10",
162+
vendor: "Vendor10",
163+
osFullName: "OS10",
164+
ip4Interfaces: {
165+
"IP10": [
166+
"10.9.0.11"
167+
]
168+
},
169+
workspace: "default-workspace",
170+
scanCode: "scanCode10",
171+
},
5172
]
Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,73 @@
11
import { data } from '../database/systems.js';
22

33
class SystemsRoutes {
4-
querySystems(_req, res) {
4+
getSystemsSummary(_req, res) {
5+
const connectedCount = data.filter(system =>
6+
system.state === "CONNECTED" ||
7+
system.state === "CONNECTED_REFRESH_PENDING" ||
8+
system.state === "CONNECTED_REFRESH_FAILED"
9+
).length;
10+
11+
const disconnectedCount = data.filter(system =>
12+
system.state === "DISCONNECTED" ||
13+
system.state === "APPROVED" ||
14+
system.state === "ACTIVATED_WITHOUT_CONNECTION"
15+
).length;
16+
17+
const virtualCount = data.filter(system =>
18+
system.state === "VIRTUAL"
19+
).length;
20+
521
res.status(200).json({
6-
data
22+
connectedCount: connectedCount,
23+
disconnectedCount: disconnectedCount,
24+
virtualCount: virtualCount,
725
});
826
}
27+
28+
querySystems(req, res) {
29+
const idFilterForFirstSystemFromDb = 'id = "SYSTEM-1"';
30+
const idFilterForSecondSystemFromDb = 'id = "SYSTEM-2"';
31+
const scanCodeFilterForFirstSystemFromDb = 'scanCode = "scanCode1"';
32+
const scanCodeFilterForEighthSystemFromDb = 'scanCode = "scanCode8"';
33+
const complexFilterForPanel = 'id = "SYSTEM-2" && connected.data.state = "DISCONNECTED" || grains.data.minion_blackout.Equals(true)';
34+
const complexFilterForVariable = 'connected.data.state = "CONNECTED" && workspace = "default-workspace" || grains.data.productname = "Model8"';
35+
36+
if (req.method !== 'POST') {
37+
return;
38+
}
39+
40+
if (req.body.filter === idFilterForFirstSystemFromDb) {
41+
res.status(200).json({ count: 1, data: data.filter(data => data.id === 'SYSTEM-1') });
42+
return;
43+
}
44+
45+
if (req.body.filter === idFilterForSecondSystemFromDb) {
46+
res.status(200).json({ count: 1, data: data.filter(data => data.id === 'SYSTEM-2') });
47+
return;
48+
}
49+
50+
if (req.body.filter === scanCodeFilterForFirstSystemFromDb) {
51+
res.status(200).json({ count: 1, data: data.filter(data => data.scanCode === 'scanCode1') });
52+
return;
53+
}
54+
55+
if (req.body.filter === scanCodeFilterForEighthSystemFromDb) {
56+
res.status(200).json({ count: 1, data: data.filter(data => data.scanCode === 'scanCode8') });
57+
return;
58+
}
59+
60+
if (req.body.filter === complexFilterForPanel) {
61+
res.status(200).json({ count: 2, data: data.filter(data => (data.id === 'SYSTEM-2' && data.state === "DISCONNECTED" || data.locked === true)) });
62+
return;
63+
}
64+
65+
if (req.body.filter === complexFilterForVariable) {
66+
res.status(200).json({ count: 3, data: data.filter(data => (data.state === "CONNECTED" && data.workspace === "default-workspace" || data.model === "Model8")) });
67+
return;
68+
}
69+
70+
res.status(200).json({ count: data.length, data: data });
71+
}
972
}
1073
export const systemsRoutes = new SystemsRoutes();

acceptance-tests/fake-api/server.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ server.post('/niapm/v1/query-assets', assetRoutes.queryAssets);
2323

2424
server.get('/niauth/v1/user', authRoutes.getUserWorkspaces);
2525
server.post('/nisysmgmt/v1/query-systems', systemsRoutes.querySystems);
26+
server.get('/nisysmgmt/v1/get-systems-summary', systemsRoutes.getSystemsSummary);
2627
server.get('/nilocation/v1/locations', locationsRoutes.listLocations);
2728
server.get('/niapm/v1/asset-summary', assetRoutes.getAssetSummary);
2829
server.post('/niapm/v1/assets/calibration-forecast', assetRoutes.getCalibrationForecast);

0 commit comments

Comments
 (0)