@tellescope/sdk 1.80.4 → 1.82.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,6 +9,8 @@ import {
9
9
  ClientModelForName_required,
10
10
  UserDisplayInfo,
11
11
  Ticket,
12
+ VitalConfiguration,
13
+ EnduserObservation,
12
14
  } from "@tellescope/types-client"
13
15
  import {
14
16
  CompoundFilter,
@@ -5363,7 +5365,7 @@ const nextReminderInMS_tests = async () => {
5363
5365
  ])
5364
5366
  }
5365
5367
 
5366
- const pollForResults = async <T>(f: () => Promise<T>, evaluate: (r: T) => boolean, intervalInMS=500, iterations=20) => {
5368
+ const pollForResults = async <T>(f: () => Promise<T>, evaluate: (r: T) => boolean, intervalInMS=500, iterations=20, shouldError=false) => {
5367
5369
  let lastResult = undefined as any
5368
5370
  for (let i = 0; i < iterations; i++) {
5369
5371
  await wait(undefined, intervalInMS)
@@ -5372,6 +5374,8 @@ const pollForResults = async <T>(f: () => Promise<T>, evaluate: (r: T) => boolea
5372
5374
  if (evaluate(result)) return result
5373
5375
  }
5374
5376
 
5377
+ if (shouldError) return lastResult
5378
+
5375
5379
  console.log(lastResult)
5376
5380
  throw new Error("failed pollForResults")
5377
5381
  }
@@ -7000,7 +7004,7 @@ const sync_tests = async () => {
7000
7004
  await async_test(
7001
7005
  "Other organization",
7002
7006
  () => sdkOther.sync({ from }),
7003
- { onResult: ({ results }) => results.length === 0 },
7007
+ { onResult: ({ results }) => results.filter(e => e.modelName === 'endusers' && e.data !== 'deleted').length === 0 },
7004
7008
  )
7005
7009
 
7006
7010
  await sdk.api.endusers.updateOne(e.id, { fname: "UPDATE_TEST"})
@@ -7028,7 +7032,7 @@ const sync_tests = async () => {
7028
7032
  await async_test(
7029
7033
  "Other organization",
7030
7034
  () => sdkOther.sync({ from }),
7031
- { onResult: ({ results }) => results.length === 0 },
7035
+ { onResult: ({ results }) => results.filter(e => e.modelName === 'endusers' && e.data !== 'deleted').length === 0 },
7032
7036
  )
7033
7037
 
7034
7038
  const t = await sdk.api.tickets.createOne({ title: 'access test' })
@@ -7106,7 +7110,7 @@ const sync_tests = async () => {
7106
7110
  await async_test(
7107
7111
  "Other organization",
7108
7112
  () => sdkOther.sync({ from }),
7109
- { onResult: ({ results }) => results.length === 0 },
7113
+ { onResult: ({ results }) => results.filter(e => e.modelName === 'endusers' && e.data !== 'deleted').length === 0 },
7110
7114
  )
7111
7115
 
7112
7116
  // bulk create test coverage
@@ -7136,7 +7140,7 @@ const sync_tests = async () => {
7136
7140
  await async_test(
7137
7141
  "Other organization",
7138
7142
  () => sdkOther.sync({ from }),
7139
- { onResult: ({ results }) => results.length === 0 },
7143
+ { onResult: ({ results }) => results.filter(e => e.modelName === 'endusers' && e.data !== 'deleted').length === 0 },
7140
7144
  )
7141
7145
 
7142
7146
  await sdk.api.endusers.deleteOne(e2.id)
@@ -7164,7 +7168,7 @@ const sync_tests = async () => {
7164
7168
  await async_test(
7165
7169
  "Other organization",
7166
7170
  () => sdkOther.sync({ from }),
7167
- { onResult: ({ results }) => results.length === 0 },
7171
+ { onResult: ({ results }) => results.filter(e => e.modelName === 'endusers' && e.data !== 'deleted').length === 0 },
7168
7172
  )
7169
7173
  }
7170
7174
 
@@ -7218,6 +7222,481 @@ const close_reasons_no_duplicates_tests = async () => {
7218
7222
  ])
7219
7223
  }
7220
7224
 
7225
+ const vital_trigger_tests = async () => {
7226
+ log_header("Vital Update Trigger")
7227
+
7228
+ const runTriggerTest = async ({
7229
+ configurations: _configurations,
7230
+ triggers: _triggers,
7231
+ shouldTrigger,
7232
+ vitals,
7233
+ title,
7234
+ } : {
7235
+ configurations: Pick<VitalConfiguration, 'unit' | 'ranges'>[]
7236
+ triggers: { configurationIndexes: number[], classifications: string[] }[],
7237
+ vitals: (Pick<EnduserObservation, 'measurement'> & Pick<Partial<EnduserObservation>, | 'timestamp'>)[],
7238
+ shouldTrigger: boolean,
7239
+ title: string,
7240
+ }) => {
7241
+ const e = await sdk.api.endusers.createOne({ })
7242
+ const configurations = (
7243
+ await sdk.api.vital_configurations.createSome(_configurations.map((c, i) => ({
7244
+ title: `configuration ${i}`,
7245
+ ...c,
7246
+ })))
7247
+ ).created
7248
+
7249
+ const triggers = (
7250
+ await sdk.api.automation_triggers.createSome(_triggers.map((t, i) => ({
7251
+ title: `trigger ${i}`,
7252
+ status: 'Active',
7253
+ event: {
7254
+ type: "Vital Update",
7255
+ info: {
7256
+ classifications: t.classifications,
7257
+ configurationIds: configurations.filter((_, i) => t.configurationIndexes.includes(i)).map(c => c.id),
7258
+ }
7259
+ },
7260
+ action: {
7261
+ type: 'Add Tags',
7262
+ info: { tags: ['Triggered'] },
7263
+ },
7264
+ })))
7265
+ ).created
7266
+
7267
+ await sdk.api.enduser_observations.createSome(vitals.map(v => ({
7268
+ ...v,
7269
+ category: 'vital-signs',
7270
+ enduserId: e.id,
7271
+ status: 'registered',
7272
+ })))
7273
+
7274
+ await async_test(
7275
+ title,
7276
+ () => pollForResults(
7277
+ () => sdk.api.endusers.getOne(e.id),
7278
+ e => !!e.tags?.includes("Triggered"),
7279
+ 50,
7280
+ 10,
7281
+ !shouldTrigger
7282
+ ),
7283
+ passOnAnyResult,
7284
+ )
7285
+
7286
+ await Promise.all([
7287
+ sdk.api.endusers.deleteOne(e.id),
7288
+ ...configurations.map(c => sdk.api.vital_configurations.deleteOne(c.id)),
7289
+ ...triggers.map(t => sdk.api.automation_triggers.deleteOne(t.id)),
7290
+ ])
7291
+ }
7292
+
7293
+ const timestamp_for_day_offset = (day: number) => new Date(Date.now() - 1000 * 60 * 60 * 24 * day)
7294
+
7295
+ await runTriggerTest({
7296
+ title: "Basic Passing Test (Less Than Sucess)",
7297
+ shouldTrigger: true,
7298
+ configurations: [{
7299
+ unit: 'LB',
7300
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 2 }, trendIntervalInMS: 0 }, ],
7301
+ }],
7302
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7303
+ vitals: [{
7304
+ measurement: { unit: 'LB', value: 1 },
7305
+ timestamp: new Date(),
7306
+ }]
7307
+ })
7308
+ await runTriggerTest({
7309
+ title: "Less Than Fail",
7310
+ shouldTrigger: false,
7311
+ configurations: [{
7312
+ unit: 'LB',
7313
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 1 }, trendIntervalInMS: 0 }, ],
7314
+ }],
7315
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7316
+ vitals: [{
7317
+ measurement: { unit: 'LB', value: 1 },
7318
+ timestamp: new Date(),
7319
+ }]
7320
+ })
7321
+ await runTriggerTest({
7322
+ title: "Greater Than Success",
7323
+ shouldTrigger: true,
7324
+ configurations: [{
7325
+ unit: 'LB',
7326
+ ranges: [{ classification: 'Target', comparison: { type: 'Greater Than', value: 0 }, trendIntervalInMS: 0 }, ],
7327
+ }],
7328
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7329
+ vitals: [{
7330
+ measurement: { unit: 'LB', value: 1 },
7331
+ timestamp: new Date(),
7332
+ }]
7333
+ })
7334
+ await runTriggerTest({
7335
+ title: "Greater Than Fail",
7336
+ shouldTrigger: false,
7337
+ configurations: [{
7338
+ unit: 'LB',
7339
+ ranges: [{ classification: 'Target', comparison: { type: 'Greater Than', value: 0 }, trendIntervalInMS: 0 }, ],
7340
+ }],
7341
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7342
+ vitals: [{
7343
+ measurement: { unit: 'LB', value: 0 },
7344
+ timestamp: new Date(),
7345
+ }]
7346
+ })
7347
+ await runTriggerTest({
7348
+ title: "Between Low Bound",
7349
+ shouldTrigger: true,
7350
+ configurations: [{
7351
+ unit: 'LB',
7352
+ ranges: [{ classification: 'Target', comparison: { type: 'Between', value: { lower: 0, upper: 1 } }, trendIntervalInMS: 0 }, ],
7353
+ }],
7354
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7355
+ vitals: [{
7356
+ measurement: { unit: 'LB', value: 0 },
7357
+ timestamp: new Date(),
7358
+ }]
7359
+ })
7360
+ await runTriggerTest({
7361
+ title: "Between Upper Bound",
7362
+ shouldTrigger: true,
7363
+ configurations: [{
7364
+ unit: 'LB',
7365
+ ranges: [{ classification: 'Target', comparison: { type: 'Between', value: { lower: 0, upper: 1 } }, trendIntervalInMS: 0 }, ],
7366
+ }],
7367
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7368
+ vitals: [{
7369
+ measurement: { unit: 'LB', value: 1 },
7370
+ timestamp: new Date(),
7371
+ }]
7372
+ })
7373
+ await runTriggerTest({
7374
+ title: "Between Middle",
7375
+ shouldTrigger: true,
7376
+ configurations: [{
7377
+ unit: 'LB',
7378
+ ranges: [{ classification: 'Target', comparison: { type: 'Between', value: { lower: 0, upper: 2 } }, trendIntervalInMS: 0 }, ],
7379
+ }],
7380
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7381
+ vitals: [{
7382
+ measurement: { unit: 'LB', value: 1 },
7383
+ timestamp: new Date(),
7384
+ }]
7385
+ })
7386
+ await runTriggerTest({
7387
+ title: "Between Below Low Bound",
7388
+ shouldTrigger: false,
7389
+ configurations: [{
7390
+ unit: 'LB',
7391
+ ranges: [{ classification: 'Target', comparison: { type: 'Between', value: { lower: 0, upper: 1 } }, trendIntervalInMS: 0 }, ],
7392
+ }],
7393
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7394
+ vitals: [{
7395
+ measurement: { unit: 'LB', value: -1 },
7396
+ timestamp: new Date(),
7397
+ }]
7398
+ })
7399
+ await runTriggerTest({
7400
+ title: "Between Above Upper Bound",
7401
+ shouldTrigger: false,
7402
+ configurations: [{
7403
+ unit: 'LB',
7404
+ ranges: [{ classification: 'Target', comparison: { type: 'Between', value: { lower: 0, upper: 1 } }, trendIntervalInMS: 0 }, ],
7405
+ }],
7406
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7407
+ vitals: [{
7408
+ measurement: { unit: 'LB', value: 2 },
7409
+ timestamp: new Date(),
7410
+ }]
7411
+ })
7412
+
7413
+ await runTriggerTest({
7414
+ title: "Mismatch Unit",
7415
+ shouldTrigger: false,
7416
+ configurations: [{
7417
+ unit: 'DIFFERENT',
7418
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 200 }, trendIntervalInMS: 0 }, ],
7419
+ }],
7420
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7421
+ vitals: [{
7422
+ measurement: { unit: 'LB', value: 1 },
7423
+ timestamp: new Date(),
7424
+ }]
7425
+ })
7426
+ await runTriggerTest({
7427
+ title: "Mismatch Classification",
7428
+ shouldTrigger: false,
7429
+ configurations: [{
7430
+ unit: 'LB',
7431
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 200 }, trendIntervalInMS: 0 }, ],
7432
+ }],
7433
+ triggers: [{ classifications: ['High'], configurationIndexes: [0] }],
7434
+ vitals: [{
7435
+ measurement: { unit: 'LB', value: 1 },
7436
+ timestamp: new Date(),
7437
+ }]
7438
+ })
7439
+ await runTriggerTest({
7440
+ title: "Multiple Configurations (Classifications)",
7441
+ shouldTrigger: true,
7442
+ configurations: [{
7443
+ unit: 'LB',
7444
+ ranges: [
7445
+ { classification: 'Target', comparison: { type: 'Less Than', value: 200 }, trendIntervalInMS: 0 },
7446
+ { classification: 'High', comparison: { type: 'Less Than', value: 100 }, trendIntervalInMS: 0 },
7447
+ ],
7448
+ }],
7449
+ triggers: [{ classifications: ['High'], configurationIndexes: [0,1] }],
7450
+ vitals: [{
7451
+ measurement: { unit: 'LB', value: 1 },
7452
+ timestamp: new Date(),
7453
+ }]
7454
+ })
7455
+ await runTriggerTest({
7456
+ title: "Multiple Configurations (Comparisons)",
7457
+ shouldTrigger: true,
7458
+ configurations: [{
7459
+ unit: 'LB',
7460
+ ranges: [
7461
+ { classification: 'Target', comparison: { type: 'Less Than', value: 0 }, trendIntervalInMS: 0 },
7462
+ { classification: 'High', comparison: { type: 'Less Than', value: 100 }, trendIntervalInMS: 0 },
7463
+ ],
7464
+ }],
7465
+ triggers: [{ classifications: ['High'], configurationIndexes: [0,1] }],
7466
+ vitals: [{
7467
+ measurement: { unit: 'LB', value: 1 },
7468
+ timestamp: new Date(),
7469
+ }]
7470
+ })
7471
+
7472
+ await runTriggerTest({
7473
+ title: "Multiple vitals, 0 passes",
7474
+ shouldTrigger: false,
7475
+ configurations: [{
7476
+ unit: 'LB',
7477
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 200 }, trendIntervalInMS: 0 }, ],
7478
+ }],
7479
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7480
+ vitals: [
7481
+ { measurement: { unit: 'LB', value: 500 }, timestamp: new Date() },
7482
+ { measurement: { unit: 'LB', value: 1000 }, timestamp: new Date(Date.now() - 100) },
7483
+ { measurement: { unit: 'LB', value: 250 }, timestamp: new Date(Date.now() - 250) },
7484
+ ]
7485
+ })
7486
+ await runTriggerTest({
7487
+ title: "Multiple vitals, 1 passes",
7488
+ shouldTrigger: true,
7489
+ configurations: [{
7490
+ unit: 'LB',
7491
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 200 }, trendIntervalInMS: 0 }, ],
7492
+ }],
7493
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7494
+ vitals: [
7495
+ { measurement: { unit: 'LB', value: 500 }, timestamp: new Date() },
7496
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date(Date.now() - 100) },
7497
+ { measurement: { unit: 'LB', value: 250 }, timestamp: new Date(Date.now() - 250) },
7498
+ ]
7499
+ })
7500
+ await runTriggerTest({
7501
+ title: "Multiple vitals, multiple pass",
7502
+ shouldTrigger: true,
7503
+ configurations: [{
7504
+ unit: 'LB',
7505
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 200 }, trendIntervalInMS: 0 }, ],
7506
+ }],
7507
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7508
+ vitals: [
7509
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date() },
7510
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date(Date.now() - 100) },
7511
+ { measurement: { unit: 'LB', value: 3 }, timestamp: new Date(Date.now() - 250) },
7512
+ ]
7513
+ })
7514
+
7515
+ // trend tests
7516
+ await runTriggerTest({
7517
+ title: "Singleton trend should not work",
7518
+ shouldTrigger: false,
7519
+ configurations: [{
7520
+ unit: 'LB',
7521
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 200 }, trendIntervalInMS: 1000 }, ],
7522
+ }],
7523
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7524
+ vitals: [{
7525
+ measurement: { unit: 'LB', value: 1 },
7526
+ timestamp: new Date(),
7527
+ }]
7528
+ })
7529
+ await runTriggerTest({
7530
+ title: "2-point trend passing",
7531
+ shouldTrigger: true,
7532
+ configurations: [{
7533
+ unit: 'LB',
7534
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 1 }, trendIntervalInMS: 1000 }, ],
7535
+ }],
7536
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7537
+ vitals: [
7538
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date() },
7539
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date(new Date().getTime() - 999) },
7540
+ ]
7541
+ })
7542
+ await runTriggerTest({
7543
+ title: "2-point trend failing for difference too small",
7544
+ shouldTrigger: true,
7545
+ configurations: [{
7546
+ unit: 'LB',
7547
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 1 }, trendIntervalInMS: 1000 }, ],
7548
+ }],
7549
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7550
+ vitals: [
7551
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date() },
7552
+ { measurement: { unit: 'LB', value: 0 }, timestamp: new Date(new Date().getTime() - 999) },
7553
+ ]
7554
+ })
7555
+ await runTriggerTest({
7556
+ title: "2-point trend failing for point out of time range",
7557
+ shouldTrigger: false,
7558
+ configurations: [{
7559
+ unit: 'LB',
7560
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 5 }, trendIntervalInMS: 1000 }, ],
7561
+ }],
7562
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7563
+ vitals: [
7564
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date() },
7565
+ { measurement: { unit: 'LB', value: 0 }, timestamp: new Date(new Date().getTime() - 1001) },
7566
+ ]
7567
+ })
7568
+ await runTriggerTest({
7569
+ title: "3-point trend passing (1 point of out range)",
7570
+ shouldTrigger: true,
7571
+ configurations: [{
7572
+ unit: 'LB',
7573
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 2 }, trendIntervalInMS: 1000 }, ],
7574
+ }],
7575
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7576
+ vitals: [
7577
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date() },
7578
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date(new Date().getTime() - 100) },
7579
+ { measurement: { unit: 'LB', value: 0 }, timestamp: new Date(new Date().getTime() - 1001) },
7580
+ ]
7581
+ })
7582
+ await runTriggerTest({
7583
+ title: "3-point trend passing (1 point wrong unit)",
7584
+ shouldTrigger: true,
7585
+ configurations: [{
7586
+ unit: 'LB',
7587
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 2 }, trendIntervalInMS: 1000 }, ],
7588
+ }],
7589
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7590
+ vitals: [
7591
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date() },
7592
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date(new Date().getTime() - 100) },
7593
+ { measurement: { unit: 'OTHER', value: 0 }, timestamp: new Date(new Date().getTime() - 200) },
7594
+ ]
7595
+ })
7596
+ await runTriggerTest({
7597
+ title: "3-point trend failing (1 point of out range)",
7598
+ shouldTrigger: false,
7599
+ configurations: [{
7600
+ unit: 'LB',
7601
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 2 }, trendIntervalInMS: 1000 }, ],
7602
+ }],
7603
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7604
+ vitals: [
7605
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date() },
7606
+ { measurement: { unit: 'LB', value: 0 }, timestamp: new Date(new Date().getTime() - 100) },
7607
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date(new Date().getTime() - 1001) },
7608
+ ]
7609
+ })
7610
+ await runTriggerTest({
7611
+ title: "3-point trend failing (1 point wrong unit)",
7612
+ shouldTrigger: false,
7613
+ configurations: [{
7614
+ unit: 'LB',
7615
+ ranges: [{ classification: 'Target', comparison: { type: 'Less Than', value: 2 }, trendIntervalInMS: 1000 }, ],
7616
+ }],
7617
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7618
+ vitals: [
7619
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date() },
7620
+ { measurement: { unit: 'LB', value: 0 }, timestamp: new Date(new Date().getTime() - 100) },
7621
+ { measurement: { unit: 'OTHER', value: 1 }, timestamp: new Date(new Date().getTime() - 200) },
7622
+ ]
7623
+ })
7624
+ await runTriggerTest({
7625
+ title: "multiple trend passing",
7626
+ shouldTrigger: true,
7627
+ configurations: [{
7628
+ unit: 'LB',
7629
+ ranges: [{ classification: 'Target', comparison: { type: 'Greater Than', value: 1 }, trendIntervalInMS: 1000 }, ],
7630
+ }],
7631
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7632
+ vitals: [
7633
+ { measurement: { unit: 'LB', value: 3 }, timestamp: new Date() },
7634
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date(new Date().getTime() - 100) },
7635
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date(new Date().getTime() - 200) },
7636
+ ]
7637
+ })
7638
+ await runTriggerTest({
7639
+ title: "multiple trend failing (not enough)",
7640
+ shouldTrigger: false,
7641
+ configurations: [{
7642
+ unit: 'LB',
7643
+ ranges: [{ classification: 'Target', comparison: { type: 'Greater Than', value: 1 }, trendIntervalInMS: 1000 }, ],
7644
+ }],
7645
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7646
+ vitals: [
7647
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date() },
7648
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date(new Date().getTime() - 100) },
7649
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date(new Date().getTime() - 200) },
7650
+ ]
7651
+ })
7652
+ await runTriggerTest({
7653
+ title: "multiple trend failing (wrong order)",
7654
+ shouldTrigger: false,
7655
+ configurations: [{
7656
+ unit: 'LB',
7657
+ ranges: [{ classification: 'Target', comparison: { type: 'Greater Than', value: 1 }, trendIntervalInMS: 1000 }, ],
7658
+ }],
7659
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7660
+ vitals: [
7661
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date() },
7662
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date(new Date().getTime() - 100) },
7663
+ { measurement: { unit: 'LB', value: 3 }, timestamp: new Date(new Date().getTime() - 200) },
7664
+ ]
7665
+ })
7666
+ await runTriggerTest({
7667
+ title: "multiple trend failing (not enough, and wrong order)",
7668
+ shouldTrigger: false,
7669
+ configurations: [{
7670
+ unit: 'LB',
7671
+ ranges: [{ classification: 'Target', comparison: { type: 'Greater Than', value: 1 }, trendIntervalInMS: 1000 }, ],
7672
+ }],
7673
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7674
+ vitals: [
7675
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date() },
7676
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date(new Date().getTime() - 100) },
7677
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date(new Date().getTime() - 200) },
7678
+ ]
7679
+ })
7680
+ await runTriggerTest({
7681
+ title: "multiple trend failing (lots)",
7682
+ shouldTrigger: false,
7683
+ configurations: [{
7684
+ unit: 'LB',
7685
+ ranges: [{ classification: 'Target', comparison: { type: 'Greater Than', value: 1 }, trendIntervalInMS: 1000 }, ],
7686
+ }],
7687
+ triggers: [{ classifications: ['Target'], configurationIndexes: [0] }],
7688
+ vitals: [
7689
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date() },
7690
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date(new Date().getTime() - 100) },
7691
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date(new Date().getTime() - 200) },
7692
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date(new Date().getTime() - 300) },
7693
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date(new Date().getTime() - 400) },
7694
+ { measurement: { unit: 'LB', value: 2 }, timestamp: new Date(new Date().getTime() - 500) },
7695
+ { measurement: { unit: 'LB', value: 1 }, timestamp: new Date(new Date().getTime() - 600) },
7696
+ ]
7697
+ })
7698
+ }
7699
+
7221
7700
  (async () => {
7222
7701
  log_header("API")
7223
7702
 
@@ -7269,6 +7748,7 @@ const close_reasons_no_duplicates_tests = async () => {
7269
7748
  await setup_tests()
7270
7749
  await multi_tenant_tests() // should come right after setup tests
7271
7750
  await sync_tests() // should come directly after setup to avoid extra sync values
7751
+ await vital_trigger_tests()
7272
7752
  await ticket_queue_tests()
7273
7753
  await close_reasons_no_duplicates_tests()
7274
7754
  await register_as_enduser_tests()
Binary file