From cfd212e75c31940ed5f3d6993b3532c8e28d861d Mon Sep 17 00:00:00 2001 From: Tim Carr Date: Thu, 30 Apr 2026 12:57:48 +0800 Subject: [PATCH 1/4] Tests: Integrations: Assert `inactive` subscriber state when a Kit Form is used --- .../integrations/other/ContactForm7FormCest.php | 8 ++++++-- .../integrations/other/ForminatorCest.php | 16 ++++++++++++---- .../integrations/wlm/WishListMemberCest.php | 8 ++++++-- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/tests/EndToEnd/integrations/other/ContactForm7FormCest.php b/tests/EndToEnd/integrations/other/ContactForm7FormCest.php index e9a1cc2b4..481a99963 100644 --- a/tests/EndToEnd/integrations/other/ContactForm7FormCest.php +++ b/tests/EndToEnd/integrations/other/ContactForm7FormCest.php @@ -53,7 +53,7 @@ public function testSettingsContactForm7ToKitFormMapping(EndToEndTester $I) // Setup Contact form 7 Form and configuration for this test. $pageID = $this->_contactForm7SetupForm( $I, - $_ENV['CONVERTKIT_API_THIRD_PARTY_INTEGRATIONS_FORM_NAME'] + $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_NAME'] ); // Define email address for this test. @@ -72,11 +72,15 @@ public function testSettingsContactForm7ToKitFormMapping(EndToEndTester $I) // Confirm that the email address was added to Kit. $subscriber = $I->apiCheckSubscriberExists($I, $emailAddress); + // Confirm that the subscriber is inactive, as a form was used. + // This honors a Form's double optin setting. + $I->assertEquals('inactive', $subscriber['state']); + // Check that the subscriber has the expected form and referrer value set. $I->apiCheckSubscriberHasForm( $I, subscriberID: $subscriber['id'], - formID: $_ENV['CONVERTKIT_API_THIRD_PARTY_INTEGRATIONS_FORM_ID'], + formID: $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_ID'], referrer: $_ENV['WORDPRESS_URL'] . $I->grabFromCurrentUrl() ); } diff --git a/tests/EndToEnd/integrations/other/ForminatorCest.php b/tests/EndToEnd/integrations/other/ForminatorCest.php index a37fdb5d1..6401c2336 100644 --- a/tests/EndToEnd/integrations/other/ForminatorCest.php +++ b/tests/EndToEnd/integrations/other/ForminatorCest.php @@ -53,7 +53,7 @@ public function testSettingsForminatorFormToKitFormMapping(EndToEndTester $I) // Setup Forminator Form and configuration for this test. $pageID = $this->_forminatorSetupForm( $I, - $_ENV['CONVERTKIT_API_THIRD_PARTY_INTEGRATIONS_FORM_NAME'] + $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_NAME'] ); // Define email address for this test. @@ -72,11 +72,15 @@ public function testSettingsForminatorFormToKitFormMapping(EndToEndTester $I) // Confirm that the email address was added to Kit. $subscriber = $I->apiCheckSubscriberExists($I, $emailAddress); + // Confirm that the subscriber is inactive, as a form was used. + // This honors a Form's double optin setting. + $I->assertEquals('inactive', $subscriber['state']); + // Check that the subscriber has the expected form and referrer value set. $I->apiCheckSubscriberHasForm( $I, subscriberID: $subscriber['id'], - formID: $_ENV['CONVERTKIT_API_THIRD_PARTY_INTEGRATIONS_FORM_ID'], + formID: $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_ID'], referrer: $_ENV['WORDPRESS_URL'] . $I->grabFromCurrentUrl() ); } @@ -257,7 +261,7 @@ public function testSettingsForminatorQuizToKitFormMapping(EndToEndTester $I) // Setup Forminator Quiz and configuration for this test. $pageID = $this->_forminatorSetupQuiz( $I, - $_ENV['CONVERTKIT_API_THIRD_PARTY_INTEGRATIONS_FORM_NAME'] + $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_NAME'] ); // Define email address for this test. @@ -274,7 +278,11 @@ public function testSettingsForminatorQuizToKitFormMapping(EndToEndTester $I) $I->wait(2); // Confirm that the email address was added to Kit. - $I->apiCheckSubscriberExists($I, $emailAddress); + $subscriber = $I->apiCheckSubscriberExists($I, $emailAddress); + + // Confirm that the subscriber is inactive, as a form was used. + // This honors a Form's double optin setting. + $I->assertEquals('inactive', $subscriber['state']); } /** diff --git a/tests/EndToEnd/integrations/wlm/WishListMemberCest.php b/tests/EndToEnd/integrations/wlm/WishListMemberCest.php index 6230c81f7..311c10daf 100644 --- a/tests/EndToEnd/integrations/wlm/WishListMemberCest.php +++ b/tests/EndToEnd/integrations/wlm/WishListMemberCest.php @@ -47,13 +47,17 @@ public function testWLMToKitFormMappingOnLevelAdded(EndToEndTester $I) $userID = $this->_createUser($I, $emailAddress); // Configure mapping. - $this->_configureMapping($I, $wlmLevelID, 'add', $_ENV['CONVERTKIT_API_THIRD_PARTY_INTEGRATIONS_FORM_NAME']); + $this->_configureMapping($I, $wlmLevelID, 'add', $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_NAME']); // Assign level to user. $this->_assignLevelToUser($I, $wlmLevelID, $userID); // Confirm that the email address was added to Kit. - $I->apiCheckSubscriberExists($I, $emailAddress); + $susbcriber = $I->apiCheckSubscriberExists($I, $emailAddress); + + // Confirm that the subscriber is inactive, as a form was used. + // This honors a Form's double optin setting. + $I->assertEquals('inactive', $subscriber['state']); } /** From ebda2f4d119ae5077e9ab24c3bf6b068c67bc723 Mon Sep 17 00:00:00 2001 From: Tim Carr Date: Thu, 30 Apr 2026 13:56:26 +0800 Subject: [PATCH 2/4] Tests: Fix .env names --- tests/EndToEnd/integrations/other/ContactForm7FormCest.php | 4 ++-- tests/EndToEnd/integrations/other/ForminatorCest.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/EndToEnd/integrations/other/ContactForm7FormCest.php b/tests/EndToEnd/integrations/other/ContactForm7FormCest.php index 481a99963..e88d79a08 100644 --- a/tests/EndToEnd/integrations/other/ContactForm7FormCest.php +++ b/tests/EndToEnd/integrations/other/ContactForm7FormCest.php @@ -53,7 +53,7 @@ public function testSettingsContactForm7ToKitFormMapping(EndToEndTester $I) // Setup Contact form 7 Form and configuration for this test. $pageID = $this->_contactForm7SetupForm( $I, - $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_NAME'] + $_ENV['CONVERTKIT_API_FORM_DOUBLE_OPTIN_NAME'] ); // Define email address for this test. @@ -80,7 +80,7 @@ public function testSettingsContactForm7ToKitFormMapping(EndToEndTester $I) $I->apiCheckSubscriberHasForm( $I, subscriberID: $subscriber['id'], - formID: $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_ID'], + formID: $_ENV['CONVERTKIT_API_FORM_DOUBLE_OPTIN_ID'], referrer: $_ENV['WORDPRESS_URL'] . $I->grabFromCurrentUrl() ); } diff --git a/tests/EndToEnd/integrations/other/ForminatorCest.php b/tests/EndToEnd/integrations/other/ForminatorCest.php index 6401c2336..46ad5ba40 100644 --- a/tests/EndToEnd/integrations/other/ForminatorCest.php +++ b/tests/EndToEnd/integrations/other/ForminatorCest.php @@ -53,7 +53,7 @@ public function testSettingsForminatorFormToKitFormMapping(EndToEndTester $I) // Setup Forminator Form and configuration for this test. $pageID = $this->_forminatorSetupForm( $I, - $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_NAME'] + $_ENV['CONVERTKIT_API_FORM_DOUBLE_OPTIN_NAME'] ); // Define email address for this test. @@ -261,7 +261,7 @@ public function testSettingsForminatorQuizToKitFormMapping(EndToEndTester $I) // Setup Forminator Quiz and configuration for this test. $pageID = $this->_forminatorSetupQuiz( $I, - $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_NAME'] + $_ENV['CONVERTKIT_API_FORM_DOUBLE_OPTIN_NAME'] ); // Define email address for this test. From d241252cd8cf073fbe364ae103bfd909e88d160e Mon Sep 17 00:00:00 2001 From: Tim Carr Date: Thu, 30 Apr 2026 14:57:57 +0800 Subject: [PATCH 3/4] Fix failing tests --- tests/EndToEnd/integrations/other/ForminatorCest.php | 9 ++++++++- .../EndToEnd/integrations/wlm/WishListMemberCest.php | 11 +++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/tests/EndToEnd/integrations/other/ForminatorCest.php b/tests/EndToEnd/integrations/other/ForminatorCest.php index 46ad5ba40..2f928f021 100644 --- a/tests/EndToEnd/integrations/other/ForminatorCest.php +++ b/tests/EndToEnd/integrations/other/ForminatorCest.php @@ -80,7 +80,7 @@ public function testSettingsForminatorFormToKitFormMapping(EndToEndTester $I) $I->apiCheckSubscriberHasForm( $I, subscriberID: $subscriber['id'], - formID: $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_ID'], + formID: $_ENV['CONVERTKIT_API_FORM_DOUBLE_OPTIN_ID'], referrer: $_ENV['WORDPRESS_URL'] . $I->grabFromCurrentUrl() ); } @@ -283,6 +283,13 @@ public function testSettingsForminatorQuizToKitFormMapping(EndToEndTester $I) // Confirm that the subscriber is inactive, as a form was used. // This honors a Form's double optin setting. $I->assertEquals('inactive', $subscriber['state']); + + // Check that the subscriber has the expected form value set. + $I->apiCheckSubscriberHasForm( + $I, + subscriberID: $subscriber['id'], + formID: $_ENV['CONVERTKIT_API_FORM_DOUBLE_OPTIN_ID'] + ); } /** diff --git a/tests/EndToEnd/integrations/wlm/WishListMemberCest.php b/tests/EndToEnd/integrations/wlm/WishListMemberCest.php index 311c10daf..e36262f29 100644 --- a/tests/EndToEnd/integrations/wlm/WishListMemberCest.php +++ b/tests/EndToEnd/integrations/wlm/WishListMemberCest.php @@ -47,17 +47,24 @@ public function testWLMToKitFormMappingOnLevelAdded(EndToEndTester $I) $userID = $this->_createUser($I, $emailAddress); // Configure mapping. - $this->_configureMapping($I, $wlmLevelID, 'add', $_ENV['CONVERTKIT_API_DOUBLE_OPTIN_FORM_NAME']); + $this->_configureMapping($I, $wlmLevelID, 'add', $_ENV['CONVERTKIT_API_FORM_DOUBLE_OPTIN_NAME']); // Assign level to user. $this->_assignLevelToUser($I, $wlmLevelID, $userID); // Confirm that the email address was added to Kit. - $susbcriber = $I->apiCheckSubscriberExists($I, $emailAddress); + $subscriber = $I->apiCheckSubscriberExists($I, $emailAddress); // Confirm that the subscriber is inactive, as a form was used. // This honors a Form's double optin setting. $I->assertEquals('inactive', $subscriber['state']); + + // Check that the subscriber has the expected form value set. + $I->apiCheckSubscriberHasForm( + $I, + subscriberID: $subscriber['id'], + formID: $_ENV['CONVERTKIT_API_FORM_DOUBLE_OPTIN_ID'] + ); } /** From 62921accf5571d6fe3fa29a83e4fe0ab5bace94a Mon Sep 17 00:00:00 2001 From: Tim Carr Date: Fri, 1 May 2026 11:49:13 +0800 Subject: [PATCH 4/4] Update test coverage for third party form integrations --- .../other/ContactForm7FormCest.php | 52 ++++++++- .../integrations/other/ForminatorCest.php | 103 +++++++++++++++++- .../integrations/wlm/WishListMemberCest.php | 48 +++++++- 3 files changed, 190 insertions(+), 13 deletions(-) diff --git a/tests/EndToEnd/integrations/other/ContactForm7FormCest.php b/tests/EndToEnd/integrations/other/ContactForm7FormCest.php index e88d79a08..be6192a66 100644 --- a/tests/EndToEnd/integrations/other/ContactForm7FormCest.php +++ b/tests/EndToEnd/integrations/other/ContactForm7FormCest.php @@ -42,13 +42,59 @@ public function testSettingsContactForm7WhenNoCredentials(EndToEndTester $I) } /** - * Test that saving a Contact Form 7 to Kit Form Mapping works. + * Test the Contact Form 7 Form integration works and that the subscriber's state is active + * when a single optin Form is specified. * - * @since 1.9.6 + * @since 3.3.2 + * + * @param EndToEndTester $I Tester. + */ + public function testSettingsContactForm7ToKitSingleOptinFormMapping(EndToEndTester $I) + { + // Setup Contact form 7 Form and configuration for this test. + $pageID = $this->_contactForm7SetupForm( + $I, + $_ENV['CONVERTKIT_API_FORM_SINGLE_OPTIN_NAME'] + ); + + // Define email address for this test. + $emailAddress = $I->generateEmailAddress(); + + // Complete and submit Contact Form 7 Form. + $this->_contactForm7CompleteAndSubmitForm( + $I, + pageID: $pageID, + emailAddress: $emailAddress + ); + + // Wait for the API to update. + $I->wait(2); + + // Confirm that the email address was added to Kit. + $subscriber = $I->apiCheckSubscriberExists($I, $emailAddress); + + // Confirm that the subscriber is active, as a form was used. + // This honors a Form's single optin setting. + $I->assertEquals('active', $subscriber['state']); + + // Check that the subscriber has the expected form and referrer value set. + $I->apiCheckSubscriberHasForm( + $I, + subscriberID: $subscriber['id'], + formID: $_ENV['CONVERTKIT_API_FORM_SINGLE_OPTIN_ID'], + referrer: $_ENV['WORDPRESS_URL'] . $I->grabFromCurrentUrl() + ); + } + + /** + * Test the Contact Form 7 Form integration works and that the subscriber's state is inactive + * when a double optin Form is specified. + * + * @since 3.3.2 * * @param EndToEndTester $I Tester. */ - public function testSettingsContactForm7ToKitFormMapping(EndToEndTester $I) + public function testSettingsContactForm7ToKitDoubleOptinFormMapping(EndToEndTester $I) { // Setup Contact form 7 Form and configuration for this test. $pageID = $this->_contactForm7SetupForm( diff --git a/tests/EndToEnd/integrations/other/ForminatorCest.php b/tests/EndToEnd/integrations/other/ForminatorCest.php index 2f928f021..007b9147c 100644 --- a/tests/EndToEnd/integrations/other/ForminatorCest.php +++ b/tests/EndToEnd/integrations/other/ForminatorCest.php @@ -42,13 +42,59 @@ public function testSettingsForminatorWhenNoCredentials(EndToEndTester $I) } /** - * Test that saving a Forminator Form to Kit Form Mapping works. + * Test the Forminator Form integration works and that the subscriber's state is active + * when a single optin Form is specified. * - * @since 2.3.0 + * @since 3.3.2 + * + * @param EndToEndTester $I Tester. + */ + public function testSettingsForminatorFormToKitSingleOptinFormMapping(EndToEndTester $I) + { + // Setup Forminator Form and configuration for this test. + $pageID = $this->_forminatorSetupForm( + $I, + $_ENV['CONVERTKIT_API_FORM_SINGLE_OPTIN_NAME'] + ); + + // Define email address for this test. + $emailAddress = $I->generateEmailAddress(); + + // Complete and submit Forminator Form. + $this->_forminatorCompleteAndSubmitForm( + $I, + pageID: $pageID, + emailAddress: $emailAddress + ); + + // Wait for the API to update. + $I->wait(2); + + // Confirm that the email address was added to Kit. + $subscriber = $I->apiCheckSubscriberExists($I, $emailAddress); + + // Confirm that the subscriber is active, as a form was used. + // This honors a Form's single optin setting. + $I->assertEquals('active', $subscriber['state']); + + // Check that the subscriber has the expected form and referrer value set. + $I->apiCheckSubscriberHasForm( + $I, + subscriberID: $subscriber['id'], + formID: $_ENV['CONVERTKIT_API_FORM_SINGLE_OPTIN_ID'], + referrer: $_ENV['WORDPRESS_URL'] . $I->grabFromCurrentUrl() + ); + } + + /** + * Test the Forminator Form integration works and that the subscriber's state is inactive + * when a double optin Form is specified. + * + * @since 3.3.2 * * @param EndToEndTester $I Tester. */ - public function testSettingsForminatorFormToKitFormMapping(EndToEndTester $I) + public function testSettingsForminatorFormToKitDoubleOptinFormMapping(EndToEndTester $I) { // Setup Forminator Form and configuration for this test. $pageID = $this->_forminatorSetupForm( @@ -250,13 +296,58 @@ public function testSettingsForminatorFormSubscribeOption(EndToEndTester $I) } /** - * Test that saving a Forminator Quiz to Kit Form Mapping works. + * Test the Forminator Quiz integration works and that the subscriber's state is active + * when a single optin Form is specified. * - * @since 2.4.3 + * @since 3.3.2 + * + * @param EndToEndTester $I Tester. + */ + public function testSettingsForminatorQuizToKitSingleOptinFormMapping(EndToEndTester $I) + { + // Setup Forminator Quiz and configuration for this test. + $pageID = $this->_forminatorSetupQuiz( + $I, + $_ENV['CONVERTKIT_API_FORM_SINGLE_OPTIN_NAME'] + ); + + // Define email address for this test. + $emailAddress = $I->generateEmailAddress(); + + // Complete and submit Forminator Quiz. + $this->_forminatorCompleteAndSubmitQuiz( + $I, + pageID: $pageID, + emailAddress: $emailAddress + ); + + // Wait for the API to update. + $I->wait(2); + + // Confirm that the email address was added to Kit. + $subscriber = $I->apiCheckSubscriberExists($I, $emailAddress); + + // Confirm that the subscriber is active, as a form was used. + // This honors a Form's double optin setting. + $I->assertEquals('active', $subscriber['state']); + + // Check that the subscriber has the expected form value set. + $I->apiCheckSubscriberHasForm( + $I, + subscriberID: $subscriber['id'], + formID: $_ENV['CONVERTKIT_API_FORM_SINGLE_OPTIN_ID'] + ); + } + + /** + * Test the Forminator Quiz integration works and that the subscriber's state is inactive + * when a double optin Form is specified. + * + * @since 3.3.2 * * @param EndToEndTester $I Tester. */ - public function testSettingsForminatorQuizToKitFormMapping(EndToEndTester $I) + public function testSettingsForminatorQuizToKitDoubleOptinFormMapping(EndToEndTester $I) { // Setup Forminator Quiz and configuration for this test. $pageID = $this->_forminatorSetupQuiz( diff --git a/tests/EndToEnd/integrations/wlm/WishListMemberCest.php b/tests/EndToEnd/integrations/wlm/WishListMemberCest.php index e36262f29..bac2f73ac 100644 --- a/tests/EndToEnd/integrations/wlm/WishListMemberCest.php +++ b/tests/EndToEnd/integrations/wlm/WishListMemberCest.php @@ -28,14 +28,54 @@ public function _before(EndToEndTester $I) } /** - * Test that WishList Member Level to Kit Form Mapping works, - * and the email address is added to Kit when assigned the WishList Member Level + * Test the WishList Member Level to Kit Double Optin works, and that the subscriber's state is active + * when a single optin Form is specified. * - * @since 1.9.6 + * @since 3.3.2 + * + * @param EndToEndTester $I Tester. + */ + public function testWLMToKitSingleOptinFormMappingOnLevelAdded(EndToEndTester $I) + { + // Get WishList Member Level ID defined. + $wlmLevelID = $this->_getWishListMemberLevelID($I); + + // Define email address for this test. + $emailAddress = $I->generateEmailAddress(); + + // Create a test WordPress User. + $userID = $this->_createUser($I, $emailAddress); + + // Configure mapping. + $this->_configureMapping($I, $wlmLevelID, 'add', $_ENV['CONVERTKIT_API_FORM_SINGLE_OPTIN_NAME']); + + // Assign level to user. + $this->_assignLevelToUser($I, $wlmLevelID, $userID); + + // Confirm that the email address was added to Kit. + $subscriber = $I->apiCheckSubscriberExists($I, $emailAddress); + + // Confirm that the subscriber is active, as a form was used. + // This honors a Form's single optin setting. + $I->assertEquals('active', $subscriber['state']); + + // Check that the subscriber has the expected form value set. + $I->apiCheckSubscriberHasForm( + $I, + subscriberID: $subscriber['id'], + formID: $_ENV['CONVERTKIT_API_FORM_SINGLE_OPTIN_ID'] + ); + } + + /** + * Test the WishList Member Level to Kit Double Optin works, and that the subscriber's state is inactive + * when a double optin Form is specified. + * + * @since 3.3.2 * * @param EndToEndTester $I Tester. */ - public function testWLMToKitFormMappingOnLevelAdded(EndToEndTester $I) + public function testWLMToKitDoubleOptinFormMappingOnLevelAdded(EndToEndTester $I) { // Get WishList Member Level ID defined. $wlmLevelID = $this->_getWishListMemberLevelID($I);