test(18-07): the phase 18 gate requires the Stripe operator suites and every layer spec (task 4)
- plugins stage: TestStripeAuthentication, TestStripeDataHandling, TestSDKPin and TestStripeOperator in sm-pgstripe-plugin - postgres stage: TestStripeSettingsSmoke and TestStripeImportWinterSmoke beside TestHostStripeFlow - layers stage: the ten spec files and all 69 TAP test names
This commit is contained in:
@@ -71,7 +71,7 @@ PG_EVENTS_TESTS=(TestEvents TestMailers TestBankDetailsSanitized)
|
||||
PG_CONSOLE_TESTS=(TestImportWinter TestPGCommandsDeadline)
|
||||
PG_API_TESTS=(TestCustomerAPIAuthz)
|
||||
PG_ROOT_TESTS=(TestNotificationRoute TestNotificationSecurity TestHashidsBoot TestAdminPermissions TestAdminCatalogSmoke TestAdminFormatSmoke TestMailCatalog)
|
||||
PGSTRIPE_ROOT_TESTS=(TestStripeWebhook TestFixtureAbsentFromProduction)
|
||||
PGSTRIPE_ROOT_TESTS=(TestStripeWebhook TestFixtureAbsentFromProduction TestStripeAuthentication TestStripeDataHandling TestSDKPin TestStripeOperator)
|
||||
|
||||
# postgres stage: testcontainers suites.
|
||||
PG_CABANA_TESTS=(TestMoneyFieldSmoke TestMoneyListSmoke TestRecordActionDangerSmoke TestSettingsSecretSmoke TestSettingsRichEditorSmoke TestMoneyFieldSave TestSettingsSecretPostgres TestRichEditor TestPhase10OpenAPIConformance)
|
||||
@@ -79,7 +79,7 @@ PG_PG_TESTS=(TestPaymentGatewayTracer TestRefundBridgeSmoke TestNotificationRout
|
||||
TestOrdersAdminSmoke TestPaymentsAdminSmoke TestShippingsAdminSmoke TestQuoteablesAdminSmoke TestQuotesAdminSmoke
|
||||
TestPGSettingsSmoke TestMailerSettingsSmoke TestMailTracer TestMailersMatrixSmoke TestCustomerAPITracer TestCustomerAPI
|
||||
TestPaymentsService TestRefundBridge TestOrderAndPaymentEvents TestMigrations TestPGCommands TestCurrencyConverterPostgres)
|
||||
PG_PGSTRIPE_TESTS=(TestHostStripeFlow)
|
||||
PG_PGSTRIPE_TESTS=(TestHostStripeFlow TestStripeSettingsSmoke TestStripeImportWinterSmoke)
|
||||
|
||||
# admin stage: vitest spec files and full test names (describe + it).
|
||||
ADMIN_FILES=(
|
||||
@@ -143,10 +143,88 @@ ADMIN_REQUIRE=(
|
||||
|
||||
# layers stage: test files (must exist and match the test script's glob) and
|
||||
# TAP test names.
|
||||
LAYER_FILES=(tests/checkout.test.ts tests/orderPage.test.ts)
|
||||
LAYER_FILES=(
|
||||
tests/client.test.ts
|
||||
tests/money.test.ts
|
||||
tests/checkout.test.ts
|
||||
tests/orderPage.test.ts
|
||||
tests/states.test.ts
|
||||
tests/i18n.test.ts
|
||||
tests/cart.test.ts
|
||||
tests/orderList.test.ts
|
||||
tests/confirm.test.ts
|
||||
tests/methods.test.ts
|
||||
)
|
||||
LAYER_REQUIRE=(
|
||||
"a redirect answer calls location.assign once with the URL and the button stays busy"
|
||||
"an AwaitingPayment order is polled every 3 s and polling stops at Paid"
|
||||
'cart: the decrease stops at 1 while the increase stays available'
|
||||
'cart: the last item has no Remove; Remove confirms through a danger PgConfirm'
|
||||
'cart: the busy row is marked and every control is disabled while a change runs'
|
||||
'cart: it re-renders from the order the API answered, with exact totals'
|
||||
'cart: read-only shows counts, the delivery line and no controls'
|
||||
'a redirect answer calls location.assign once with the URL and the button stays busy'
|
||||
'a second click while the first request runs sends no request'
|
||||
'requires_action without the payment-action slot shows pg.error.payment_action'
|
||||
'requires_action with the slot hands the PaymentIntent to it; done refreshes'
|
||||
'an error shows pg.error.process and enables the buttons again'
|
||||
'a pending answer refreshes the order'
|
||||
'the Pay copy is pg.checkout.place for cash and bank transfer'
|
||||
'Pay saves a changed delivery and payment method before process'
|
||||
'Pay with the methods already stored only processes'
|
||||
'no method chosen is a field error with focus, and nothing is sent'
|
||||
'a 422 on shipping_id from the server is the delivery field error'
|
||||
'a 409 shows pg.error.stale and refreshes the order; a 429 shows pg.error.throttled'
|
||||
'an order action (cancel, an item change) runs under the busy flag and refreshes'
|
||||
'PgCart: one item has no Remove button and the decrease is disabled at 1'
|
||||
'PgCart: with two items each has Remove; a count above 1 can decrease'
|
||||
'PgCart: read-only shows counts without controls; the busy row is marked'
|
||||
'order GETs /orders/<hash> with the guest query, and only non-empty values'
|
||||
'process POSTs /orders/<hash>/process with the guest query and no body'
|
||||
'every other method hits its path with its HTTP method and body'
|
||||
'a list body without data is an empty list'
|
||||
'the client never sends an amount, a price, a currency or a state'
|
||||
'guestQuery drops empty values'
|
||||
'errorStatus and fieldErrors read $fetch errors'
|
||||
'isRedirect and isPaymentAction tell the three process answers apart'
|
||||
'on the server the composable uses the internal base and forwards the visitor address'
|
||||
'in the browser the composable uses the public base and the app bearer token'
|
||||
'without a token from the hook no authorization header is sent'
|
||||
'confirm: opening shows a modal dialog with focus on the dismiss button'
|
||||
'confirm: dismiss and Esc report close, and focus returns to the opener'
|
||||
'confirm: confirm emits confirm and the dialog stays open until the parent closes it'
|
||||
'confirm: while busy both buttons are disabled and Esc is refused'
|
||||
'confirm: the title labels the dialog; danger and primary variants'
|
||||
'every string lives under the pg namespace'
|
||||
'pl and en have identical leaf key sets'
|
||||
'no leaf is empty and none uses vue-i18n special characters'
|
||||
'pl and en use the same placeholders per key'
|
||||
'every state has a title and a body, and so does the polling title'
|
||||
'every literal pg.* key used in app/ exists in both locales'
|
||||
'methods: the order method, else the only method, is preselected'
|
||||
'methods: a method that does not accept the order currency is not offered'
|
||||
'methods: zero methods disables Pay and passes an empty list to the picker'
|
||||
'methods: the delivery fieldset is hidden when the API lists none, preselected when there is one'
|
||||
'methods: the bank transfer block follows a manual method with bank details'
|
||||
'methods: the pickers render the checked card, the no-methods copy, free delivery and the field error'
|
||||
'99999999.9999 PLN keeps four decimals in en and pl'
|
||||
'39.8400 shows two decimals; 85.4193 is never rounded'
|
||||
'the string is passed to Intl, never a number'
|
||||
'no currency formats a plain decimal; a missing amount is a dash'
|
||||
'order list: no orders shows the empty copy and no table'
|
||||
'order list: the first load shows three skeleton rows in a busy table'
|
||||
'order list: a failed load shows pg.error.load with Retry'
|
||||
'order list: rows link to the order with the state title, the date and the exact total'
|
||||
'order list: pagination disables previous on the first page and next on the last'
|
||||
'an AwaitingPayment order is polled every 3 s and polling stops at Paid'
|
||||
'polling stops after 20 attempts with the slow state'
|
||||
'polling pauses while the page is hidden and resumes when visible'
|
||||
'a failed refetch counts as an attempt and polling goes on'
|
||||
'only AwaitingPayment orders of an online operator are polled'
|
||||
'PgOrderPage routes Placed to PgCheckout and other states to PgOrderStatus'
|
||||
'a 404 renders the not-found panel; a failed fetch renders pg.error.load with Retry'
|
||||
'every state maps to its tone'
|
||||
'an unknown or missing state is neutral'
|
||||
'the copy key is the lower-cased state'
|
||||
'Canceled and Rejected orders render their cart dimmed'
|
||||
)
|
||||
|
||||
usage() {
|
||||
|
||||
Reference in New Issue
Block a user