@fluentcommerce/fc-connect-sdk 0.1.54 → 0.1.56
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 +12 -0
- package/README.md +11 -0
- package/dist/cjs/clients/fluent-client.js +13 -6
- package/dist/cjs/utils/pagination-helpers.js +38 -2
- package/dist/cjs/versori/fluent-versori-client.js +11 -5
- package/dist/esm/clients/fluent-client.js +13 -6
- package/dist/esm/utils/pagination-helpers.js +38 -2
- package/dist/esm/versori/fluent-versori-client.js +11 -5
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/docs/00-START-HERE/EXPORT-VALIDATION.md +158 -158
- package/docs/00-START-HERE/cli-analyze-source-structure-guide.md +655 -655
- package/docs/00-START-HERE/cli-documentation-index.md +202 -202
- package/docs/00-START-HERE/cli-quick-reference.md +252 -252
- package/docs/00-START-HERE/decision-tree.md +552 -552
- package/docs/00-START-HERE/getting-started.md +1070 -1070
- package/docs/00-START-HERE/mapper-quick-decision-guide.md +235 -235
- package/docs/00-START-HERE/readme.md +237 -237
- package/docs/00-START-HERE/retailerid-configuration.md +404 -404
- package/docs/00-START-HERE/sdk-philosophy.md +794 -794
- package/docs/00-START-HERE/troubleshooting-quick-reference.md +1086 -1086
- package/docs/01-TEMPLATES/faq.md +686 -686
- package/docs/01-TEMPLATES/patterns/pattern-templates-guide.md +68 -68
- package/docs/01-TEMPLATES/patterns/patterns-csv-schema-validation-and-rejection-report.md +233 -233
- package/docs/01-TEMPLATES/patterns/patterns-custom-resolvers.md +407 -407
- package/docs/01-TEMPLATES/patterns/patterns-error-handling-retry.md +511 -511
- package/docs/01-TEMPLATES/patterns/patterns-field-mapping-universal.md +701 -701
- package/docs/01-TEMPLATES/patterns/patterns-large-file-splitting.md +1430 -1430
- package/docs/01-TEMPLATES/patterns/patterns-master-data-etl.md +2399 -2399
- package/docs/01-TEMPLATES/patterns/patterns-pagination-streaming.md +447 -447
- package/docs/01-TEMPLATES/patterns/patterns-state-duplicate-prevention.md +385 -385
- package/docs/01-TEMPLATES/readme.md +957 -957
- package/docs/01-TEMPLATES/standalone/standalone-asn-inbound-processing.md +1209 -1209
- package/docs/01-TEMPLATES/standalone/standalone-graphql-query-export.md +1140 -1140
- package/docs/01-TEMPLATES/standalone/standalone-graphql-to-parquet-partitioned-s3.md +432 -432
- package/docs/01-TEMPLATES/standalone/standalone-multi-channel-inventory-sync.md +1185 -1185
- package/docs/01-TEMPLATES/standalone/standalone-multi-source-aggregation.md +1462 -1462
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-batch-api.md +1390 -1390
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-inventory-to-batch.md +330 -330
- package/docs/01-TEMPLATES/standalone/standalone-scripts-guide.md +87 -87
- package/docs/01-TEMPLATES/standalone/standalone-sftp-xml-graphql.md +1444 -1444
- package/docs/01-TEMPLATES/standalone/standalone-webhook-payload-processing.md +688 -688
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-dropship-order-routing.md +193 -193
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-graphql-parquet-extraction.md +518 -518
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-inter-location-transfers.md +2162 -2162
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-pre-order-allocation.md +2226 -2226
- package/docs/01-TEMPLATES/versori/business-examples/business-scenarios-guide.md +87 -87
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-connection-validation-pattern.md +656 -656
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-dual-workflow-connector.md +835 -835
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-guide.md +108 -108
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-kv-state-management.md +1533 -1533
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-xml-response-patterns.md +1160 -1160
- package/docs/01-TEMPLATES/versori/versori-platform-guide.md +201 -201
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-asn-purchase-order.md +1906 -1906
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-dropship-routing.md +1074 -1074
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-flash-sale-reserve.md +1395 -1395
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-generic-xml-order.md +888 -888
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-payment-gateway-integration.md +2478 -2478
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-rma-returns-comprehensive.md +2240 -2240
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-xml-order-ingestion.md +2029 -2029
- package/docs/01-TEMPLATES/versori/webhooks/webhook-templates-guide.md +140 -140
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/inventory-mapping.json +20 -20
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/products_2025-01-22.csv +11 -11
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/sample-data-guide.md +34 -34
- package/docs/01-TEMPLATES/versori/workflows/_examples/workflow-examples-guide.md +36 -36
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-modes-guide.md +1038 -1038
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-workflows-guide.md +138 -138
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/graphql-extraction-guide.md +63 -63
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-csv.md +2062 -2062
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-xml.md +2294 -2294
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-s3-csv.md +2461 -2461
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-sftp-xml.md +2529 -2529
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-csv.md +2464 -2464
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-json.md +1959 -1959
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-s3-csv.md +1953 -1953
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-sftp-xml.md +2541 -2541
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-s3-json.md +2384 -2384
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-sftp-xml.md +2445 -2445
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-csv.md +2355 -2355
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-json.md +2042 -2042
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-sftp-xml.md +2726 -2726
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/batch-api-guide.md +206 -206
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-cycle-count-reconciliation.md +2030 -2030
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md +1882 -1882
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md +2827 -2827
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-json-inventory-batch.md +1952 -1952
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-xml-inventory-batch.md +3289 -3289
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md +3064 -3064
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-json-inventory-batch.md +3238 -3238
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-xml-inventory-batch.md +2977 -2977
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/event-api-guide.md +321 -321
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-json-order-cancel-event.md +959 -959
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-xml-order-cancel-event.md +1170 -1170
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md +2312 -2312
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-json-product-event.md +2999 -2999
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-parquet-product-event.md +2836 -2836
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-xml-product-event.md +2395 -2395
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-csv-product-event.md +2295 -2295
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-json-product-event.md +2602 -2602
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-parquet-product-event.md +2589 -2589
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-xml-product-event.md +3578 -3578
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/graphql-mutations-guide.md +93 -93
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-json-order-update-graphql.md +1260 -1260
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-xml-order-update-graphql.md +1472 -1472
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-control-graphql.md +2417 -2417
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-location-graphql.md +2811 -2811
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-price-graphql.md +2619 -2619
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-json-location-graphql.md +2807 -2807
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-xml-location-graphql.md +2373 -2373
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-control-graphql.md +2740 -2740
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-location-graphql.md +2760 -2760
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-json-location-graphql.md +1710 -1710
- package/docs/01-TEMPLATES/versori/workflows/ingestion/ingestion-workflows-guide.md +136 -136
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/rubix-webhooks-guide.md +520 -520
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-inline.md +1418 -1418
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-universal-mapper.md +1785 -1785
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-order-attribute-update.md +824 -824
- package/docs/01-TEMPLATES/versori/workflows/workflows-overview-guide.md +646 -646
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-batch-archival.md +724 -724
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-job-tracker.md +627 -627
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-partial-batch-recovery.md +561 -561
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-quick-reference.md +367 -367
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-readme.md +407 -407
- package/docs/02-CORE-GUIDES/advanced-services/readme.md +49 -49
- package/docs/02-CORE-GUIDES/api-reference/api-reference-quick-reference.md +548 -548
- package/docs/02-CORE-GUIDES/api-reference/event-api-input-output-reference.md +702 -1171
- package/docs/02-CORE-GUIDES/api-reference/examples/client-initialization.ts +286 -286
- package/docs/02-CORE-GUIDES/api-reference/graphql-error-classification.md +337 -337
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md +399 -520
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-03-authentication.md +199 -199
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-04-graphql-mapping.md +925 -925
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-05-services.md +1198 -1198
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-06-data-sources.md +1083 -1083
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-07-parsers.md +1097 -1097
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-pagination.md +513 -513
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-types.md +545 -597
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-error-handling.md +527 -527
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-webhook-validation.md +514 -514
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-extraction.md +557 -557
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-utilities.md +412 -412
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-cli-tools.md +423 -423
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-error-handling.md +716 -716
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-analyze-source-structure.md +518 -518
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-partial-responses.md +212 -212
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-testing.md +300 -300
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-13-resolver-builder.md +322 -322
- package/docs/02-CORE-GUIDES/api-reference/readme.md +279 -279
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-quick-reference.md +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-readme.md +277 -277
- package/docs/02-CORE-GUIDES/auto-pagination/examples/auto-pagination-readme.md +178 -178
- package/docs/02-CORE-GUIDES/auto-pagination/examples/common-patterns.ts +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-products.ts +384 -384
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-virtual-positions.ts +308 -308
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-01-foundations.md +470 -470
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-02-quick-start.md +713 -713
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-03-configuration.md +754 -754
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-04-advanced-patterns.md +732 -732
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-05-sdk-integration.md +847 -847
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-06-troubleshooting.md +359 -359
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-07-api-reference.md +462 -462
- package/docs/02-CORE-GUIDES/auto-pagination/readme.md +54 -54
- package/docs/02-CORE-GUIDES/data-sources/data-sources-file-operations-error-handling.md +1487 -1487
- package/docs/02-CORE-GUIDES/data-sources/data-sources-quick-reference.md +836 -836
- package/docs/02-CORE-GUIDES/data-sources/data-sources-readme.md +276 -276
- package/docs/02-CORE-GUIDES/data-sources/data-sources-sftp-credential-access-security.md +553 -553
- package/docs/02-CORE-GUIDES/data-sources/examples/common-patterns.ts +409 -409
- package/docs/02-CORE-GUIDES/data-sources/examples/data-sources-readme.md +178 -178
- package/docs/02-CORE-GUIDES/data-sources/examples/s3-operations.ts +308 -308
- package/docs/02-CORE-GUIDES/data-sources/examples/sftp-operations.ts +371 -371
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-01-foundations.md +735 -735
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-02-s3-operations.md +1302 -1302
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-03-sftp-operations.md +1379 -1379
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-04-file-patterns.md +941 -941
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-05-advanced-topics.md +813 -813
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-06-integration-patterns.md +486 -486
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-07-troubleshooting.md +387 -387
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-08-api-reference.md +417 -417
- package/docs/02-CORE-GUIDES/data-sources/readme.md +77 -77
- package/docs/02-CORE-GUIDES/error-handling-guide.md +936 -936
- package/docs/02-CORE-GUIDES/extraction/examples/02-core-guides-extraction-readme.md +116 -116
- package/docs/02-CORE-GUIDES/extraction/examples/common-patterns.ts +428 -428
- package/docs/02-CORE-GUIDES/extraction/examples/extract-inventory-basic.ts +187 -187
- package/docs/02-CORE-GUIDES/extraction/extraction-quick-reference.md +596 -596
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-01-foundations.md +514 -514
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-02-basic-extraction.md +823 -823
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-03-parquet-processing.md +507 -507
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-04-data-enrichment.md +546 -546
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-05-transformation.md +494 -494
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-export-formats.md +458 -458
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-performance.md +138 -138
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-api-reference.md +148 -148
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-optimization.md +692 -692
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-08-extraction-orchestrator.md +1008 -1008
- package/docs/02-CORE-GUIDES/extraction/readme.md +151 -151
- package/docs/02-CORE-GUIDES/ingestion/examples/_simple-kv-store.ts +40 -40
- package/docs/02-CORE-GUIDES/ingestion/examples/error-recovery.ts +728 -728
- package/docs/02-CORE-GUIDES/ingestion/examples/event-driven.ts +501 -501
- package/docs/02-CORE-GUIDES/ingestion/examples/local-file-ingestion.ts +88 -88
- package/docs/02-CORE-GUIDES/ingestion/examples/parquet-ingestion.ts +117 -117
- package/docs/02-CORE-GUIDES/ingestion/examples/performance-optimized.ts +647 -647
- package/docs/02-CORE-GUIDES/ingestion/examples/s3-csv-ingestion.ts +169 -169
- package/docs/02-CORE-GUIDES/ingestion/examples/sftp-csv-ingestion.ts +134 -134
- package/docs/02-CORE-GUIDES/ingestion/ingestion-quick-reference.md +546 -546
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-01-introduction.md +626 -626
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-02-quick-start.md +658 -658
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-03-data-sources.md +1052 -1052
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-04-field-mapping.md +763 -763
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-05-advanced-parsers.md +676 -676
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-06-batch-api.md +1295 -1295
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-api-reference.md +138 -138
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-state-management.md +1037 -1037
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-08-performance-optimization.md +1349 -1349
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-09-best-practices.md +1893 -1893
- package/docs/02-CORE-GUIDES/ingestion/readme.md +160 -160
- package/docs/02-CORE-GUIDES/logging-guide.md +585 -585
- package/docs/02-CORE-GUIDES/mapping/error-handling-patterns.md +401 -401
- package/docs/02-CORE-GUIDES/mapping/examples/02-core-guides-mapping-readme.md +128 -128
- package/docs/02-CORE-GUIDES/mapping/examples/common-patterns.ts +273 -273
- package/docs/02-CORE-GUIDES/mapping/examples/csv-location-ingestion.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/csv-mapping.ts +242 -242
- package/docs/02-CORE-GUIDES/mapping/examples/graphql-to-parquet-extraction.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/json-mapping.ts +213 -213
- package/docs/02-CORE-GUIDES/mapping/examples/json-product-to-mutation.json +48 -48
- package/docs/02-CORE-GUIDES/mapping/examples/xml-mapping.ts +291 -291
- package/docs/02-CORE-GUIDES/mapping/examples/xml-order-to-mutation.json +45 -45
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-quick-reference.md +463 -463
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-readme.md +227 -227
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-01-introduction.md +222 -222
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-02-quick-start.md +351 -351
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-03-schema-validation.md +569 -569
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-04-mapping-patterns.md +471 -471
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-05-configuration-reference.md +611 -611
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-advanced-xpath.md +148 -148
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-path-syntax.md +464 -464
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-api-reference.md +94 -94
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-array-handling.md +307 -307
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-08-custom-resolvers.md +544 -544
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-09-advanced-patterns.md +427 -427
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-10-hooks-and-variables.md +336 -336
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-11-error-handling.md +488 -488
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-12-arguments-vs-nodes.md +383 -383
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-13-best-practices.md +477 -477
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/readme.md +62 -62
- package/docs/02-CORE-GUIDES/mapping/mapping-format-decision-tree.md +480 -480
- package/docs/02-CORE-GUIDES/mapping/mapping-graphql-alias-batching-guide.md +820 -820
- package/docs/02-CORE-GUIDES/mapping/mapping-javascript-objects.md +2369 -2369
- package/docs/02-CORE-GUIDES/mapping/mapping-mapper-comparison-guide.md +682 -682
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-07-api-reference.md +1327 -1327
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-08-error-handling.md +1142 -1142
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-04-use-cases.md +891 -891
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-helpers-resolvers.md +1126 -1126
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-sdk-resolvers.md +199 -199
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-07-api-reference.md +1319 -1319
- package/docs/02-CORE-GUIDES/mapping/readme.md +178 -178
- package/docs/02-CORE-GUIDES/mapping/resolver-registration.md +410 -410
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/common-patterns.ts +226 -226
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/custom-resolvers.ts +227 -227
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/sdk-resolvers-usage.ts +203 -203
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-readme.md +274 -274
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-api-reference.md +679 -679
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-cookbook.md +826 -826
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-guide.md +1330 -1330
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-helpers-reference.md +1437 -1437
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-parameters-reference.md +553 -553
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-troubleshooting.md +854 -854
- package/docs/02-CORE-GUIDES/mapping/resolvers/readme.md +75 -75
- package/docs/02-CORE-GUIDES/parsers/examples/02-core-guides-parsers-readme.md +161 -161
- package/docs/02-CORE-GUIDES/parsers/examples/csv-parser-examples.ts +110 -110
- package/docs/02-CORE-GUIDES/parsers/examples/json-parser-examples.ts +33 -33
- package/docs/02-CORE-GUIDES/parsers/examples/parquet-parser-examples.ts +47 -47
- package/docs/02-CORE-GUIDES/parsers/examples/xml-parser-examples.ts +38 -38
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-01-foundations.md +355 -355
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-02-csv-parser.md +772 -772
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-03-json-parser.md +789 -789
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-04-xml-parser.md +857 -857
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-05-parquet-parser.md +603 -603
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-integration-patterns.md +702 -702
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-streaming.md +121 -121
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-api-reference.md +89 -89
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-troubleshooting.md +727 -727
- package/docs/02-CORE-GUIDES/parsers/parsers-quick-reference.md +482 -482
- package/docs/02-CORE-GUIDES/parsers/parsers-readme.md +258 -258
- package/docs/02-CORE-GUIDES/parsers/readme.md +65 -65
- package/docs/02-CORE-GUIDES/readme.md +194 -194
- package/docs/02-CORE-GUIDES/webhook-validation/examples/basic-validation.ts +108 -108
- package/docs/02-CORE-GUIDES/webhook-validation/examples/common-patterns.ts +316 -316
- package/docs/02-CORE-GUIDES/webhook-validation/examples/webhook-validation-readme.md +61 -61
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-01-foundations.md +440 -440
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-02-quick-start.md +525 -525
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-03-versori-integration.md +741 -741
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-04-platform-integration.md +629 -629
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-05-configuration.md +535 -535
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-error-handling.md +611 -611
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-troubleshooting.md +124 -124
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-07-api-reference.md +511 -511
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-08-rubix-webhooks.md +590 -590
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-09-rubix-event-vs-http-call.md +432 -432
- package/docs/02-CORE-GUIDES/webhook-validation/readme.md +239 -239
- package/docs/02-CORE-GUIDES/webhook-validation/webhook-validation-quick-reference.md +392 -392
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-quick-reference.md +498 -498
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-readme.md +313 -313
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/common-patterns.ts +612 -612
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/connector-scenarios-readme.md +253 -253
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-01-foundations.md +452 -452
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-02-simple-scenarios.md +681 -681
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-03-intermediate-scenarios.md +637 -637
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-04-advanced-scenarios.md +650 -650
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-05-bidirectional-sync.md +233 -233
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-06-production-patterns.md +442 -442
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-07-reference.md +445 -445
- package/docs/03-PATTERN-GUIDES/connector-scenarios/readme.md +31 -31
- package/docs/03-PATTERN-GUIDES/enterprise-integration-patterns.md +1528 -1528
- package/docs/03-PATTERN-GUIDES/error-handling/comprehensive-error-handling-guide.md +1437 -1437
- package/docs/03-PATTERN-GUIDES/error-handling/error-handling-quick-reference.md +390 -390
- package/docs/03-PATTERN-GUIDES/error-handling/examples/common-patterns.ts +438 -438
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-01-foundations.md +362 -362
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-02-error-types.md +850 -850
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-03-utf8-handling.md +456 -456
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-04-error-scenarios.md +658 -658
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-05-calling-patterns.md +671 -671
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-06-retry-strategies.md +1034 -1034
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-07-monitoring.md +653 -653
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-08-api-reference.md +847 -847
- package/docs/03-PATTERN-GUIDES/error-handling/readme.md +36 -36
- package/docs/03-PATTERN-GUIDES/examples/__tests__/readme.md +40 -40
- package/docs/03-PATTERN-GUIDES/examples/__tests__/resolver-examples.test.js +282 -282
- package/docs/03-PATTERN-GUIDES/examples/test-data/03-pattern-guides-readme.md +110 -110
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-inventory.json +123 -123
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-order.json +171 -171
- package/docs/03-PATTERN-GUIDES/examples/test-data/readme.md +28 -28
- package/docs/03-PATTERN-GUIDES/extraction/extraction-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/extraction/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/file-operations/examples/common-patterns.ts +407 -407
- package/docs/03-PATTERN-GUIDES/file-operations/examples/file-operations-readme.md +142 -142
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-quick-reference.md +462 -462
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-readme.md +379 -379
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-01-foundations.md +430 -430
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-02-quick-start.md +484 -484
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-03-s3-operations.md +507 -507
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-04-sftp-operations.md +963 -963
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-05-streaming-performance.md +503 -503
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-archive-patterns.md +386 -386
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-error-handling.md +117 -117
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-api-reference.md +78 -78
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-testing-troubleshooting.md +567 -567
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-08-api-reference.md +1055 -1055
- package/docs/03-PATTERN-GUIDES/file-operations/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/ingestion/ingestion-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/ingestion/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/batch-processing.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/common-patterns.ts +360 -360
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/delta-sync.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/integration-patterns-readme.md +100 -100
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/real-time-webhook.ts +398 -398
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-quick-reference.md +962 -962
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-readme.md +134 -134
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-01-real-time-processing.md +991 -991
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-02-batch-processing.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-03-delta-sync.md +1108 -1108
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-04-webhook-patterns.md +1181 -1181
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-05-error-handling.md +1061 -1061
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-advanced-integration-services.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-performance.md +109 -109
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-07-api-reference.md +34 -34
- package/docs/03-PATTERN-GUIDES/integration-patterns/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/logging-minimal-mode.md +128 -128
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/common-patterns.ts +380 -380
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/multiple-connections-readme.md +139 -139
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/parallel-root-connections.ts +149 -149
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/real-world-scenarios.ts +405 -405
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-01-foundations.md +378 -378
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-02-quick-start.md +566 -566
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-03-targeting-connections.md +659 -659
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-04-parallel-queries.md +656 -656
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-05-best-practices.md +624 -624
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-api-reference.md +824 -824
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-versori.md +119 -119
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-07-api-reference.md +87 -87
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-quick-reference.md +353 -353
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-readme.md +270 -270
- package/docs/03-PATTERN-GUIDES/multiple-connections/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/pagination/pagination-readme.md +14 -14
- package/docs/03-PATTERN-GUIDES/pagination/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/parquet/examples/common-patterns.ts +180 -180
- package/docs/03-PATTERN-GUIDES/parquet/examples/read-parquet.ts +48 -48
- package/docs/03-PATTERN-GUIDES/parquet/examples/write-parquet.ts +65 -65
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-01-introduction.md +393 -393
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-02-quick-start.md +572 -572
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-03-reading-parquet.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-04-writing-parquet.md +554 -554
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-05-graphql-extraction.md +405 -405
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-performance.md +104 -104
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-s3-integration.md +511 -511
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-api-reference.md +90 -90
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-performance-optimization.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-08-best-practices.md +712 -712
- package/docs/03-PATTERN-GUIDES/parquet/parquet-quick-reference.md +683 -683
- package/docs/03-PATTERN-GUIDES/parquet/parquet-readme.md +248 -248
- package/docs/03-PATTERN-GUIDES/parquet/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/parsers/parsers-readme.md +12 -12
- package/docs/03-PATTERN-GUIDES/parsers/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/readme.md +159 -159
- package/docs/03-PATTERN-GUIDES/webhooks/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/webhooks/webhooks-readme.md +8 -8
- package/docs/04-REFERENCE/architecture/architecture-01-overview.md +427 -427
- package/docs/04-REFERENCE/architecture/architecture-02-client-architecture.md +424 -424
- package/docs/04-REFERENCE/architecture/architecture-03-data-flow.md +690 -690
- package/docs/04-REFERENCE/architecture/architecture-04-service-layer.md +834 -834
- package/docs/04-REFERENCE/architecture/architecture-05-integration-architecture.md +655 -655
- package/docs/04-REFERENCE/architecture/architecture-06-state-management.md +653 -653
- package/docs/04-REFERENCE/architecture/architecture-adding-new-data-sources.md +686 -686
- package/docs/04-REFERENCE/architecture/readme.md +279 -279
- package/docs/04-REFERENCE/platforms/deno/readme.md +117 -117
- package/docs/04-REFERENCE/platforms/nodejs/readme.md +146 -146
- package/docs/04-REFERENCE/platforms/readme.md +135 -135
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-01-introduction.md +398 -398
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-02-quick-start.md +560 -560
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-03-authentication.md +757 -757
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-04-workflows.md +2476 -2476
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-05-connections.md +1167 -1167
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-kv-storage.md +990 -990
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-state-management.md +121 -121
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-api-reference.md +68 -68
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-deployment.md +731 -731
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-08-best-practices.md +1111 -1111
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-09-signature-reference.md +766 -766
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-readme.md +299 -299
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-s3-sftp-configuration-guide.md +1425 -1425
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-api-key-security.md +816 -816
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-connection-security.md +681 -681
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-workflow-task-types.md +708 -708
- package/docs/04-REFERENCE/platforms/versori/readme.md +108 -108
- package/docs/04-REFERENCE/readme.md +148 -148
- package/docs/04-REFERENCE/resolver-signature/examples/advanced-resolvers.ts +482 -482
- package/docs/04-REFERENCE/resolver-signature/examples/async-resolvers.ts +496 -496
- package/docs/04-REFERENCE/resolver-signature/examples/basic-resolvers.ts +343 -343
- package/docs/04-REFERENCE/resolver-signature/examples/resolver-signature-readme.md +188 -188
- package/docs/04-REFERENCE/resolver-signature/examples/testing-resolvers.ts +463 -463
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-01-foundations.md +286 -286
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-02-parameter-reference.md +643 -643
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-03-basic-examples.md +521 -521
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-04-advanced-patterns.md +739 -739
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-05-sdk-resolvers.md +531 -531
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-migration-guide.md +650 -650
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-testing.md +125 -125
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-07-api-reference.md +794 -794
- package/docs/04-REFERENCE/resolver-signature/readme.md +64 -64
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-quick-reference.md +270 -270
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-readme.md +351 -351
- package/docs/04-REFERENCE/schema/fluent-commerce-schema.json +764 -764
- package/docs/04-REFERENCE/schema/readme.md +141 -141
- package/docs/04-REFERENCE/testing/examples/04-reference-testing-readme.md +158 -158
- package/docs/04-REFERENCE/testing/examples/fluent-testing.ts +62 -62
- package/docs/04-REFERENCE/testing/examples/health-check.ts +155 -155
- package/docs/04-REFERENCE/testing/examples/integration-test.ts +119 -119
- package/docs/04-REFERENCE/testing/examples/performance-test.ts +183 -183
- package/docs/04-REFERENCE/testing/examples/s3-testing.ts +127 -127
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-01-foundations.md +267 -267
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-02-s3-testing.md +599 -599
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-03-fluent-testing.md +589 -589
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-04-integration-testing.md +699 -699
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-05-debugging.md +478 -478
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-cicd-integration.md +463 -463
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-preflight-validation.md +131 -131
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-best-practices.md +499 -499
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-coverage-ci.md +165 -165
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-08-api-reference.md +634 -634
- package/docs/04-REFERENCE/testing/readme.md +86 -86
- package/docs/04-REFERENCE/testing/testing-quick-reference.md +667 -667
- package/docs/04-REFERENCE/testing/testing-readme.md +286 -286
- package/docs/04-REFERENCE/troubleshooting/readme.md +144 -144
- package/docs/04-REFERENCE/troubleshooting/troubleshooting-deno-sftp-compatibility.md +392 -392
- package/docs/template-loading-matrix.md +242 -242
- package/package.json +5 -3
- package/docs/02-CORE-GUIDES/api-reference/cli-profile-integration.md +0 -377
|
@@ -1,499 +1,499 @@
|
|
|
1
|
-
# Module 7: Best Practices
|
|
2
|
-
|
|
3
|
-
**Level:** Intermediate
|
|
4
|
-
**Estimated Time:** 15 minutes
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
This module covers testing best practices, common pitfalls to avoid, and strategies for reliable testing.
|
|
9
|
-
|
|
10
|
-
## Learning Objectives
|
|
11
|
-
|
|
12
|
-
By the end of this module, you will:
|
|
13
|
-
- ✅ Know essential testing best practices
|
|
14
|
-
- ✅ Understand common pitfalls and how to avoid them
|
|
15
|
-
- ✅ Be able to implement reliable testing strategies
|
|
16
|
-
- ✅ Know when and how to test different scenarios
|
|
17
|
-
|
|
18
|
-
## Essential Best Practices
|
|
19
|
-
|
|
20
|
-
### 1. Test Early and Often
|
|
21
|
-
|
|
22
|
-
**Run connectivity tests before starting development:**
|
|
23
|
-
|
|
24
|
-
```typescript
|
|
25
|
-
// ✅ GOOD: Test connectivity before building integration
|
|
26
|
-
async function setup() {
|
|
27
|
-
console.log('Validating connectivity...');
|
|
28
|
-
|
|
29
|
-
const s3Tester = new S3SDKTester({
|
|
30
|
-
region: process.env.AWS_REGION,
|
|
31
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
32
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
const s3Result = await s3Tester.testAll(process.env.TEST_BUCKET);
|
|
36
|
-
|
|
37
|
-
const client = await createClient({ /* config */ });
|
|
38
|
-
const fluentTester = new FluentConnectionTester(client, { logger: console });
|
|
39
|
-
const fluentResult = await fluentTester.testConnection();
|
|
40
|
-
|
|
41
|
-
if (!s3Result.summary.success || !fluentResult.success) {
|
|
42
|
-
throw new Error('Connectivity validation failed. Fix issues before proceeding.');
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
console.log('✅ Connectivity validated, proceeding with development');
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// ❌ BAD: Build entire integration without testing connectivity
|
|
49
|
-
async function buildIntegration() {
|
|
50
|
-
// Hours of development later...
|
|
51
|
-
// Deployment fails due to missing S3 permissions
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 2. Use Test Environments
|
|
56
|
-
|
|
57
|
-
**Never test against production:**
|
|
58
|
-
|
|
59
|
-
```typescript
|
|
60
|
-
// ✅ GOOD: Separate test and production configurations
|
|
61
|
-
const config = {
|
|
62
|
-
test: {
|
|
63
|
-
s3Bucket: 'test-bucket',
|
|
64
|
-
fluentRetailerId: 'test-retailer'
|
|
65
|
-
},
|
|
66
|
-
production: {
|
|
67
|
-
s3Bucket: 'production-bucket',
|
|
68
|
-
fluentRetailerId: 'prod-retailer'
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const env = process.env.NODE_ENV === 'production' ? 'production' : 'test';
|
|
73
|
-
const activeConfig = config[env];
|
|
74
|
-
|
|
75
|
-
// ❌ BAD: Same configuration for test and production
|
|
76
|
-
const bucket = 'production-bucket'; // Tests will affect production!
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### 3. Clean Up Test Data
|
|
80
|
-
|
|
81
|
-
**Always clean up after tests:**
|
|
82
|
-
|
|
83
|
-
```typescript
|
|
84
|
-
// ✅ GOOD: Cleanup test objects after tests
|
|
85
|
-
async function testWithCleanup() {
|
|
86
|
-
const tester = new S3SDKTester(config);
|
|
87
|
-
const testBucket = process.env.TEST_BUCKET;
|
|
88
|
-
const testPrefix = 'test/';
|
|
89
|
-
|
|
90
|
-
try {
|
|
91
|
-
const result = await tester.testAll(testBucket);
|
|
92
|
-
return result;
|
|
93
|
-
} finally {
|
|
94
|
-
// Clean up test objects from S3
|
|
95
|
-
try {
|
|
96
|
-
const s3 = new S3Service(config);
|
|
97
|
-
const objects = await s3.listObjects(testBucket, {
|
|
98
|
-
prefix: testPrefix
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
for (const obj of objects) {
|
|
102
|
-
await s3.deleteObject(testBucket, obj.Key);
|
|
103
|
-
}
|
|
104
|
-
console.log('✅ Test data cleaned up');
|
|
105
|
-
} catch (error) {
|
|
106
|
-
console.warn('⚠️ Cleanup warning:', error.message);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// ❌ BAD: No cleanup, test files accumulate
|
|
112
|
-
async function testWithoutCleanup() {
|
|
113
|
-
const result = await tester.testAll(testBucket);
|
|
114
|
-
// Test files left in S3 bucket
|
|
115
|
-
return result;
|
|
116
|
-
}
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### 4. Monitor Performance
|
|
120
|
-
|
|
121
|
-
**Track test duration trends:**
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
// ✅ GOOD: Track and alert on performance degradation
|
|
125
|
-
class PerformanceMonitor {
|
|
126
|
-
private baseline: number | null = null;
|
|
127
|
-
|
|
128
|
-
async monitorTest(testFn: () => Promise<TestResult>) {
|
|
129
|
-
const result = await testFn();
|
|
130
|
-
|
|
131
|
-
if (this.baseline === null) {
|
|
132
|
-
this.baseline = result.duration;
|
|
133
|
-
console.log(`Baseline set: ${this.baseline}ms`);
|
|
134
|
-
} else {
|
|
135
|
-
const degradation = ((result.duration - this.baseline) / this.baseline) * 100;
|
|
136
|
-
|
|
137
|
-
if (degradation > 50) {
|
|
138
|
-
console.warn(`⚠️ Performance degradation: ${degradation.toFixed(2)}% slower`);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return result;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### 5. Test Error Scenarios
|
|
148
|
-
|
|
149
|
-
**Validate error handling works:**
|
|
150
|
-
|
|
151
|
-
```typescript
|
|
152
|
-
// ✅ GOOD: Test both success and failure scenarios
|
|
153
|
-
async function comprehensiveTests() {
|
|
154
|
-
const testBucket = process.env.TEST_BUCKET;
|
|
155
|
-
|
|
156
|
-
// Test success case
|
|
157
|
-
const successTester = new S3SDKTester({
|
|
158
|
-
region: process.env.AWS_REGION,
|
|
159
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
160
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
const successResult = await successTester.testAll(testBucket);
|
|
164
|
-
console.log('Success case:', successResult.summary.success ? '✅' : ');
|
|
165
|
-
|
|
166
|
-
// Test with invalid credentials (error case)
|
|
167
|
-
const errorTester = new S3SDKTester({
|
|
168
|
-
region: process.env.AWS_REGION,
|
|
169
|
-
accessKeyId: 'INVALID_KEY',
|
|
170
|
-
secretAccessKey: 'INVALID_SECRET'
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
const errorResult = await errorTester.testAll(testBucket);
|
|
174
|
-
console.log('Error handling:', !errorResult.summary.success ? '✅' : ');
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// ❌ BAD: Only test happy path
|
|
178
|
-
async function limitedTests() {
|
|
179
|
-
const result = await tester.testAll(testBucket);
|
|
180
|
-
// What happens when credentials are invalid?
|
|
181
|
-
}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### 6. Use Appropriate Timeouts
|
|
185
|
-
|
|
186
|
-
**Set realistic timeout values in test execution:**
|
|
187
|
-
|
|
188
|
-
```typescript
|
|
189
|
-
// ✅ GOOD: Run tests with appropriate timeout
|
|
190
|
-
jest.setTimeout(60000); // 60 seconds for S3 and Fluent tests
|
|
191
|
-
|
|
192
|
-
test('S3 connectivity', async () => {
|
|
193
|
-
const tester = new S3SDKTester(config);
|
|
194
|
-
const result = await tester.testAll('test-bucket');
|
|
195
|
-
expect(result.summary.failed).toBe(0);
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
// ✅ GOOD: Node.js script with reasonable execution window
|
|
199
|
-
async function runTests() {
|
|
200
|
-
const startTime = Date.now();
|
|
201
|
-
const results = await tester.testAll(testBucket);
|
|
202
|
-
const duration = Date.now() - startTime;
|
|
203
|
-
console.log(`Tests completed in ${duration}ms`);
|
|
204
|
-
|
|
205
|
-
if (duration > 120000) {
|
|
206
|
-
console.warn('⚠️ Tests took longer than expected');
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// ❌ BAD: Too short, causes false failures
|
|
211
|
-
jest.setTimeout(1000); // 1s is too short for S3/Fluent operations
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### 7. Document Test Results
|
|
215
|
-
|
|
216
|
-
**Keep records of test runs:**
|
|
217
|
-
|
|
218
|
-
```typescript
|
|
219
|
-
// ✅ GOOD: Log test results with timestamps
|
|
220
|
-
class TestLogger {
|
|
221
|
-
private logs: any[] = [];
|
|
222
|
-
|
|
223
|
-
async logTestRun(testName: string, result: TestResult) {
|
|
224
|
-
const logEntry = {
|
|
225
|
-
timestamp: new Date().toISOString(),
|
|
226
|
-
testName,
|
|
227
|
-
success: result.success,
|
|
228
|
-
duration: result.duration,
|
|
229
|
-
errors: result.errors,
|
|
230
|
-
warnings: result.warnings
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
this.logs.push(logEntry);
|
|
234
|
-
|
|
235
|
-
// Save to file
|
|
236
|
-
const fs = require('fs');
|
|
237
|
-
fs.appendFileSync(
|
|
238
|
-
'test-history.jsonl',
|
|
239
|
-
JSON.stringify(logEntry) + '\n'
|
|
240
|
-
);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
getHistory() {
|
|
244
|
-
return this.logs;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
### 8. Automate Tests in CI/CD
|
|
250
|
-
|
|
251
|
-
**Include tests in deployment pipeline:**
|
|
252
|
-
|
|
253
|
-
```typescript
|
|
254
|
-
// ✅ GOOD: Pre-deployment validation
|
|
255
|
-
async function preDeploymentChecks() {
|
|
256
|
-
console.log('Running pre-deployment tests...\n');
|
|
257
|
-
|
|
258
|
-
const testBucket = process.env.TEST_BUCKET;
|
|
259
|
-
|
|
260
|
-
// S3 Connectivity Test
|
|
261
|
-
console.log('1. Testing S3 Connectivity...');
|
|
262
|
-
const s3Tester = new S3SDKTester({
|
|
263
|
-
region: process.env.AWS_REGION,
|
|
264
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
265
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
const s3Result = await s3Tester.testAll(testBucket);
|
|
269
|
-
if (!s3Result.summary.success) {
|
|
270
|
-
console.error('❌ S3 test failed - BLOCKING DEPLOYMENT');
|
|
271
|
-
process.exit(1);
|
|
272
|
-
}
|
|
273
|
-
console.log('✅ S3 Connectivity passed');
|
|
274
|
-
|
|
275
|
-
// Fluent API Test
|
|
276
|
-
console.log('\n2. Testing Fluent API...');
|
|
277
|
-
const client = await createClient({ /* config */ });
|
|
278
|
-
const fluentTester = new FluentConnectionTester(client, { logger: console });
|
|
279
|
-
const fluentResult = await fluentTester.testConnection();
|
|
280
|
-
|
|
281
|
-
if (!fluentResult.success) {
|
|
282
|
-
console.error('❌ Fluent test failed - BLOCKING DEPLOYMENT');
|
|
283
|
-
process.exit(1);
|
|
284
|
-
}
|
|
285
|
-
console.log('✅ Fluent API Connectivity passed');
|
|
286
|
-
|
|
287
|
-
console.log('\n✅ All pre-deployment checks passed - OK TO DEPLOY');
|
|
288
|
-
}
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
## Common Pitfalls to Avoid
|
|
292
|
-
|
|
293
|
-
### Pitfall 1: Hardcoded Credentials
|
|
294
|
-
|
|
295
|
-
```typescript
|
|
296
|
-
// ❌ BAD: Credentials in code
|
|
297
|
-
const config = {
|
|
298
|
-
accessKeyId: 'AKIAIOSFODNN7EXAMPLE', // Never do this!
|
|
299
|
-
secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
|
|
300
|
-
};
|
|
301
|
-
|
|
302
|
-
// ✅ GOOD: Environment variables
|
|
303
|
-
const config = {
|
|
304
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
305
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
|
|
306
|
-
};
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
### Pitfall 2: Testing in Production
|
|
310
|
-
|
|
311
|
-
```typescript
|
|
312
|
-
// ❌ BAD: Production bucket for testing
|
|
313
|
-
const testBucket = 'production-data';
|
|
314
|
-
|
|
315
|
-
// ✅ GOOD: Separate test bucket
|
|
316
|
-
const testBucket = process.env.NODE_ENV === 'production'
|
|
317
|
-
? null // Prevent accidental production testing
|
|
318
|
-
: 'test-data';
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
### Pitfall 3: Not Handling Async Properly
|
|
322
|
-
|
|
323
|
-
```typescript
|
|
324
|
-
// ❌ BAD: Missing await, test exits before completion
|
|
325
|
-
function badTest() {
|
|
326
|
-
tester.runTests(); // Missing await!
|
|
327
|
-
console.log('Done'); // Executes immediately
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
// ✅ GOOD: Proper async handling
|
|
331
|
-
async function goodTest() {
|
|
332
|
-
const results = await tester.testAll(testBucket);
|
|
333
|
-
console.log('Done:', results.summary.failed === 0 ? 'PASSED' : 'FAILED');
|
|
334
|
-
}
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
### Pitfall 4: Ignoring Warnings
|
|
338
|
-
|
|
339
|
-
```typescript
|
|
340
|
-
// ❌ BAD: Ignore warnings
|
|
341
|
-
if (result.success) {
|
|
342
|
-
// Warnings might indicate future problems!
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// ✅ GOOD: Check and act on warnings
|
|
347
|
-
if (result.success) {
|
|
348
|
-
if (result.warnings.length > 0) {
|
|
349
|
-
console.warn('⚠️ Tests passed with warnings:');
|
|
350
|
-
result.warnings.forEach(w => console.warn(` - ${w}`));
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
### Pitfall 5: Ignoring Test Results Structure
|
|
356
|
-
|
|
357
|
-
```typescript
|
|
358
|
-
// ❌ BAD: Checking wrong property
|
|
359
|
-
const result = await tester.testAll(testBucket);
|
|
360
|
-
if (result.success) { // S3SDKTester doesn't have top-level success property
|
|
361
|
-
console.log('Tests passed');
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
// ✅ GOOD: Check the summary object
|
|
365
|
-
const result = await tester.testAll(testBucket);
|
|
366
|
-
if (result.summary.failed === 0) {
|
|
367
|
-
console.log('Tests passed');
|
|
368
|
-
console.log(`Passed: ${result.summary.passed}/${result.summary.total}`);
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
// ✅ GOOD: Access individual test results
|
|
372
|
-
if (result.tests.list.success && result.tests.write.success) {
|
|
373
|
-
console.log('Core operations passed');
|
|
374
|
-
}
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
## Testing Strategies
|
|
378
|
-
|
|
379
|
-
### Strategy 1: Smoke Tests
|
|
380
|
-
|
|
381
|
-
Quick tests to verify basic functionality:
|
|
382
|
-
|
|
383
|
-
```typescript
|
|
384
|
-
async function smokeTest() {
|
|
385
|
-
// Quick S3 list test
|
|
386
|
-
const s3Tester = new S3SDKTester(config);
|
|
387
|
-
const s3Result = await s3Tester.testAll(testBucket);
|
|
388
|
-
|
|
389
|
-
// Quick Fluent authentication test
|
|
390
|
-
const fluentTester = new FluentConnectionTester(client, { logger: console });
|
|
391
|
-
const fluentResult = await fluentTester.testConnection();
|
|
392
|
-
|
|
393
|
-
return s3Result.summary.failed === 0 && fluentResult.success;
|
|
394
|
-
}
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
### Strategy 2: Comprehensive Tests
|
|
398
|
-
|
|
399
|
-
Thorough testing of all operations:
|
|
400
|
-
|
|
401
|
-
```typescript
|
|
402
|
-
async function comprehensiveTest() {
|
|
403
|
-
const s3Tester = new S3SDKTester(config);
|
|
404
|
-
const s3Result = await s3Tester.testAll(testBucket);
|
|
405
|
-
|
|
406
|
-
const fluentTester = new FluentConnectionTester(client, { logger: console });
|
|
407
|
-
const fluentResult = await fluentTester.testConnection();
|
|
408
|
-
|
|
409
|
-
return {
|
|
410
|
-
s3: s3Result.summary.failed === 0,
|
|
411
|
-
fluent: fluentResult.success,
|
|
412
|
-
s3Details: s3Result.tests,
|
|
413
|
-
fluentDetails: fluentResult
|
|
414
|
-
};
|
|
415
|
-
}
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
### Strategy 3: Progressive Testing
|
|
419
|
-
|
|
420
|
-
Test incrementally to isolate issues:
|
|
421
|
-
|
|
422
|
-
```typescript
|
|
423
|
-
async function progressiveTest() {
|
|
424
|
-
// Step 1: S3 Connectivity
|
|
425
|
-
console.log('Step 1: Testing S3...');
|
|
426
|
-
const s3Tester = new S3SDKTester(config);
|
|
427
|
-
const s3Result = await s3Tester.testAll(testBucket);
|
|
428
|
-
|
|
429
|
-
if (s3Result.summary.failed > 0) {
|
|
430
|
-
return { step: 's3', success: false, details: s3Result.tests };
|
|
431
|
-
}
|
|
432
|
-
console.log('✅ S3 passed\n');
|
|
433
|
-
|
|
434
|
-
// Step 2: Fluent Connectivity
|
|
435
|
-
console.log('Step 2: Testing Fluent...');
|
|
436
|
-
const fluentTester = new FluentConnectionTester(client, { logger: console });
|
|
437
|
-
const fluentResult = await fluentTester.testConnection();
|
|
438
|
-
|
|
439
|
-
if (!fluentResult.success) {
|
|
440
|
-
return { step: 'fluent', success: false, message: fluentResult.message };
|
|
441
|
-
}
|
|
442
|
-
console.log('✅ Fluent passed\n');
|
|
443
|
-
|
|
444
|
-
return { step: 'complete', success: true };
|
|
445
|
-
}
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
## Testing Checklist
|
|
449
|
-
|
|
450
|
-
Before deploying, verify:
|
|
451
|
-
|
|
452
|
-
- [ ] All environment variables set correctly
|
|
453
|
-
- [ ] Tests pass in test environment
|
|
454
|
-
- [ ] S3 permissions validated
|
|
455
|
-
- [ ] Fluent API connectivity confirmed
|
|
456
|
-
- [ ] Error scenarios tested
|
|
457
|
-
- [ ] Performance is acceptable
|
|
458
|
-
- [ ] Test data cleaned up
|
|
459
|
-
- [ ] Results documented
|
|
460
|
-
- [ ] CI/CD pipeline configured
|
|
461
|
-
- [ ] Production credentials secured
|
|
462
|
-
|
|
463
|
-
## Key Takeaways
|
|
464
|
-
|
|
465
|
-
- 🎯 Test early and often to catch issues before they become problems
|
|
466
|
-
- 🎯 Always use test environments, never test in production
|
|
467
|
-
- 🎯 Clean up test data to avoid accumulation
|
|
468
|
-
- 🎯 Monitor performance trends to detect degradation
|
|
469
|
-
- 🎯 Test both success and error scenarios
|
|
470
|
-
- 🎯 Document test results for historical analysis
|
|
471
|
-
- 🎯 Automate tests in CI/CD pipelines
|
|
472
|
-
- 🎯 Avoid common pitfalls like hardcoded credentials
|
|
473
|
-
|
|
474
|
-
## Practice Exercise
|
|
475
|
-
|
|
476
|
-
Create a comprehensive testing strategy for your project:
|
|
477
|
-
|
|
478
|
-
```typescript
|
|
479
|
-
async function myTestingStrategy() {
|
|
480
|
-
// TODO: Define test environments
|
|
481
|
-
// TODO: Configure testers
|
|
482
|
-
// TODO: Implement smoke tests
|
|
483
|
-
// TODO: Implement comprehensive tests
|
|
484
|
-
// TODO: Add cleanup logic
|
|
485
|
-
// TODO: Document results
|
|
486
|
-
}
|
|
487
|
-
```
|
|
488
|
-
|
|
489
|
-
## Next Steps
|
|
490
|
-
|
|
491
|
-
Continue to [Module 8: API Reference →](../../../03-PATTERN-GUIDES/error-handling/modules/error-handling-08-api-reference.md) for complete API documentation.
|
|
492
|
-
|
|
493
|
-
---
|
|
494
|
-
|
|
495
|
-
**Module Navigation:**
|
|
496
|
-
- **Previous:** [Module 6 - CI/CD Integration](./04-reference-testing-06-cicd-integration.md)
|
|
497
|
-
- **Current:** Module 7 - Best Practices
|
|
498
|
-
- **Next:** [Module 8 - API Reference](../../../03-PATTERN-GUIDES/error-handling/modules/error-handling-08-api-reference.md)
|
|
499
|
-
- **Back to:** [Testing Guide Index](../testing-readme.md)
|
|
1
|
+
# Module 7: Best Practices
|
|
2
|
+
|
|
3
|
+
**Level:** Intermediate
|
|
4
|
+
**Estimated Time:** 15 minutes
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
This module covers testing best practices, common pitfalls to avoid, and strategies for reliable testing.
|
|
9
|
+
|
|
10
|
+
## Learning Objectives
|
|
11
|
+
|
|
12
|
+
By the end of this module, you will:
|
|
13
|
+
- ✅ Know essential testing best practices
|
|
14
|
+
- ✅ Understand common pitfalls and how to avoid them
|
|
15
|
+
- ✅ Be able to implement reliable testing strategies
|
|
16
|
+
- ✅ Know when and how to test different scenarios
|
|
17
|
+
|
|
18
|
+
## Essential Best Practices
|
|
19
|
+
|
|
20
|
+
### 1. Test Early and Often
|
|
21
|
+
|
|
22
|
+
**Run connectivity tests before starting development:**
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
// ✅ GOOD: Test connectivity before building integration
|
|
26
|
+
async function setup() {
|
|
27
|
+
console.log('Validating connectivity...');
|
|
28
|
+
|
|
29
|
+
const s3Tester = new S3SDKTester({
|
|
30
|
+
region: process.env.AWS_REGION,
|
|
31
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
32
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const s3Result = await s3Tester.testAll(process.env.TEST_BUCKET);
|
|
36
|
+
|
|
37
|
+
const client = await createClient({ /* config */ });
|
|
38
|
+
const fluentTester = new FluentConnectionTester(client, { logger: console });
|
|
39
|
+
const fluentResult = await fluentTester.testConnection();
|
|
40
|
+
|
|
41
|
+
if (!s3Result.summary.success || !fluentResult.success) {
|
|
42
|
+
throw new Error('Connectivity validation failed. Fix issues before proceeding.');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
console.log('✅ Connectivity validated, proceeding with development');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// ❌ BAD: Build entire integration without testing connectivity
|
|
49
|
+
async function buildIntegration() {
|
|
50
|
+
// Hours of development later...
|
|
51
|
+
// Deployment fails due to missing S3 permissions
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 2. Use Test Environments
|
|
56
|
+
|
|
57
|
+
**Never test against production:**
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
// ✅ GOOD: Separate test and production configurations
|
|
61
|
+
const config = {
|
|
62
|
+
test: {
|
|
63
|
+
s3Bucket: 'test-bucket',
|
|
64
|
+
fluentRetailerId: 'test-retailer'
|
|
65
|
+
},
|
|
66
|
+
production: {
|
|
67
|
+
s3Bucket: 'production-bucket',
|
|
68
|
+
fluentRetailerId: 'prod-retailer'
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const env = process.env.NODE_ENV === 'production' ? 'production' : 'test';
|
|
73
|
+
const activeConfig = config[env];
|
|
74
|
+
|
|
75
|
+
// ❌ BAD: Same configuration for test and production
|
|
76
|
+
const bucket = 'production-bucket'; // Tests will affect production!
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 3. Clean Up Test Data
|
|
80
|
+
|
|
81
|
+
**Always clean up after tests:**
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
// ✅ GOOD: Cleanup test objects after tests
|
|
85
|
+
async function testWithCleanup() {
|
|
86
|
+
const tester = new S3SDKTester(config);
|
|
87
|
+
const testBucket = process.env.TEST_BUCKET;
|
|
88
|
+
const testPrefix = 'test/';
|
|
89
|
+
|
|
90
|
+
try {
|
|
91
|
+
const result = await tester.testAll(testBucket);
|
|
92
|
+
return result;
|
|
93
|
+
} finally {
|
|
94
|
+
// Clean up test objects from S3
|
|
95
|
+
try {
|
|
96
|
+
const s3 = new S3Service(config);
|
|
97
|
+
const objects = await s3.listObjects(testBucket, {
|
|
98
|
+
prefix: testPrefix
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
for (const obj of objects) {
|
|
102
|
+
await s3.deleteObject(testBucket, obj.Key);
|
|
103
|
+
}
|
|
104
|
+
console.log('✅ Test data cleaned up');
|
|
105
|
+
} catch (error) {
|
|
106
|
+
console.warn('⚠️ Cleanup warning:', error.message);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// ❌ BAD: No cleanup, test files accumulate
|
|
112
|
+
async function testWithoutCleanup() {
|
|
113
|
+
const result = await tester.testAll(testBucket);
|
|
114
|
+
// Test files left in S3 bucket
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 4. Monitor Performance
|
|
120
|
+
|
|
121
|
+
**Track test duration trends:**
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// ✅ GOOD: Track and alert on performance degradation
|
|
125
|
+
class PerformanceMonitor {
|
|
126
|
+
private baseline: number | null = null;
|
|
127
|
+
|
|
128
|
+
async monitorTest(testFn: () => Promise<TestResult>) {
|
|
129
|
+
const result = await testFn();
|
|
130
|
+
|
|
131
|
+
if (this.baseline === null) {
|
|
132
|
+
this.baseline = result.duration;
|
|
133
|
+
console.log(`Baseline set: ${this.baseline}ms`);
|
|
134
|
+
} else {
|
|
135
|
+
const degradation = ((result.duration - this.baseline) / this.baseline) * 100;
|
|
136
|
+
|
|
137
|
+
if (degradation > 50) {
|
|
138
|
+
console.warn(`⚠️ Performance degradation: ${degradation.toFixed(2)}% slower`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 5. Test Error Scenarios
|
|
148
|
+
|
|
149
|
+
**Validate error handling works:**
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
// ✅ GOOD: Test both success and failure scenarios
|
|
153
|
+
async function comprehensiveTests() {
|
|
154
|
+
const testBucket = process.env.TEST_BUCKET;
|
|
155
|
+
|
|
156
|
+
// Test success case
|
|
157
|
+
const successTester = new S3SDKTester({
|
|
158
|
+
region: process.env.AWS_REGION,
|
|
159
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
160
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
const successResult = await successTester.testAll(testBucket);
|
|
164
|
+
console.log('Success case:', successResult.summary.success ? '✅' : ');
|
|
165
|
+
|
|
166
|
+
// Test with invalid credentials (error case)
|
|
167
|
+
const errorTester = new S3SDKTester({
|
|
168
|
+
region: process.env.AWS_REGION,
|
|
169
|
+
accessKeyId: 'INVALID_KEY',
|
|
170
|
+
secretAccessKey: 'INVALID_SECRET'
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
const errorResult = await errorTester.testAll(testBucket);
|
|
174
|
+
console.log('Error handling:', !errorResult.summary.success ? '✅' : ');
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ❌ BAD: Only test happy path
|
|
178
|
+
async function limitedTests() {
|
|
179
|
+
const result = await tester.testAll(testBucket);
|
|
180
|
+
// What happens when credentials are invalid?
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### 6. Use Appropriate Timeouts
|
|
185
|
+
|
|
186
|
+
**Set realistic timeout values in test execution:**
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
// ✅ GOOD: Run tests with appropriate timeout
|
|
190
|
+
jest.setTimeout(60000); // 60 seconds for S3 and Fluent tests
|
|
191
|
+
|
|
192
|
+
test('S3 connectivity', async () => {
|
|
193
|
+
const tester = new S3SDKTester(config);
|
|
194
|
+
const result = await tester.testAll('test-bucket');
|
|
195
|
+
expect(result.summary.failed).toBe(0);
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
// ✅ GOOD: Node.js script with reasonable execution window
|
|
199
|
+
async function runTests() {
|
|
200
|
+
const startTime = Date.now();
|
|
201
|
+
const results = await tester.testAll(testBucket);
|
|
202
|
+
const duration = Date.now() - startTime;
|
|
203
|
+
console.log(`Tests completed in ${duration}ms`);
|
|
204
|
+
|
|
205
|
+
if (duration > 120000) {
|
|
206
|
+
console.warn('⚠️ Tests took longer than expected');
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// ❌ BAD: Too short, causes false failures
|
|
211
|
+
jest.setTimeout(1000); // 1s is too short for S3/Fluent operations
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 7. Document Test Results
|
|
215
|
+
|
|
216
|
+
**Keep records of test runs:**
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// ✅ GOOD: Log test results with timestamps
|
|
220
|
+
class TestLogger {
|
|
221
|
+
private logs: any[] = [];
|
|
222
|
+
|
|
223
|
+
async logTestRun(testName: string, result: TestResult) {
|
|
224
|
+
const logEntry = {
|
|
225
|
+
timestamp: new Date().toISOString(),
|
|
226
|
+
testName,
|
|
227
|
+
success: result.success,
|
|
228
|
+
duration: result.duration,
|
|
229
|
+
errors: result.errors,
|
|
230
|
+
warnings: result.warnings
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
this.logs.push(logEntry);
|
|
234
|
+
|
|
235
|
+
// Save to file
|
|
236
|
+
const fs = require('fs');
|
|
237
|
+
fs.appendFileSync(
|
|
238
|
+
'test-history.jsonl',
|
|
239
|
+
JSON.stringify(logEntry) + '\n'
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
getHistory() {
|
|
244
|
+
return this.logs;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### 8. Automate Tests in CI/CD
|
|
250
|
+
|
|
251
|
+
**Include tests in deployment pipeline:**
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
// ✅ GOOD: Pre-deployment validation
|
|
255
|
+
async function preDeploymentChecks() {
|
|
256
|
+
console.log('Running pre-deployment tests...\n');
|
|
257
|
+
|
|
258
|
+
const testBucket = process.env.TEST_BUCKET;
|
|
259
|
+
|
|
260
|
+
// S3 Connectivity Test
|
|
261
|
+
console.log('1. Testing S3 Connectivity...');
|
|
262
|
+
const s3Tester = new S3SDKTester({
|
|
263
|
+
region: process.env.AWS_REGION,
|
|
264
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
265
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
const s3Result = await s3Tester.testAll(testBucket);
|
|
269
|
+
if (!s3Result.summary.success) {
|
|
270
|
+
console.error('❌ S3 test failed - BLOCKING DEPLOYMENT');
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
273
|
+
console.log('✅ S3 Connectivity passed');
|
|
274
|
+
|
|
275
|
+
// Fluent API Test
|
|
276
|
+
console.log('\n2. Testing Fluent API...');
|
|
277
|
+
const client = await createClient({ /* config */ });
|
|
278
|
+
const fluentTester = new FluentConnectionTester(client, { logger: console });
|
|
279
|
+
const fluentResult = await fluentTester.testConnection();
|
|
280
|
+
|
|
281
|
+
if (!fluentResult.success) {
|
|
282
|
+
console.error('❌ Fluent test failed - BLOCKING DEPLOYMENT');
|
|
283
|
+
process.exit(1);
|
|
284
|
+
}
|
|
285
|
+
console.log('✅ Fluent API Connectivity passed');
|
|
286
|
+
|
|
287
|
+
console.log('\n✅ All pre-deployment checks passed - OK TO DEPLOY');
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## Common Pitfalls to Avoid
|
|
292
|
+
|
|
293
|
+
### Pitfall 1: Hardcoded Credentials
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
// ❌ BAD: Credentials in code
|
|
297
|
+
const config = {
|
|
298
|
+
accessKeyId: 'AKIAIOSFODNN7EXAMPLE', // Never do this!
|
|
299
|
+
secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
// ✅ GOOD: Environment variables
|
|
303
|
+
const config = {
|
|
304
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
305
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
|
|
306
|
+
};
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Pitfall 2: Testing in Production
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
// ❌ BAD: Production bucket for testing
|
|
313
|
+
const testBucket = 'production-data';
|
|
314
|
+
|
|
315
|
+
// ✅ GOOD: Separate test bucket
|
|
316
|
+
const testBucket = process.env.NODE_ENV === 'production'
|
|
317
|
+
? null // Prevent accidental production testing
|
|
318
|
+
: 'test-data';
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Pitfall 3: Not Handling Async Properly
|
|
322
|
+
|
|
323
|
+
```typescript
|
|
324
|
+
// ❌ BAD: Missing await, test exits before completion
|
|
325
|
+
function badTest() {
|
|
326
|
+
tester.runTests(); // Missing await!
|
|
327
|
+
console.log('Done'); // Executes immediately
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// ✅ GOOD: Proper async handling
|
|
331
|
+
async function goodTest() {
|
|
332
|
+
const results = await tester.testAll(testBucket);
|
|
333
|
+
console.log('Done:', results.summary.failed === 0 ? 'PASSED' : 'FAILED');
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### Pitfall 4: Ignoring Warnings
|
|
338
|
+
|
|
339
|
+
```typescript
|
|
340
|
+
// ❌ BAD: Ignore warnings
|
|
341
|
+
if (result.success) {
|
|
342
|
+
// Warnings might indicate future problems!
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// ✅ GOOD: Check and act on warnings
|
|
347
|
+
if (result.success) {
|
|
348
|
+
if (result.warnings.length > 0) {
|
|
349
|
+
console.warn('⚠️ Tests passed with warnings:');
|
|
350
|
+
result.warnings.forEach(w => console.warn(` - ${w}`));
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### Pitfall 5: Ignoring Test Results Structure
|
|
356
|
+
|
|
357
|
+
```typescript
|
|
358
|
+
// ❌ BAD: Checking wrong property
|
|
359
|
+
const result = await tester.testAll(testBucket);
|
|
360
|
+
if (result.success) { // S3SDKTester doesn't have top-level success property
|
|
361
|
+
console.log('Tests passed');
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// ✅ GOOD: Check the summary object
|
|
365
|
+
const result = await tester.testAll(testBucket);
|
|
366
|
+
if (result.summary.failed === 0) {
|
|
367
|
+
console.log('Tests passed');
|
|
368
|
+
console.log(`Passed: ${result.summary.passed}/${result.summary.total}`);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// ✅ GOOD: Access individual test results
|
|
372
|
+
if (result.tests.list.success && result.tests.write.success) {
|
|
373
|
+
console.log('Core operations passed');
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
## Testing Strategies
|
|
378
|
+
|
|
379
|
+
### Strategy 1: Smoke Tests
|
|
380
|
+
|
|
381
|
+
Quick tests to verify basic functionality:
|
|
382
|
+
|
|
383
|
+
```typescript
|
|
384
|
+
async function smokeTest() {
|
|
385
|
+
// Quick S3 list test
|
|
386
|
+
const s3Tester = new S3SDKTester(config);
|
|
387
|
+
const s3Result = await s3Tester.testAll(testBucket);
|
|
388
|
+
|
|
389
|
+
// Quick Fluent authentication test
|
|
390
|
+
const fluentTester = new FluentConnectionTester(client, { logger: console });
|
|
391
|
+
const fluentResult = await fluentTester.testConnection();
|
|
392
|
+
|
|
393
|
+
return s3Result.summary.failed === 0 && fluentResult.success;
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Strategy 2: Comprehensive Tests
|
|
398
|
+
|
|
399
|
+
Thorough testing of all operations:
|
|
400
|
+
|
|
401
|
+
```typescript
|
|
402
|
+
async function comprehensiveTest() {
|
|
403
|
+
const s3Tester = new S3SDKTester(config);
|
|
404
|
+
const s3Result = await s3Tester.testAll(testBucket);
|
|
405
|
+
|
|
406
|
+
const fluentTester = new FluentConnectionTester(client, { logger: console });
|
|
407
|
+
const fluentResult = await fluentTester.testConnection();
|
|
408
|
+
|
|
409
|
+
return {
|
|
410
|
+
s3: s3Result.summary.failed === 0,
|
|
411
|
+
fluent: fluentResult.success,
|
|
412
|
+
s3Details: s3Result.tests,
|
|
413
|
+
fluentDetails: fluentResult
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Strategy 3: Progressive Testing
|
|
419
|
+
|
|
420
|
+
Test incrementally to isolate issues:
|
|
421
|
+
|
|
422
|
+
```typescript
|
|
423
|
+
async function progressiveTest() {
|
|
424
|
+
// Step 1: S3 Connectivity
|
|
425
|
+
console.log('Step 1: Testing S3...');
|
|
426
|
+
const s3Tester = new S3SDKTester(config);
|
|
427
|
+
const s3Result = await s3Tester.testAll(testBucket);
|
|
428
|
+
|
|
429
|
+
if (s3Result.summary.failed > 0) {
|
|
430
|
+
return { step: 's3', success: false, details: s3Result.tests };
|
|
431
|
+
}
|
|
432
|
+
console.log('✅ S3 passed\n');
|
|
433
|
+
|
|
434
|
+
// Step 2: Fluent Connectivity
|
|
435
|
+
console.log('Step 2: Testing Fluent...');
|
|
436
|
+
const fluentTester = new FluentConnectionTester(client, { logger: console });
|
|
437
|
+
const fluentResult = await fluentTester.testConnection();
|
|
438
|
+
|
|
439
|
+
if (!fluentResult.success) {
|
|
440
|
+
return { step: 'fluent', success: false, message: fluentResult.message };
|
|
441
|
+
}
|
|
442
|
+
console.log('✅ Fluent passed\n');
|
|
443
|
+
|
|
444
|
+
return { step: 'complete', success: true };
|
|
445
|
+
}
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
## Testing Checklist
|
|
449
|
+
|
|
450
|
+
Before deploying, verify:
|
|
451
|
+
|
|
452
|
+
- [ ] All environment variables set correctly
|
|
453
|
+
- [ ] Tests pass in test environment
|
|
454
|
+
- [ ] S3 permissions validated
|
|
455
|
+
- [ ] Fluent API connectivity confirmed
|
|
456
|
+
- [ ] Error scenarios tested
|
|
457
|
+
- [ ] Performance is acceptable
|
|
458
|
+
- [ ] Test data cleaned up
|
|
459
|
+
- [ ] Results documented
|
|
460
|
+
- [ ] CI/CD pipeline configured
|
|
461
|
+
- [ ] Production credentials secured
|
|
462
|
+
|
|
463
|
+
## Key Takeaways
|
|
464
|
+
|
|
465
|
+
- 🎯 Test early and often to catch issues before they become problems
|
|
466
|
+
- 🎯 Always use test environments, never test in production
|
|
467
|
+
- 🎯 Clean up test data to avoid accumulation
|
|
468
|
+
- 🎯 Monitor performance trends to detect degradation
|
|
469
|
+
- 🎯 Test both success and error scenarios
|
|
470
|
+
- 🎯 Document test results for historical analysis
|
|
471
|
+
- 🎯 Automate tests in CI/CD pipelines
|
|
472
|
+
- 🎯 Avoid common pitfalls like hardcoded credentials
|
|
473
|
+
|
|
474
|
+
## Practice Exercise
|
|
475
|
+
|
|
476
|
+
Create a comprehensive testing strategy for your project:
|
|
477
|
+
|
|
478
|
+
```typescript
|
|
479
|
+
async function myTestingStrategy() {
|
|
480
|
+
// TODO: Define test environments
|
|
481
|
+
// TODO: Configure testers
|
|
482
|
+
// TODO: Implement smoke tests
|
|
483
|
+
// TODO: Implement comprehensive tests
|
|
484
|
+
// TODO: Add cleanup logic
|
|
485
|
+
// TODO: Document results
|
|
486
|
+
}
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
## Next Steps
|
|
490
|
+
|
|
491
|
+
Continue to [Module 8: API Reference →](../../../03-PATTERN-GUIDES/error-handling/modules/error-handling-08-api-reference.md) for complete API documentation.
|
|
492
|
+
|
|
493
|
+
---
|
|
494
|
+
|
|
495
|
+
**Module Navigation:**
|
|
496
|
+
- **Previous:** [Module 6 - CI/CD Integration](./04-reference-testing-06-cicd-integration.md)
|
|
497
|
+
- **Current:** Module 7 - Best Practices
|
|
498
|
+
- **Next:** [Module 8 - API Reference](../../../03-PATTERN-GUIDES/error-handling/modules/error-handling-08-api-reference.md)
|
|
499
|
+
- **Back to:** [Testing Guide Index](../testing-readme.md)
|