@admoai/sdk-scenarios 1.3.0 → 1.4.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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,31 @@ Versioning: a scenario added or an `expect` tightened is a **minor** release; a
4
4
  removed, or a `request`/`expect` key renamed (every SDK's interpreter must change), is a
5
5
  **major** one. Each SDK vendors one version and its own CI checks the vendored bytes against it.
6
6
 
7
+ ## 1.4.0 — 2026-11-08
8
+
9
+ Adds live scenarios ST1-ST12 for the standard native formats (admoai/adhub#4733): what the
10
+ engine now serves, asserted against a real decision-engine, and moves `schemaVersion` to 4.
11
+ Five new live `expect.creative` keys, each with exactly the semantics of the fixture key of the
12
+ same name, so an interpreter can share one check between `fixtureScenarios` and `scenarios`:
13
+ - `metadata`: an object limited to `effectiveStandardFormatKey`, `effectiveStandardFormatVersion`,
14
+ `templateSource` and `assetContext`. Each listed key must equal the served value exactly; `null`
15
+ means the key is absent from the served metadata.
16
+ - `templateKey`: the served `template.key`.
17
+ - `contentKeys`: the served creative's plain content keys are exactly this set (order is not
18
+ asserted; slides and matched points are not plain contents).
19
+ - `styleIn`: a non-empty list; the served `template.style` is one of them.
20
+ - `journeyStageKey`: the served creative's `journey.stageKey` equals it; only valid with
21
+ `"journey": true`.
22
+ ST1-ST8 serve the min and full Ad of Card, Expandable Banner, Branded Assets and Standard Video;
23
+ ST9 is a Card whose creative cannot satisfy its contract and is not served (no ad); ST10 is the
24
+ legacy `home` placement, whose metadata names no standard and carries no asset context; ST11 is a
25
+ Journey whose first stage's screen cannot satisfy its standard, skipped, so the next stage's screen
26
+ answers; ST12 is a Journey screen serving the saved Card style. Carousel is not in this version:
27
+ its slides are not served yet. Live runs need the `sdk_st_*` placements of the mock seed (11: nine
28
+ Ad placements and the two Journey entry placements `sdk_st_journey_skip` and
29
+ `sdk_st_journey_styles`). A runner that does not know `schemaVersion` 4 must refuse the manifest;
30
+ adopting 1.4.0 requires executing the five keys. The 39 live scenarios and F1-F25 are unchanged.
31
+
7
32
  ## 1.3.0 — 2026-11-05
8
33
 
9
34
  Adds fixture scenarios F16–F25 with a `slideTracking` block (admoai/adhub#4733): what the app
package/README.md CHANGED
@@ -37,3 +37,21 @@ or a key renamed), add a `CHANGELOG.md` entry, and run `sdk/scenarios/check.sh`.
37
37
  into the package's `fixtures/golden-wire/`; that directory is never committed, and a change to a
38
38
  golden file needs a version bump too); each SDK then
39
39
  moves to it in its own PR. See `docs/guides/sdk-ci.md`.
40
+
41
+ ## Schema versions
42
+
43
+ A runner must refuse a `schemaVersion` it does not execute.
44
+
45
+ | `schemaVersion` | Adds | Package |
46
+ | --- | --- | --- |
47
+ | 1 | live `scenarios` | 1.0.0 |
48
+ | 2 | `fixtureScenarios` (offline, golden wire) | 1.2.0 |
49
+ | 3 | `slideTracking` on a fixture scenario | 1.3.0 |
50
+ | 4 | live `expect.creative` keys `metadata`, `templateKey`, `contentKeys`, `styleIn`, `journeyStageKey` (ST1-ST12) | 1.4.0 |
51
+
52
+ The v4 keys, same semantics as the fixture keys of the same name: `metadata` is limited to
53
+ `effectiveStandardFormatKey`, `effectiveStandardFormatVersion`, `templateSource` and `assetContext`
54
+ (exact value per key, `null` = absent); `templateKey` is the served `template.key`; `contentKeys`
55
+ is the exact set of plain content keys (order not asserted); `styleIn` is a non-empty list the
56
+ served `template.style` belongs to; `journeyStageKey` is the served `journey.stageKey` (only with
57
+ `"journey": true`). Live runs of ST1-ST12 need the `sdk_st_*` placements of adhub's mock seed.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@admoai/sdk-scenarios",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "The cross-SDK decision & tracking scenarios every AdMoai SDK asserts against a real decision-engine. Data only.",
5
5
  "license": "MIT",
6
6
  "files": [
package/scenarios.feature CHANGED
@@ -6,7 +6,7 @@
6
6
  # promises a publisher's app, in the same words for all three. CI regenerates it and fails on
7
7
  # any difference, so it cannot drift from what the runners execute.
8
8
  # How it is published and kept fresh: docs/guides/sdk-ci.md, Section 7.
9
- # Manifest schemaVersion: 3
9
+ # Manifest schemaVersion: 4
10
10
 
11
11
  Feature: Cross-SDK decision & tracking contract
12
12
  Shared cross-SDK E2E scenario manifest. ONE definition, executed by a thin interpreter in each
@@ -385,6 +385,153 @@ Feature: Cross-SDK decision & tracking contract
385
385
  And every tap and every click sends its beacon, on every call
386
386
  And the engine accepts every beacon
387
387
 
388
+ @ST @standard-formats
389
+ Scenario: ST1 — a Card with only its required content serves under the Card standard
390
+ Given the app requests placement "sdk_st_card_min"
391
+ Then an ad is served
392
+ And exactly 1 decision is returned
393
+ And the creative is not a Journey Ad
394
+ And the creative's assetContext is absent
395
+ And the creative's effectiveStandardFormatKey is "card"
396
+ And the creative's effectiveStandardFormatVersion is 1
397
+ And the creative's templateSource is "admoai_standard"
398
+ And the template key is "card"
399
+ And the creative's contents are exactly "image", "destination_url"
400
+
401
+ @ST @standard-formats
402
+ Scenario: ST2 — a Card with every optional content serves them all, in a style the standard defines
403
+ Given the app requests placement "sdk_st_card_full"
404
+ Then an ad is served
405
+ And exactly 1 decision is returned
406
+ And the creative is not a Journey Ad
407
+ And the creative's assetContext is absent
408
+ And the creative's effectiveStandardFormatKey is "card"
409
+ And the creative's effectiveStandardFormatVersion is 1
410
+ And the creative's templateSource is "admoai_standard"
411
+ And the template key is "card"
412
+ And the creative's contents are exactly "image", "brand_logo", "headline", "supporting_text", "cta_text", "destination_url"
413
+ And the template style is one of "default", "tall"
414
+
415
+ @ST @standard-formats
416
+ Scenario: ST3 — an Expandable Banner with only its required content serves under the Expandable Banner standard
417
+ Given the app requests placement "sdk_st_expandable_banner_min"
418
+ Then an ad is served
419
+ And exactly 1 decision is returned
420
+ And the creative is not a Journey Ad
421
+ And the creative's assetContext is absent
422
+ And the creative's effectiveStandardFormatKey is "expandable_banner"
423
+ And the creative's effectiveStandardFormatVersion is 1
424
+ And the creative's templateSource is "admoai_standard"
425
+ And the template key is "expandable_banner"
426
+ And the creative's contents are exactly "teaser_image", "expanded_image", "destination_url"
427
+
428
+ @ST @standard-formats
429
+ Scenario: ST4 — an Expandable Banner with every optional content serves them all
430
+ Given the app requests placement "sdk_st_expandable_banner_full"
431
+ Then an ad is served
432
+ And exactly 1 decision is returned
433
+ And the creative is not a Journey Ad
434
+ And the creative's assetContext is absent
435
+ And the creative's effectiveStandardFormatKey is "expandable_banner"
436
+ And the creative's effectiveStandardFormatVersion is 1
437
+ And the creative's templateSource is "admoai_standard"
438
+ And the template key is "expandable_banner"
439
+ And the creative's contents are exactly "teaser_image", "teaser_headline", "expanded_image", "headline", "supporting_text", "cta_text", "destination_url", "disclaimer"
440
+
441
+ @ST @standard-formats
442
+ Scenario: ST5 — a Branded Asset with only its required content serves with its asset context
443
+ Given the app requests placement "sdk_st_branded_assets_min"
444
+ Then an ad is served
445
+ And exactly 1 decision is returned
446
+ And the creative is not a Journey Ad
447
+ And the creative's assetContext is "vehicle_marker"
448
+ And the creative's effectiveStandardFormatKey is "branded_assets"
449
+ And the creative's effectiveStandardFormatVersion is 1
450
+ And the creative's templateSource is "admoai_standard"
451
+ And the template key is "branded_assets"
452
+ And the creative's contents are exactly "branded_image"
453
+
454
+ @ST @standard-formats
455
+ Scenario: ST6 — a Branded Asset with every optional content serves them all, with its asset context
456
+ Given the app requests placement "sdk_st_branded_assets_full"
457
+ Then an ad is served
458
+ And exactly 1 decision is returned
459
+ And the creative is not a Journey Ad
460
+ And the creative's assetContext is "vehicle_marker"
461
+ And the creative's effectiveStandardFormatKey is "branded_assets"
462
+ And the creative's effectiveStandardFormatVersion is 1
463
+ And the creative's templateSource is "admoai_standard"
464
+ And the template key is "branded_assets"
465
+ And the creative's contents are exactly "branded_image", "accessible_label", "destination_url"
466
+
467
+ @ST @standard-formats
468
+ Scenario: ST7 — a Standard Video with only its required content serves under the Standard Video standard
469
+ Given the app requests placement "sdk_st_standard_video_min"
470
+ Then an ad is served
471
+ And exactly 1 decision is returned
472
+ And the creative is not a Journey Ad
473
+ And the creative's assetContext is absent
474
+ And the creative's effectiveStandardFormatKey is "standard_video"
475
+ And the creative's effectiveStandardFormatVersion is 1
476
+ And the creative's templateSource is "admoai_standard"
477
+ And the template key is "standard_video"
478
+ And the creative's contents are exactly "video_asset", "poster_image"
479
+
480
+ @ST @standard-formats
481
+ Scenario: ST8 — a Standard Video with every optional content serves them all
482
+ Given the app requests placement "sdk_st_standard_video_full"
483
+ Then an ad is served
484
+ And exactly 1 decision is returned
485
+ And the creative is not a Journey Ad
486
+ And the creative's assetContext is absent
487
+ And the creative's effectiveStandardFormatKey is "standard_video"
488
+ And the creative's effectiveStandardFormatVersion is 1
489
+ And the creative's templateSource is "admoai_standard"
490
+ And the template key is "standard_video"
491
+ And the creative's contents are exactly "video_asset", "poster_image", "brand_logo", "headline", "supporting_text", "cta_text", "destination_url", "disclaimer"
492
+
493
+ @ST @standard-formats
494
+ Scenario: ST9 — a standard Ad whose creative cannot satisfy its standard's contract is not served
495
+ Given the app requests placement "sdk_st_card_incomplete"
496
+ Then no ad is served, and the placement answers with a clean no-fill
497
+
498
+ @ST @standard-formats
499
+ Scenario: ST10 — a legacy creative names no standard and carries no asset context
500
+ Given the app requests placement "home"
501
+ Then an ad is served
502
+ And exactly 1 decision is returned
503
+ And the creative is not a Journey Ad
504
+ And the creative's assetContext is absent
505
+ And the creative's effectiveStandardFormatKey is absent
506
+ And the creative's effectiveStandardFormatVersion is absent
507
+ And the creative's templateSource is absent
508
+
509
+ @ST @standard-formats
510
+ Scenario: ST11 — a Journey screen that cannot satisfy its standard is skipped and the next stage's screen answers
511
+ Given the app requests placement "sdk_st_journey_skip"
512
+ And the request carries a fresh session id
513
+ And the user has opted in to Journey Ads
514
+ Then an ad is served
515
+ And exactly 1 decision is returned
516
+ And the creative is a Journey Ad
517
+ And the creative's assetContext is absent
518
+ And the creative's effectiveStandardFormatKey is "card"
519
+ And the creative's effectiveStandardFormatVersion is 1
520
+ And the creative's templateSource is "admoai_standard"
521
+ And the template key is "card"
522
+ And the Journey stage is "complete"
523
+
524
+ @ST @standard-formats
525
+ Scenario: ST12 — a Journey screen serves the Card style saved on it
526
+ Given the app requests placement "sdk_st_journey_styles"
527
+ And the request carries a fresh session id
528
+ And the user has opted in to Journey Ads
529
+ Then an ad is served
530
+ And exactly 1 decision is returned
531
+ And the creative is a Journey Ad
532
+ And the template key is "card"
533
+ And the template style is one of "default", "tall"
534
+
388
535
  @F @fixture
389
536
  Scenario: F1 — a Native Display creative exposes its standard format, version and template source
390
537
  Given the app decodes the golden card.full response
package/scenarios.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "schemaVersion": 3,
2
+ "schemaVersion": 4,
3
3
  "description": "Shared cross-SDK E2E scenario manifest. ONE definition, executed by a thin interpreter in each SDK, so the three suites cannot drift. Declarative only: given a request, expect an outcome. Sponsored Pin tracking scenarios add `pinTracking`: the point-tracking calls an app makes on the served pins, as data, and the beacons that must reach the engine. Procedural scenarios (log capture, concurrency, retry, TTL waits) stay hand-written per SDK. Mirrored byte-identically into all three repos; a checksum test fails the build if the copies diverge. Every expected value here was verified against a live local decision-engine before being written. `fixtureScenarios` (schemaVersion 2) run offline: each decodes one golden decision-wire file (ui/platform/lib/ad-formats/golden-wire in adhub, shipped in this package under fixtures/golden-wire/) after optional `edits`, and asserts what the publisher's app reads from the decoded creative. `contentKeys` is the exact set of plain content keys (slides and matched points are asserted through their own fields); a key in `contentKeysAbsent` must decode as absent (null), never as an empty string or a placeholder; a null in `metadata` means absent. A runner that does not execute fixtureScenarios must refuse schemaVersion 2. A fixture scenario may add `slideTracking` (package 1.3.0, schemaVersion 3; a runner that does not execute it must refuse schemaVersion 3): `steps` the app takes on the decoded creative (`slideView`/`slideClick` with a 1-based slide index, `newResponse`, `fireClick` with a key or null for no key, `custom` with a key) and the beacons that must be dispatched: `beacons` is the exact ordered list of first-party beacons, each named by the tracker it must be (`slide`+`view`/`click`, or creative `click`/`custom`, with `response`), and `thirdPartyBeacons` the exact multiset of third-party tracker ids dispatched (their order is not asserted). An edit `at` `tracking` targets the creative's tracking object.",
4
4
  "scenarios": [
5
5
  {
@@ -941,6 +941,350 @@
941
941
  "engineAcceptsEveryBeacon": true
942
942
  }
943
943
  }
944
+ },
945
+ {
946
+ "id": "ST1",
947
+ "title": "a Card with only its required content serves under the Card standard",
948
+ "request": {
949
+ "placements": [
950
+ {
951
+ "key": "sdk_st_card_min"
952
+ }
953
+ ]
954
+ },
955
+ "expect": {
956
+ "outcome": "served",
957
+ "decisions": 1,
958
+ "creative": {
959
+ "journey": false,
960
+ "templateKey": "card",
961
+ "contentKeys": [
962
+ "image",
963
+ "destination_url"
964
+ ],
965
+ "metadata": {
966
+ "effectiveStandardFormatKey": "card",
967
+ "effectiveStandardFormatVersion": 1,
968
+ "templateSource": "admoai_standard",
969
+ "assetContext": null
970
+ }
971
+ }
972
+ }
973
+ },
974
+ {
975
+ "id": "ST2",
976
+ "title": "a Card with every optional content serves them all, in a style the standard defines",
977
+ "request": {
978
+ "placements": [
979
+ {
980
+ "key": "sdk_st_card_full"
981
+ }
982
+ ]
983
+ },
984
+ "expect": {
985
+ "outcome": "served",
986
+ "decisions": 1,
987
+ "creative": {
988
+ "journey": false,
989
+ "templateKey": "card",
990
+ "contentKeys": [
991
+ "image",
992
+ "brand_logo",
993
+ "headline",
994
+ "supporting_text",
995
+ "cta_text",
996
+ "destination_url"
997
+ ],
998
+ "metadata": {
999
+ "effectiveStandardFormatKey": "card",
1000
+ "effectiveStandardFormatVersion": 1,
1001
+ "templateSource": "admoai_standard",
1002
+ "assetContext": null
1003
+ },
1004
+ "styleIn": [
1005
+ "default",
1006
+ "tall"
1007
+ ]
1008
+ }
1009
+ }
1010
+ },
1011
+ {
1012
+ "id": "ST3",
1013
+ "title": "an Expandable Banner with only its required content serves under the Expandable Banner standard",
1014
+ "request": {
1015
+ "placements": [
1016
+ {
1017
+ "key": "sdk_st_expandable_banner_min"
1018
+ }
1019
+ ]
1020
+ },
1021
+ "expect": {
1022
+ "outcome": "served",
1023
+ "decisions": 1,
1024
+ "creative": {
1025
+ "journey": false,
1026
+ "templateKey": "expandable_banner",
1027
+ "contentKeys": [
1028
+ "teaser_image",
1029
+ "expanded_image",
1030
+ "destination_url"
1031
+ ],
1032
+ "metadata": {
1033
+ "effectiveStandardFormatKey": "expandable_banner",
1034
+ "effectiveStandardFormatVersion": 1,
1035
+ "templateSource": "admoai_standard",
1036
+ "assetContext": null
1037
+ }
1038
+ }
1039
+ }
1040
+ },
1041
+ {
1042
+ "id": "ST4",
1043
+ "title": "an Expandable Banner with every optional content serves them all",
1044
+ "request": {
1045
+ "placements": [
1046
+ {
1047
+ "key": "sdk_st_expandable_banner_full"
1048
+ }
1049
+ ]
1050
+ },
1051
+ "expect": {
1052
+ "outcome": "served",
1053
+ "decisions": 1,
1054
+ "creative": {
1055
+ "journey": false,
1056
+ "templateKey": "expandable_banner",
1057
+ "contentKeys": [
1058
+ "teaser_image",
1059
+ "teaser_headline",
1060
+ "expanded_image",
1061
+ "headline",
1062
+ "supporting_text",
1063
+ "cta_text",
1064
+ "destination_url",
1065
+ "disclaimer"
1066
+ ],
1067
+ "metadata": {
1068
+ "effectiveStandardFormatKey": "expandable_banner",
1069
+ "effectiveStandardFormatVersion": 1,
1070
+ "templateSource": "admoai_standard",
1071
+ "assetContext": null
1072
+ }
1073
+ }
1074
+ }
1075
+ },
1076
+ {
1077
+ "id": "ST5",
1078
+ "title": "a Branded Asset with only its required content serves with its asset context",
1079
+ "request": {
1080
+ "placements": [
1081
+ {
1082
+ "key": "sdk_st_branded_assets_min"
1083
+ }
1084
+ ]
1085
+ },
1086
+ "expect": {
1087
+ "outcome": "served",
1088
+ "decisions": 1,
1089
+ "creative": {
1090
+ "journey": false,
1091
+ "templateKey": "branded_assets",
1092
+ "contentKeys": [
1093
+ "branded_image"
1094
+ ],
1095
+ "metadata": {
1096
+ "effectiveStandardFormatKey": "branded_assets",
1097
+ "effectiveStandardFormatVersion": 1,
1098
+ "templateSource": "admoai_standard",
1099
+ "assetContext": "vehicle_marker"
1100
+ }
1101
+ }
1102
+ }
1103
+ },
1104
+ {
1105
+ "id": "ST6",
1106
+ "title": "a Branded Asset with every optional content serves them all, with its asset context",
1107
+ "request": {
1108
+ "placements": [
1109
+ {
1110
+ "key": "sdk_st_branded_assets_full"
1111
+ }
1112
+ ]
1113
+ },
1114
+ "expect": {
1115
+ "outcome": "served",
1116
+ "decisions": 1,
1117
+ "creative": {
1118
+ "journey": false,
1119
+ "templateKey": "branded_assets",
1120
+ "contentKeys": [
1121
+ "branded_image",
1122
+ "accessible_label",
1123
+ "destination_url"
1124
+ ],
1125
+ "metadata": {
1126
+ "effectiveStandardFormatKey": "branded_assets",
1127
+ "effectiveStandardFormatVersion": 1,
1128
+ "templateSource": "admoai_standard",
1129
+ "assetContext": "vehicle_marker"
1130
+ }
1131
+ }
1132
+ }
1133
+ },
1134
+ {
1135
+ "id": "ST7",
1136
+ "title": "a Standard Video with only its required content serves under the Standard Video standard",
1137
+ "request": {
1138
+ "placements": [
1139
+ {
1140
+ "key": "sdk_st_standard_video_min"
1141
+ }
1142
+ ]
1143
+ },
1144
+ "expect": {
1145
+ "outcome": "served",
1146
+ "decisions": 1,
1147
+ "creative": {
1148
+ "journey": false,
1149
+ "templateKey": "standard_video",
1150
+ "contentKeys": [
1151
+ "video_asset",
1152
+ "poster_image"
1153
+ ],
1154
+ "metadata": {
1155
+ "effectiveStandardFormatKey": "standard_video",
1156
+ "effectiveStandardFormatVersion": 1,
1157
+ "templateSource": "admoai_standard",
1158
+ "assetContext": null
1159
+ }
1160
+ }
1161
+ }
1162
+ },
1163
+ {
1164
+ "id": "ST8",
1165
+ "title": "a Standard Video with every optional content serves them all",
1166
+ "request": {
1167
+ "placements": [
1168
+ {
1169
+ "key": "sdk_st_standard_video_full"
1170
+ }
1171
+ ]
1172
+ },
1173
+ "expect": {
1174
+ "outcome": "served",
1175
+ "decisions": 1,
1176
+ "creative": {
1177
+ "journey": false,
1178
+ "templateKey": "standard_video",
1179
+ "contentKeys": [
1180
+ "video_asset",
1181
+ "poster_image",
1182
+ "brand_logo",
1183
+ "headline",
1184
+ "supporting_text",
1185
+ "cta_text",
1186
+ "destination_url",
1187
+ "disclaimer"
1188
+ ],
1189
+ "metadata": {
1190
+ "effectiveStandardFormatKey": "standard_video",
1191
+ "effectiveStandardFormatVersion": 1,
1192
+ "templateSource": "admoai_standard",
1193
+ "assetContext": null
1194
+ }
1195
+ }
1196
+ }
1197
+ },
1198
+ {
1199
+ "id": "ST9",
1200
+ "title": "a standard Ad whose creative cannot satisfy its standard's contract is not served",
1201
+ "request": {
1202
+ "placements": [
1203
+ {
1204
+ "key": "sdk_st_card_incomplete"
1205
+ }
1206
+ ]
1207
+ },
1208
+ "expect": {
1209
+ "outcome": "noAd"
1210
+ }
1211
+ },
1212
+ {
1213
+ "id": "ST10",
1214
+ "title": "a legacy creative names no standard and carries no asset context",
1215
+ "request": {
1216
+ "placements": [
1217
+ {
1218
+ "key": "home"
1219
+ }
1220
+ ]
1221
+ },
1222
+ "expect": {
1223
+ "outcome": "served",
1224
+ "decisions": 1,
1225
+ "creative": {
1226
+ "journey": false,
1227
+ "metadata": {
1228
+ "effectiveStandardFormatKey": null,
1229
+ "effectiveStandardFormatVersion": null,
1230
+ "templateSource": null,
1231
+ "assetContext": null
1232
+ }
1233
+ }
1234
+ }
1235
+ },
1236
+ {
1237
+ "id": "ST11",
1238
+ "title": "a Journey screen that cannot satisfy its standard is skipped and the next stage's screen answers",
1239
+ "request": {
1240
+ "placements": [
1241
+ {
1242
+ "key": "sdk_st_journey_skip"
1243
+ }
1244
+ ],
1245
+ "session": "auto",
1246
+ "journeyOpt": "in"
1247
+ },
1248
+ "expect": {
1249
+ "outcome": "served",
1250
+ "decisions": 1,
1251
+ "creative": {
1252
+ "journey": true,
1253
+ "journeyStageKey": "complete",
1254
+ "templateKey": "card",
1255
+ "metadata": {
1256
+ "effectiveStandardFormatKey": "card",
1257
+ "effectiveStandardFormatVersion": 1,
1258
+ "templateSource": "admoai_standard",
1259
+ "assetContext": null
1260
+ }
1261
+ }
1262
+ }
1263
+ },
1264
+ {
1265
+ "id": "ST12",
1266
+ "title": "a Journey screen serves the Card style saved on it",
1267
+ "request": {
1268
+ "placements": [
1269
+ {
1270
+ "key": "sdk_st_journey_styles"
1271
+ }
1272
+ ],
1273
+ "session": "auto",
1274
+ "journeyOpt": "in"
1275
+ },
1276
+ "expect": {
1277
+ "outcome": "served",
1278
+ "decisions": 1,
1279
+ "creative": {
1280
+ "journey": true,
1281
+ "templateKey": "card",
1282
+ "styleIn": [
1283
+ "default",
1284
+ "tall"
1285
+ ]
1286
+ }
1287
+ }
944
1288
  }
945
1289
  ],
946
1290
  "fixtureScenarios": [