Skip to content

Commit

Permalink
NTR - Fix e2e test pipeline
Browse files Browse the repository at this point in the history
  • Loading branch information
DennisGarding committed Jun 15, 2023
1 parent 5378b93 commit 27a01c0
Show file tree
Hide file tree
Showing 8 changed files with 216 additions and 187 deletions.
38 changes: 19 additions & 19 deletions .github/workflows/tests-launcher.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,25 @@ on:
- cron: '30 02 * * *'

jobs:
javascript-code-analysis:
name: Javascript
uses: ./.github/workflows/javascript-code-analysis.yml
secrets: inherit

php-code-analysis:
name: PHP
uses: ./.github/workflows/php-code-analysis.yml
secrets: inherit

php-unit-tests-shopware-5-7:
name: Unit tests
uses: ./.github/workflows/php-unit-tests-shopware-5-7.yml
secrets: inherit

php-unit-tests-shopware-legacy-versions:
name: Unit tests legacy
uses: ./.github/workflows/php-unit-tests-shopware-legacy.yml
secrets: inherit
# javascript-code-analysis:
# name: Javascript
# uses: ./.github/workflows/javascript-code-analysis.yml
# secrets: inherit
#
# php-code-analysis:
# name: PHP
# uses: ./.github/workflows/php-code-analysis.yml
# secrets: inherit
#
# php-unit-tests-shopware-5-7:
# name: Unit tests
# uses: ./.github/workflows/php-unit-tests-shopware-5-7.yml
# secrets: inherit
#
# php-unit-tests-shopware-legacy-versions:
# name: Unit tests legacy
# uses: ./.github/workflows/php-unit-tests-shopware-legacy.yml
# secrets: inherit

php-e2e-tests-shopware-5-7:
name: E2E
Expand Down
15 changes: 8 additions & 7 deletions Tests/E2E/helper/backendLoginHelper.mjs
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
import credentials from '../test/credentials.mjs';
import { expect } from '@playwright/test';
import {expect} from '@playwright/test';

export default (function () {
export default (function() {
return {
login: async function (page) {
await page.goto('/backend', { waitUntil: 'load' });
login: async function(page) {
await page.goto('/backend', {waitUntil: 'load'});

await expect(page).toHaveTitle(/Backend/);
await expect(page.locator('#button-1019-btnEl')).toHaveText(/Login/);

const userNameField = await page.locator('input[name="username"]');
// Wait for the focus change of the shopware login
await expect(page.locator('input[name="username"]')).toBeFocused();
await expect(userNameField).toBeFocused();

await page.fill('input[name="username"]', credentials.defaultBackendUserUsername);
await page.fill('input[name="password"]', credentials.defaultBackendUserPassword);
await userNameField.type(credentials.defaultBackendUserUsername);
await page.locator('input[name="password"]').type(credentials.defaultBackendUserPassword);

await page.click('#button-1019-btnEl');

Expand Down
142 changes: 65 additions & 77 deletions Tests/E2E/helper/scenario/pay_with_card/locatorHelper.mjs
Original file line number Diff line number Diff line change
@@ -1,81 +1,69 @@
export const locators = (function () {
export const locators = (function() {
return {
/**
* @var {Locator}
*/
contingencyHandlerWrapper: null,

/**
* @var {FrameLocator}
*/
contingencyHandlerIFrame: null,

/**
* @var {FrameLocator}
*/
threeDSecureIFrame: null,

/**
* @var {FrameLocator}
*/
cardinalStepUpIFrame: null,

/**
* @var {Locator}
*/
submitTokenForm: null,

/**
* @var {Locator}
*/
resendTokenForm: null,

/**
* @var {Locator}
*/
cancelForm: null,

/**
* @var {Locator}
*/
submitTokenInput: null,

/**
* @var {Locator}
*/
submitButton: null,

/**
* @var {Locator}
*/
resendButton: null,

/**
* @var {Locator}
*/
cancelButton: null,

/**
* @var {Locator}
*/
paypalUnifiedErrorMessageContainer: null,

/**
* @param {Page} page
*/
init: function (page) {
this.contingencyHandlerWrapper = page.locator('div[id~="payments-sdk-contingency-handler"]');
this.contingencyHandlerIFrame = page.frameLocator('iframe[title~="payments_sdk_contingency_handler"]');
this.threeDSecureIFrame = this.contingencyHandlerIFrame.frameLocator('iframe[id="threedsIframeV2"]');
this.cardinalStepUpIFrame = this.threeDSecureIFrame.frameLocator('iframe[id^="cardinal-stepUpIframe"]');
this.submitTokenForm = this.cardinalStepUpIFrame.locator('form[name="cardholderInput"]');
this.resendTokenForm = this.cardinalStepUpIFrame.locator('form[name="resendChallengeData"]');
this.cancelForm = this.cardinalStepUpIFrame.locator('form[name="cancel"]');
this.submitTokenInput = this.submitTokenForm.locator('input[name="challengeDataEntry"]');
this.submitButton = this.submitTokenForm.locator('input[type="submit"]');
this.resendButton = this.resendTokenForm.locator('input[type="submit"]');
this.cancelButton = this.cancelForm.locator('input[value="CANCEL"]');
this.paypalUnifiedErrorMessageContainer = page.locator('.paypal-unified--error');
paypalUnifiedErrorMessageContainer: async function(page) {
return await page.locator('.paypal-unified--error');
},

cancelButton: async function(page) {
const cancelForm = await this.cancelForm(page);

return await cancelForm.locator('input[value="CANCEL"]');
},

resendButton: async function(page) {
const resendTokenForm = await this.resendTokenForm(page);

return await resendTokenForm.locator('input[value="RESEND CODE"]');
},

submitButton: async function(page) {
const submitTokenForm = await this.submitTokenForm(page);

return await submitTokenForm.locator('input[value="SUBMIT"]');
},

submitTokenInput: async function(page) {
const submitTokenForm = await this.submitTokenForm(page);

return await submitTokenForm.locator('input[name="challengeDataEntry"]');
},

cancelForm: async function(page) {
const cardinalStepUpIFrame = await this.cardinalStepUpIFrame(page);

return await cardinalStepUpIFrame.locator('form[name="cancel"]');
},

resendTokenForm: async function(page) {
const cardinalStepUpIFrame = await this.cardinalStepUpIFrame(page);

return await cardinalStepUpIFrame.locator('form[name="resendChallengeData"]');
},

submitTokenForm: async function(page) {
const cardinalStepUpIFrame = await this.cardinalStepUpIFrame(page);

return await cardinalStepUpIFrame.locator('form[name="cardholderInput"]');
},

cardinalStepUpIFrame: async function(page) {
const threeDSecureIFrame = await this.threeDSecureIFrame(page);

return await threeDSecureIFrame.frameLocator('iframe[id^="cardinal-stepUpIframe"]');
},

threeDSecureIFrame: async function(page) {
const contingencyHandlerIFrame = await this.contingencyHandlerIFrame(page);

return await contingencyHandlerIFrame.frameLocator('iframe[id="threedsIframeV2"]');
},

contingencyHandlerIFrame: async function(page) {
return await page.frameLocator('iframe[title~="payments_sdk_contingency_handler"]');
},

contingencyHandlerWrapper: async function(page) {
return await page.locator('div[id~="payments-sdk-contingency-handler"]');
},
};
})();
7 changes: 7 additions & 0 deletions Tests/E2E/test/backend_tracking_url.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,13 @@ test.describe('Tracking url testing', () => {
await page.hover('.customers--main');
await page.click('.customers--orders');

await page.waitForTimeout(1000);
const popupCloseButtons = await page.$$('text=\'Schließen\'');
for (let i = 0; i < popupCloseButtons.length; i++) {
await popupCloseButtons[i].click();
}
await page.waitForTimeout(500);

await page.waitForSelector('.sprite-pencil');
const orders = await page.$$('.sprite-pencil');

Expand Down
71 changes: 71 additions & 0 deletions Tests/E2E/test/pay_later_01_button_is_shown.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import {test, expect} from '@playwright/test';
import credentials from './credentials.mjs';
import MysqlFactory from '../helper/mysqlFactory.mjs';
import defaultPaypalSettingsSql from '../helper/paypalSqlHelper.mjs';
import clearCacheHelper from '../helper/clearCacheHelper.mjs';
import getPaypalPaymentMethodSelector from '../helper/getPayPalPaymentMethodSelector.mjs';
import payLaterSettingsHelper from '../helper/payLaterSettingsHelper.mjs';

const connection = MysqlFactory.getInstance();

test.use({locale: 'de-DE'});

test.describe('Test Pay Later is shown', () => {
test.beforeEach(async() => {
await connection.query(defaultPaypalSettingsSql);
await payLaterSettingsHelper.activateAll();
await clearCacheHelper.clearCache();
});

test('Is PayLater button available: ProductDetailPage, OffCanvasBasket, CheckoutPage, ProductListingPage @notIn5.2', async({page}) => {
await clearCacheHelper.clearCache();

// Go to product listing
await page.goto('/sommerwelten/beachwear/', {waitUntil: 'load'});

await page.waitForTimeout(10000);

// Check listing page
const listingPageLocator = await page.frameLocator('.component-frame').first().locator('div[data-funding-source="paylater"]');
await expect(listingPageLocator.locator('.paypal-button-text')).toHaveText(/Später Bezahlen/);

// Go to detail page
await page.goto('/sommerwelten/beachwear/178/strandtuch-ibiza', {waitUntil: 'load'});

// Check product detail page
const detailPageLocator = await page.frameLocator('.component-frame').locator('div[data-funding-source="paylater"]');
await expect(detailPageLocator.locator('.paypal-button-text')).toHaveText(/Später Bezahlen/);

// Add product to cart
await page.click('.buybox--button');

// Check offcanvas basket
const offCanvasLocator = await page.locator('.ajax--cart').frameLocator('.component-frame').locator('div[data-funding-source="paylater"]');
await expect(offCanvasLocator.locator('.paypal-button-text')).toHaveText(/Später Bezahlen/);

// Go to checkout
await page.goto('checkout/confirm', {waitUntil: 'load'});

// Check checkout page
const checkoutLocator = await page.frameLocator('.component-frame').locator('div[data-funding-source="paylater"]');
await expect(checkoutLocator.locator('.paypal-button-text')).toHaveText(/Später Bezahlen/);

// Login
await page.fill('#email', credentials.defaultShopCustomerEmail);
await page.fill('#passwort', credentials.defaultShopCustomerPassword);
await page.click('.register--login-btn');

// Change payment
await page.click('.btn--change-payment');
const selector = await getPaypalPaymentMethodSelector.getSelector(
getPaypalPaymentMethodSelector.paymentMethodNames.SwagPaymentPayPalUnified
);
await page.locator(selector).check();
await page.waitForLoadState('load');
await page.click('text=Weiter >> nth=1');

// Check checkout confirm page
const checkoutConfirmLocator = await page.frameLocator('.component-frame').locator('div[data-funding-source="paylater"]');
await expect(checkoutConfirmLocator.locator('.paypal-button-text')).toHaveText(/Später Bezahlen/);
});
});
Loading

0 comments on commit 27a01c0

Please sign in to comment.