@shopware-ag/acceptance-test-suite 3.6.2 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -191,13 +191,14 @@ interface ProductPrice {
191
191
  quantityStart: number;
192
192
  quantityEnd: number | null;
193
193
  }
194
- type Product = Omit<components['schemas']['Product'], 'price' | 'prices'> & {
194
+ type Product = Omit<components['schemas']['Product'], 'price' | 'prices' | 'options'> & {
195
195
  id: string;
196
196
  price: Price[];
197
197
  prices?: ProductPrice[];
198
198
  translated: {
199
199
  name: string;
200
200
  };
201
+ options?: Record<string, string>[];
201
202
  };
202
203
  type OrderDelivery = Omit<components['schemas']['OrderDelivery'], 'shippingOrderAddress' | 'shippingCosts'> & {
203
204
  id: string;
@@ -288,6 +289,9 @@ type PromotionDiscount = components['schemas']['PromotionDiscount'] & {
288
289
  type OrderLineItem = components['schemas']['OrderLineItem'] & {
289
290
  id: string;
290
291
  };
292
+ type PropertyGroupOption = components['schemas']['PropertyGroupOption'] & {
293
+ id: string;
294
+ };
291
295
 
292
296
  interface CreatedRecord {
293
297
  resource: string;
@@ -482,6 +486,18 @@ declare class TestDataService {
482
486
  * @param overrides - Specific data overrides that will be applied to the payment method data struct.
483
487
  */
484
488
  createPaymentMethodWithImage(overrides?: Partial<PaymentMethod>): Promise<PaymentMethod>;
489
+ /**
490
+ * Creates basic variant products based on property group.
491
+ *
492
+ * @param overrides - Specific data overrides that will be applied to the variant data struct.
493
+ */
494
+ createVariantProducts(parentProduct: Product, propertyGroups: PropertyGroup[], overrides?: Partial<Product>): Promise<Product[]>;
495
+ /**
496
+ * Function that generates combinations from n number of arrays
497
+ * with m number of elements in them.
498
+ * @param array
499
+ */
500
+ combineAll: (array: Record<string, string>[][]) => Record<string, string>[][];
485
501
  /**
486
502
  * Assigns a media resource to a payment method as a logo.
487
503
  *
@@ -592,6 +608,12 @@ declare class TestDataService {
592
608
  * @param stateName - The name of the state. Default is "open".
593
609
  */
594
610
  getStateMachineState(stateMachineId: string, stateName?: 'open' | 'completed' | 'in_progress' | 'cancelled'): Promise<StateMachineState>;
611
+ /**
612
+ * Retrieves all corresponding property group options.
613
+ *
614
+ * @param propertyGroupId - The uuid of the property group.
615
+ */
616
+ getPropertyGroupOptions(propertyGroupId: string): Promise<PropertyGroupOption[]>;
595
617
  /**
596
618
  * Adds an entity reference to the registry of created records.
597
619
  * All entities added to the registry will be deleted by the cleanup call.
@@ -806,6 +828,24 @@ declare class CheckoutCart implements PageObject {
806
828
  readonly cartQuantityNumber: Locator;
807
829
  constructor(page: Page);
808
830
  url(): string;
831
+ getLineItemByProductNumber(productNumber: string): Promise<Record<string, Locator>>;
832
+ }
833
+
834
+ declare class OffCanvasCart implements PageObject {
835
+ readonly page: Page;
836
+ readonly headline: Locator;
837
+ readonly itemCount: Locator;
838
+ readonly goToCheckoutButton: Locator;
839
+ readonly goToCartButton: Locator;
840
+ readonly continueShoppingButton: Locator;
841
+ readonly enterDiscountInput: Locator;
842
+ readonly submitDiscountButton: Locator;
843
+ readonly subTotalPrice: Locator;
844
+ readonly shippingCosts: Locator;
845
+ readonly cartQuantityNumber: Locator;
846
+ constructor(page: Page);
847
+ url(): string;
848
+ getLineItemByProductNumber(productNumber: string): Promise<Record<string, Locator>>;
809
849
  }
810
850
 
811
851
  declare class CheckoutConfirm implements PageObject {
@@ -959,6 +999,7 @@ interface StorefrontPageTypes {
959
999
  StorefrontProductDetail: ProductDetail$1;
960
1000
  StorefrontCategory: Category;
961
1001
  StorefrontCheckoutCart: CheckoutCart;
1002
+ StorefrontOffCanvasCart: OffCanvasCart;
962
1003
  StorefrontCheckoutConfirm: CheckoutConfirm;
963
1004
  StorefrontCheckoutFinish: CheckoutFinish;
964
1005
  StorefrontCheckoutRegister: CheckoutRegister;
@@ -976,6 +1017,7 @@ declare const StorefrontPageObjects: {
976
1017
  ProductDetail: typeof ProductDetail$1;
977
1018
  Category: typeof Category;
978
1019
  CheckoutCart: typeof CheckoutCart;
1020
+ OffCanvasCart: typeof OffCanvasCart;
979
1021
  CheckoutConfirm: typeof CheckoutConfirm;
980
1022
  CheckoutFinish: typeof CheckoutFinish;
981
1023
  CheckoutRegister: typeof CheckoutRegister;
@@ -1291,4 +1333,4 @@ declare const test: _playwright_test.TestType<_playwright_test.PlaywrightTestArg
1291
1333
  ValidateAccessibility: (pageName: string, assertViolations?: number | boolean | undefined, createReport?: boolean | undefined, ruleTags?: string[] | undefined, outputDir?: string | undefined) => () => Promise<axe_core.Result[]>;
1292
1334
  }, _playwright_test.PlaywrightWorkerArgs & _playwright_test.PlaywrightWorkerOptions & FixtureTypes>;
1293
1335
 
1294
- export { AdminPageObjects, type CalculatedTaxes, type Category$1 as Category, type CreatedRecord, type Currency$1 as Currency, type Customer, type CustomerAddress, type DataServiceOptions, type FixtureTypes, type Manufacturer, type Media, type Order, type OrderDelivery, type OrderLineItem, type OrderStatus, type PageObject, type PaymentMethod, type Price, type Product, type ProductPrice, type Promotion, type PromotionDiscount, type PropertyGroup, type Rule, type SalesChannel, type Salutation, type ShippingMethod, type SimpleLineItem, type StateMachine, type StateMachineState, StorefrontPageObjects, type SyncApiOperation, type Tag, type Task, type TaxRules, TestDataService, createRandomImage, extractIdFromUrl, getCountryId, getCurrency, getDefaultShippingMethodId, getFlowId, getLanguageData, getMediaId, getOrderTransactionId, getPaymentMethodId, getPromotionWithDiscount, getSalutationId, getSnippetSetId, getStateMachineId, getStateMachineStateId, getTaxId, getThemeId, isSaaSInstance, isThemeCompiled, setOrderStatus, test };
1336
+ export { AdminPageObjects, type CalculatedTaxes, type Category$1 as Category, type CreatedRecord, type Currency$1 as Currency, type Customer, type CustomerAddress, type DataServiceOptions, type FixtureTypes, type Manufacturer, type Media, type Order, type OrderDelivery, type OrderLineItem, type OrderStatus, type PageObject, type PaymentMethod, type Price, type Product, type ProductPrice, type Promotion, type PromotionDiscount, type PropertyGroup, type PropertyGroupOption, type Rule, type SalesChannel, type Salutation, type ShippingMethod, type SimpleLineItem, type StateMachine, type StateMachineState, StorefrontPageObjects, type SyncApiOperation, type Tag, type Task, type TaxRules, TestDataService, createRandomImage, extractIdFromUrl, getCountryId, getCurrency, getDefaultShippingMethodId, getFlowId, getLanguageData, getMediaId, getOrderTransactionId, getPaymentMethodId, getPromotionWithDiscount, getSalutationId, getSnippetSetId, getStateMachineId, getStateMachineStateId, getTaxId, getThemeId, isSaaSInstance, isThemeCompiled, setOrderStatus, test };
package/dist/index.d.ts CHANGED
@@ -191,13 +191,14 @@ interface ProductPrice {
191
191
  quantityStart: number;
192
192
  quantityEnd: number | null;
193
193
  }
194
- type Product = Omit<components['schemas']['Product'], 'price' | 'prices'> & {
194
+ type Product = Omit<components['schemas']['Product'], 'price' | 'prices' | 'options'> & {
195
195
  id: string;
196
196
  price: Price[];
197
197
  prices?: ProductPrice[];
198
198
  translated: {
199
199
  name: string;
200
200
  };
201
+ options?: Record<string, string>[];
201
202
  };
202
203
  type OrderDelivery = Omit<components['schemas']['OrderDelivery'], 'shippingOrderAddress' | 'shippingCosts'> & {
203
204
  id: string;
@@ -288,6 +289,9 @@ type PromotionDiscount = components['schemas']['PromotionDiscount'] & {
288
289
  type OrderLineItem = components['schemas']['OrderLineItem'] & {
289
290
  id: string;
290
291
  };
292
+ type PropertyGroupOption = components['schemas']['PropertyGroupOption'] & {
293
+ id: string;
294
+ };
291
295
 
292
296
  interface CreatedRecord {
293
297
  resource: string;
@@ -482,6 +486,18 @@ declare class TestDataService {
482
486
  * @param overrides - Specific data overrides that will be applied to the payment method data struct.
483
487
  */
484
488
  createPaymentMethodWithImage(overrides?: Partial<PaymentMethod>): Promise<PaymentMethod>;
489
+ /**
490
+ * Creates basic variant products based on property group.
491
+ *
492
+ * @param overrides - Specific data overrides that will be applied to the variant data struct.
493
+ */
494
+ createVariantProducts(parentProduct: Product, propertyGroups: PropertyGroup[], overrides?: Partial<Product>): Promise<Product[]>;
495
+ /**
496
+ * Function that generates combinations from n number of arrays
497
+ * with m number of elements in them.
498
+ * @param array
499
+ */
500
+ combineAll: (array: Record<string, string>[][]) => Record<string, string>[][];
485
501
  /**
486
502
  * Assigns a media resource to a payment method as a logo.
487
503
  *
@@ -592,6 +608,12 @@ declare class TestDataService {
592
608
  * @param stateName - The name of the state. Default is "open".
593
609
  */
594
610
  getStateMachineState(stateMachineId: string, stateName?: 'open' | 'completed' | 'in_progress' | 'cancelled'): Promise<StateMachineState>;
611
+ /**
612
+ * Retrieves all corresponding property group options.
613
+ *
614
+ * @param propertyGroupId - The uuid of the property group.
615
+ */
616
+ getPropertyGroupOptions(propertyGroupId: string): Promise<PropertyGroupOption[]>;
595
617
  /**
596
618
  * Adds an entity reference to the registry of created records.
597
619
  * All entities added to the registry will be deleted by the cleanup call.
@@ -806,6 +828,24 @@ declare class CheckoutCart implements PageObject {
806
828
  readonly cartQuantityNumber: Locator;
807
829
  constructor(page: Page);
808
830
  url(): string;
831
+ getLineItemByProductNumber(productNumber: string): Promise<Record<string, Locator>>;
832
+ }
833
+
834
+ declare class OffCanvasCart implements PageObject {
835
+ readonly page: Page;
836
+ readonly headline: Locator;
837
+ readonly itemCount: Locator;
838
+ readonly goToCheckoutButton: Locator;
839
+ readonly goToCartButton: Locator;
840
+ readonly continueShoppingButton: Locator;
841
+ readonly enterDiscountInput: Locator;
842
+ readonly submitDiscountButton: Locator;
843
+ readonly subTotalPrice: Locator;
844
+ readonly shippingCosts: Locator;
845
+ readonly cartQuantityNumber: Locator;
846
+ constructor(page: Page);
847
+ url(): string;
848
+ getLineItemByProductNumber(productNumber: string): Promise<Record<string, Locator>>;
809
849
  }
810
850
 
811
851
  declare class CheckoutConfirm implements PageObject {
@@ -959,6 +999,7 @@ interface StorefrontPageTypes {
959
999
  StorefrontProductDetail: ProductDetail$1;
960
1000
  StorefrontCategory: Category;
961
1001
  StorefrontCheckoutCart: CheckoutCart;
1002
+ StorefrontOffCanvasCart: OffCanvasCart;
962
1003
  StorefrontCheckoutConfirm: CheckoutConfirm;
963
1004
  StorefrontCheckoutFinish: CheckoutFinish;
964
1005
  StorefrontCheckoutRegister: CheckoutRegister;
@@ -976,6 +1017,7 @@ declare const StorefrontPageObjects: {
976
1017
  ProductDetail: typeof ProductDetail$1;
977
1018
  Category: typeof Category;
978
1019
  CheckoutCart: typeof CheckoutCart;
1020
+ OffCanvasCart: typeof OffCanvasCart;
979
1021
  CheckoutConfirm: typeof CheckoutConfirm;
980
1022
  CheckoutFinish: typeof CheckoutFinish;
981
1023
  CheckoutRegister: typeof CheckoutRegister;
@@ -1291,4 +1333,4 @@ declare const test: _playwright_test.TestType<_playwright_test.PlaywrightTestArg
1291
1333
  ValidateAccessibility: (pageName: string, assertViolations?: number | boolean | undefined, createReport?: boolean | undefined, ruleTags?: string[] | undefined, outputDir?: string | undefined) => () => Promise<axe_core.Result[]>;
1292
1334
  }, _playwright_test.PlaywrightWorkerArgs & _playwright_test.PlaywrightWorkerOptions & FixtureTypes>;
1293
1335
 
1294
- export { AdminPageObjects, type CalculatedTaxes, type Category$1 as Category, type CreatedRecord, type Currency$1 as Currency, type Customer, type CustomerAddress, type DataServiceOptions, type FixtureTypes, type Manufacturer, type Media, type Order, type OrderDelivery, type OrderLineItem, type OrderStatus, type PageObject, type PaymentMethod, type Price, type Product, type ProductPrice, type Promotion, type PromotionDiscount, type PropertyGroup, type Rule, type SalesChannel, type Salutation, type ShippingMethod, type SimpleLineItem, type StateMachine, type StateMachineState, StorefrontPageObjects, type SyncApiOperation, type Tag, type Task, type TaxRules, TestDataService, createRandomImage, extractIdFromUrl, getCountryId, getCurrency, getDefaultShippingMethodId, getFlowId, getLanguageData, getMediaId, getOrderTransactionId, getPaymentMethodId, getPromotionWithDiscount, getSalutationId, getSnippetSetId, getStateMachineId, getStateMachineStateId, getTaxId, getThemeId, isSaaSInstance, isThemeCompiled, setOrderStatus, test };
1336
+ export { AdminPageObjects, type CalculatedTaxes, type Category$1 as Category, type CreatedRecord, type Currency$1 as Currency, type Customer, type CustomerAddress, type DataServiceOptions, type FixtureTypes, type Manufacturer, type Media, type Order, type OrderDelivery, type OrderLineItem, type OrderStatus, type PageObject, type PaymentMethod, type Price, type Product, type ProductPrice, type Promotion, type PromotionDiscount, type PropertyGroup, type PropertyGroupOption, type Rule, type SalesChannel, type Salutation, type ShippingMethod, type SimpleLineItem, type StateMachine, type StateMachineState, StorefrontPageObjects, type SyncApiOperation, type Tag, type Task, type TaxRules, TestDataService, createRandomImage, extractIdFromUrl, getCountryId, getCurrency, getDefaultShippingMethodId, getFlowId, getLanguageData, getMediaId, getOrderTransactionId, getPaymentMethodId, getPromotionWithDiscount, getSalutationId, getSnippetSetId, getStateMachineId, getStateMachineStateId, getTaxId, getThemeId, isSaaSInstance, isThemeCompiled, setOrderStatus, test };
package/dist/index.mjs CHANGED
@@ -370,16 +370,16 @@ const test$c = test$e.extend({
370
370
  ]
371
371
  });
372
372
 
373
- var __defProp$u = Object.defineProperty;
374
- var __defNormalProp$u = (obj, key, value) => key in obj ? __defProp$u(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
375
- var __publicField$u = (obj, key, value) => {
376
- __defNormalProp$u(obj, typeof key !== "symbol" ? key + "" : key, value);
373
+ var __defProp$v = Object.defineProperty;
374
+ var __defNormalProp$v = (obj, key, value) => key in obj ? __defProp$v(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
375
+ var __publicField$v = (obj, key, value) => {
376
+ __defNormalProp$v(obj, typeof key !== "symbol" ? key + "" : key, value);
377
377
  return value;
378
378
  };
379
379
  const _AdminApiContext = class _AdminApiContext {
380
380
  constructor(context, options) {
381
- __publicField$u(this, "context");
382
- __publicField$u(this, "options");
381
+ __publicField$v(this, "context");
382
+ __publicField$v(this, "options");
383
383
  this.context = context;
384
384
  this.options = options;
385
385
  }
@@ -471,7 +471,7 @@ const _AdminApiContext = class _AdminApiContext {
471
471
  return this.context.head(url, options);
472
472
  }
473
473
  };
474
- __publicField$u(_AdminApiContext, "defaultOptions", {
474
+ __publicField$v(_AdminApiContext, "defaultOptions", {
475
475
  app_url: process.env["APP_URL"],
476
476
  client_id: process.env["SHOPWARE_ACCESS_KEY_ID"],
477
477
  client_secret: process.env["SHOPWARE_SECRET_ACCESS_KEY"],
@@ -481,16 +481,16 @@ __publicField$u(_AdminApiContext, "defaultOptions", {
481
481
  });
482
482
  let AdminApiContext = _AdminApiContext;
483
483
 
484
- var __defProp$t = Object.defineProperty;
485
- var __defNormalProp$t = (obj, key, value) => key in obj ? __defProp$t(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
486
- var __publicField$t = (obj, key, value) => {
487
- __defNormalProp$t(obj, typeof key !== "symbol" ? key + "" : key, value);
484
+ var __defProp$u = Object.defineProperty;
485
+ var __defNormalProp$u = (obj, key, value) => key in obj ? __defProp$u(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
486
+ var __publicField$u = (obj, key, value) => {
487
+ __defNormalProp$u(obj, typeof key !== "symbol" ? key + "" : key, value);
488
488
  return value;
489
489
  };
490
490
  const _StoreApiContext = class _StoreApiContext {
491
491
  constructor(context, options) {
492
- __publicField$t(this, "context");
493
- __publicField$t(this, "options");
492
+ __publicField$u(this, "context");
493
+ __publicField$u(this, "options");
494
494
  this.context = context;
495
495
  this.options = options;
496
496
  }
@@ -549,21 +549,21 @@ const _StoreApiContext = class _StoreApiContext {
549
549
  return this.context.head(url, options);
550
550
  }
551
551
  };
552
- __publicField$t(_StoreApiContext, "defaultOptions", {
552
+ __publicField$u(_StoreApiContext, "defaultOptions", {
553
553
  app_url: process.env["APP_URL"],
554
554
  ignoreHTTPSErrors: true
555
555
  });
556
556
  let StoreApiContext = _StoreApiContext;
557
557
 
558
- var __defProp$s = Object.defineProperty;
559
- var __defNormalProp$s = (obj, key, value) => key in obj ? __defProp$s(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
560
- var __publicField$s = (obj, key, value) => {
561
- __defNormalProp$s(obj, typeof key !== "symbol" ? key + "" : key, value);
558
+ var __defProp$t = Object.defineProperty;
559
+ var __defNormalProp$t = (obj, key, value) => key in obj ? __defProp$t(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
560
+ var __publicField$t = (obj, key, value) => {
561
+ __defNormalProp$t(obj, typeof key !== "symbol" ? key + "" : key, value);
562
562
  return value;
563
563
  };
564
564
  class MailpitApiContext {
565
565
  constructor(context) {
566
- __publicField$s(this, "context");
566
+ __publicField$t(this, "context");
567
567
  this.context = context;
568
568
  }
569
569
  /**
@@ -845,17 +845,17 @@ const test$a = test$e.extend({
845
845
  }
846
846
  });
847
847
 
848
- var __defProp$r = Object.defineProperty;
849
- var __defNormalProp$r = (obj, key, value) => key in obj ? __defProp$r(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
850
- var __publicField$r = (obj, key, value) => {
851
- __defNormalProp$r(obj, typeof key !== "symbol" ? key + "" : key, value);
848
+ var __defProp$s = Object.defineProperty;
849
+ var __defNormalProp$s = (obj, key, value) => key in obj ? __defProp$s(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
850
+ var __publicField$s = (obj, key, value) => {
851
+ __defNormalProp$s(obj, typeof key !== "symbol" ? key + "" : key, value);
852
852
  return value;
853
853
  };
854
854
  class Actor {
855
855
  constructor(name, page) {
856
- __publicField$r(this, "page");
857
- __publicField$r(this, "name");
858
- __publicField$r(this, "expects", expect);
856
+ __publicField$s(this, "page");
857
+ __publicField$s(this, "name");
858
+ __publicField$s(this, "expects", expect);
859
859
  this.name = name;
860
860
  this.page = page;
861
861
  }
@@ -904,31 +904,31 @@ function createRandomImage(width = 800, height = 600) {
904
904
  return new Image(width, height, buffer);
905
905
  }
906
906
 
907
- var __defProp$q = Object.defineProperty;
908
- var __defNormalProp$q = (obj, key, value) => key in obj ? __defProp$q(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
909
- var __publicField$q = (obj, key, value) => {
910
- __defNormalProp$q(obj, typeof key !== "symbol" ? key + "" : key, value);
907
+ var __defProp$r = Object.defineProperty;
908
+ var __defNormalProp$r = (obj, key, value) => key in obj ? __defProp$r(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
909
+ var __publicField$r = (obj, key, value) => {
910
+ __defNormalProp$r(obj, typeof key !== "symbol" ? key + "" : key, value);
911
911
  return value;
912
912
  };
913
913
  class TestDataService {
914
914
  constructor(AdminApiClient, IdProvider, options) {
915
- __publicField$q(this, "AdminApiClient");
916
- __publicField$q(this, "IdProvider");
917
- __publicField$q(this, "namePrefix", "Test-");
918
- __publicField$q(this, "nameSuffix", "");
919
- __publicField$q(this, "defaultSalesChannel");
920
- __publicField$q(this, "defaultTaxId");
921
- __publicField$q(this, "defaultCurrencyId");
922
- __publicField$q(this, "defaultCategoryId");
923
- __publicField$q(this, "defaultLanguageId");
924
- __publicField$q(this, "defaultCountryId");
925
- __publicField$q(this, "defaultCustomerGroupId");
915
+ __publicField$r(this, "AdminApiClient");
916
+ __publicField$r(this, "IdProvider");
917
+ __publicField$r(this, "namePrefix", "Test-");
918
+ __publicField$r(this, "nameSuffix", "");
919
+ __publicField$r(this, "defaultSalesChannel");
920
+ __publicField$r(this, "defaultTaxId");
921
+ __publicField$r(this, "defaultCurrencyId");
922
+ __publicField$r(this, "defaultCategoryId");
923
+ __publicField$r(this, "defaultLanguageId");
924
+ __publicField$r(this, "defaultCountryId");
925
+ __publicField$r(this, "defaultCustomerGroupId");
926
926
  /**
927
927
  * Configures if an automated cleanup of the data should be executed.
928
928
  *
929
929
  * @private
930
930
  */
931
- __publicField$q(this, "shouldCleanUp", true);
931
+ __publicField$r(this, "shouldCleanUp", true);
932
932
  /**
933
933
  * Configuration of higher priority entities for the cleanup operation.
934
934
  * These entities will be deleted before others.
@@ -936,13 +936,34 @@ class TestDataService {
936
936
  *
937
937
  * @private
938
938
  */
939
- __publicField$q(this, "highPriorityEntities", ["order", "product"]);
939
+ __publicField$r(this, "highPriorityEntities", ["order", "product"]);
940
940
  /**
941
941
  * A registry of all created records.
942
942
  *
943
943
  * @private
944
944
  */
945
- __publicField$q(this, "createdRecords", []);
945
+ __publicField$r(this, "createdRecords", []);
946
+ /**
947
+ * Function that generates combinations from n number of arrays
948
+ * with m number of elements in them.
949
+ * @param array
950
+ */
951
+ __publicField$r(this, "combineAll", (array) => {
952
+ const result = [];
953
+ const max = array.length - 1;
954
+ const helper = (tmpArray, i) => {
955
+ for (let j = 0, l = array[i].length; j < l; j++) {
956
+ const copy = tmpArray.slice(0);
957
+ copy.push(array[i][j]);
958
+ if (i == max)
959
+ result.push(copy);
960
+ else
961
+ helper(copy, i + 1);
962
+ }
963
+ };
964
+ helper([], 0);
965
+ return result;
966
+ });
946
967
  this.AdminApiClient = AdminApiClient;
947
968
  this.IdProvider = IdProvider;
948
969
  this.defaultSalesChannel = options.defaultSalesChannel;
@@ -1316,6 +1337,36 @@ class TestDataService {
1316
1337
  await this.assignPaymentMethodMedia(paymentMethod.id, media.id);
1317
1338
  return paymentMethod;
1318
1339
  }
1340
+ /**
1341
+ * Creates basic variant products based on property group.
1342
+ *
1343
+ * @param overrides - Specific data overrides that will be applied to the variant data struct.
1344
+ */
1345
+ async createVariantProducts(parentProduct, propertyGroups, overrides = {}) {
1346
+ const productVariantCandidates = [];
1347
+ for (const propertyGroup of propertyGroups) {
1348
+ const propertyGroupOptions = await this.getPropertyGroupOptions(propertyGroup.id);
1349
+ const propertyGroupOptionsCollection = [];
1350
+ for (const propertyGroupOption of propertyGroupOptions) {
1351
+ propertyGroupOptionsCollection.push({ id: propertyGroupOption.id });
1352
+ }
1353
+ productVariantCandidates.push(propertyGroupOptionsCollection);
1354
+ }
1355
+ const productVariantCombinations = this.combineAll(productVariantCandidates);
1356
+ const variantProducts = [];
1357
+ let index = 1;
1358
+ for (const productVariantCombination of productVariantCombinations) {
1359
+ const variantOverrides = {
1360
+ parentId: parentProduct.id,
1361
+ productNumber: parentProduct.productNumber + "." + index,
1362
+ options: productVariantCombination
1363
+ };
1364
+ const overrideCollection = Object.assign({}, overrides, variantOverrides);
1365
+ variantProducts.push(await this.createBasicProduct(overrideCollection));
1366
+ index++;
1367
+ }
1368
+ return variantProducts;
1369
+ }
1319
1370
  /**
1320
1371
  * Assigns a media resource to a payment method as a logo.
1321
1372
  *
@@ -1595,6 +1646,25 @@ class TestDataService {
1595
1646
  const { data: result } = await response.json();
1596
1647
  return result[0];
1597
1648
  }
1649
+ /**
1650
+ * Retrieves all corresponding property group options.
1651
+ *
1652
+ * @param propertyGroupId - The uuid of the property group.
1653
+ */
1654
+ async getPropertyGroupOptions(propertyGroupId) {
1655
+ const response = await this.AdminApiClient.post("search/property-group-option", {
1656
+ data: {
1657
+ limit: 50,
1658
+ filter: [{
1659
+ type: "equals",
1660
+ field: "groupId",
1661
+ value: propertyGroupId
1662
+ }]
1663
+ }
1664
+ });
1665
+ const { data: result } = await response.json();
1666
+ return result;
1667
+ }
1598
1668
  /**
1599
1669
  * Adds an entity reference to the registry of created records.
1600
1670
  * All entities added to the registry will be deleted by the cleanup call.
@@ -2170,16 +2240,16 @@ const test$8 = test$e.extend({
2170
2240
  }
2171
2241
  });
2172
2242
 
2173
- var __defProp$p = Object.defineProperty;
2174
- var __defNormalProp$p = (obj, key, value) => key in obj ? __defProp$p(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2175
- var __publicField$p = (obj, key, value) => {
2176
- __defNormalProp$p(obj, typeof key !== "symbol" ? key + "" : key, value);
2243
+ var __defProp$q = Object.defineProperty;
2244
+ var __defNormalProp$q = (obj, key, value) => key in obj ? __defProp$q(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2245
+ var __publicField$q = (obj, key, value) => {
2246
+ __defNormalProp$q(obj, typeof key !== "symbol" ? key + "" : key, value);
2177
2247
  return value;
2178
2248
  };
2179
2249
  class IdProvider {
2180
2250
  constructor(workerIndex, seed) {
2181
- __publicField$p(this, "workerIndex");
2182
- __publicField$p(this, "seed");
2251
+ __publicField$q(this, "workerIndex");
2252
+ __publicField$q(this, "seed");
2183
2253
  this.workerIndex = workerIndex;
2184
2254
  this.seed = seed;
2185
2255
  }
@@ -2241,17 +2311,17 @@ const test$7 = test$e.extend({
2241
2311
  ]
2242
2312
  });
2243
2313
 
2244
- var __defProp$o = Object.defineProperty;
2245
- var __defNormalProp$o = (obj, key, value) => key in obj ? __defProp$o(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2246
- var __publicField$o = (obj, key, value) => {
2247
- __defNormalProp$o(obj, typeof key !== "symbol" ? key + "" : key, value);
2314
+ var __defProp$p = Object.defineProperty;
2315
+ var __defNormalProp$p = (obj, key, value) => key in obj ? __defProp$p(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2316
+ var __publicField$p = (obj, key, value) => {
2317
+ __defNormalProp$p(obj, typeof key !== "symbol" ? key + "" : key, value);
2248
2318
  return value;
2249
2319
  };
2250
2320
  class Home {
2251
2321
  constructor(page) {
2252
2322
  this.page = page;
2253
- __publicField$o(this, "productImages");
2254
- __publicField$o(this, "productListItems");
2323
+ __publicField$p(this, "productImages");
2324
+ __publicField$p(this, "productListItems");
2255
2325
  this.productImages = page.locator(".product-image-link");
2256
2326
  this.productListItems = page.getByRole("listitem");
2257
2327
  }
@@ -2260,26 +2330,26 @@ class Home {
2260
2330
  }
2261
2331
  }
2262
2332
 
2263
- var __defProp$n = Object.defineProperty;
2264
- var __defNormalProp$n = (obj, key, value) => key in obj ? __defProp$n(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2265
- var __publicField$n = (obj, key, value) => {
2266
- __defNormalProp$n(obj, typeof key !== "symbol" ? key + "" : key, value);
2333
+ var __defProp$o = Object.defineProperty;
2334
+ var __defNormalProp$o = (obj, key, value) => key in obj ? __defProp$o(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2335
+ var __publicField$o = (obj, key, value) => {
2336
+ __defNormalProp$o(obj, typeof key !== "symbol" ? key + "" : key, value);
2267
2337
  return value;
2268
2338
  };
2269
2339
  let ProductDetail$1 = class ProductDetail {
2270
2340
  constructor(page) {
2271
2341
  this.page = page;
2272
- __publicField$n(this, "addToCartButton");
2273
- __publicField$n(this, "quantitySelect");
2274
- __publicField$n(this, "productSingleImage");
2275
- __publicField$n(this, "productSinglePrice");
2276
- __publicField$n(this, "productPriceRangesRow");
2277
- __publicField$n(this, "offCanvasCartTitle");
2278
- __publicField$n(this, "offCanvasCart");
2279
- __publicField$n(this, "offCanvasCartGoToCheckoutButton");
2280
- __publicField$n(this, "offCanvasLineItemImages");
2281
- __publicField$n(this, "offCanvasSummaryTotalPrice");
2282
- __publicField$n(this, "offCanvas");
2342
+ __publicField$o(this, "addToCartButton");
2343
+ __publicField$o(this, "quantitySelect");
2344
+ __publicField$o(this, "productSingleImage");
2345
+ __publicField$o(this, "productSinglePrice");
2346
+ __publicField$o(this, "productPriceRangesRow");
2347
+ __publicField$o(this, "offCanvasCartTitle");
2348
+ __publicField$o(this, "offCanvasCart");
2349
+ __publicField$o(this, "offCanvasCartGoToCheckoutButton");
2350
+ __publicField$o(this, "offCanvasLineItemImages");
2351
+ __publicField$o(this, "offCanvasSummaryTotalPrice");
2352
+ __publicField$o(this, "offCanvas");
2283
2353
  this.addToCartButton = page.getByRole("button", { name: "Add to shopping cart" });
2284
2354
  this.quantitySelect = page.getByLabel("Quantity", { exact: true });
2285
2355
  this.productSingleImage = page.locator(".gallery-slider-single-image");
@@ -2301,18 +2371,18 @@ let ProductDetail$1 = class ProductDetail {
2301
2371
  }
2302
2372
  };
2303
2373
 
2304
- var __defProp$m = Object.defineProperty;
2305
- var __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2306
- var __publicField$m = (obj, key, value) => {
2307
- __defNormalProp$m(obj, typeof key !== "symbol" ? key + "" : key, value);
2374
+ var __defProp$n = Object.defineProperty;
2375
+ var __defNormalProp$n = (obj, key, value) => key in obj ? __defProp$n(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2376
+ var __publicField$n = (obj, key, value) => {
2377
+ __defNormalProp$n(obj, typeof key !== "symbol" ? key + "" : key, value);
2308
2378
  return value;
2309
2379
  };
2310
2380
  class Category {
2311
2381
  constructor(page) {
2312
2382
  this.page = page;
2313
- __publicField$m(this, "sortingSelect");
2314
- __publicField$m(this, "firstProductBuyButton");
2315
- __publicField$m(this, "noProductsFoundAlert");
2383
+ __publicField$n(this, "sortingSelect");
2384
+ __publicField$n(this, "firstProductBuyButton");
2385
+ __publicField$n(this, "noProductsFoundAlert");
2316
2386
  this.sortingSelect = page.getByLabel("Sorting");
2317
2387
  this.firstProductBuyButton = page.getByRole("button", { name: "Add to shopping cart" }).first();
2318
2388
  this.noProductsFoundAlert = page.getByText("No products found.");
@@ -2322,24 +2392,24 @@ class Category {
2322
2392
  }
2323
2393
  }
2324
2394
 
2325
- var __defProp$l = Object.defineProperty;
2326
- var __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2327
- var __publicField$l = (obj, key, value) => {
2328
- __defNormalProp$l(obj, typeof key !== "symbol" ? key + "" : key, value);
2395
+ var __defProp$m = Object.defineProperty;
2396
+ var __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2397
+ var __publicField$m = (obj, key, value) => {
2398
+ __defNormalProp$m(obj, typeof key !== "symbol" ? key + "" : key, value);
2329
2399
  return value;
2330
2400
  };
2331
2401
  class CheckoutCart {
2332
2402
  constructor(page) {
2333
2403
  this.page = page;
2334
- __publicField$l(this, "headline");
2335
- __publicField$l(this, "goToCheckoutButton");
2336
- __publicField$l(this, "enterDiscountInput");
2337
- __publicField$l(this, "grandTotalPrice");
2338
- __publicField$l(this, "emptyCartAlert");
2339
- __publicField$l(this, "stockReachedAlert");
2340
- __publicField$l(this, "cartLineItemImages");
2341
- __publicField$l(this, "unitPriceInfo");
2342
- __publicField$l(this, "cartQuantityNumber");
2404
+ __publicField$m(this, "headline");
2405
+ __publicField$m(this, "goToCheckoutButton");
2406
+ __publicField$m(this, "enterDiscountInput");
2407
+ __publicField$m(this, "grandTotalPrice");
2408
+ __publicField$m(this, "emptyCartAlert");
2409
+ __publicField$m(this, "stockReachedAlert");
2410
+ __publicField$m(this, "cartLineItemImages");
2411
+ __publicField$m(this, "unitPriceInfo");
2412
+ __publicField$m(this, "cartQuantityNumber");
2343
2413
  this.headline = page.getByRole("heading", { name: "Shopping cart" });
2344
2414
  this.goToCheckoutButton = page.getByRole("link", { name: "Go to checkout" });
2345
2415
  this.enterDiscountInput = page.getByLabel("Discount code");
@@ -2353,6 +2423,91 @@ class CheckoutCart {
2353
2423
  url() {
2354
2424
  return "checkout/cart";
2355
2425
  }
2426
+ async getLineItemByProductNumber(productNumber) {
2427
+ const lineItem = this.page.locator(".line-item-product", { hasText: productNumber });
2428
+ const lineItemImage = lineItem.locator("line-item-img-container");
2429
+ const productNameLabel = lineItem.locator(".line-item-label");
2430
+ const productNumberLabel = lineItem.locator(".line-item-product-number");
2431
+ const productDeliveryDateLabel = lineItem.locator(".line-item-delivery-date");
2432
+ const productQuantityMinusButton = lineItem.locator(".btn-minus");
2433
+ const productQuantityPlusButton = lineItem.locator(".btn-plus");
2434
+ const productQuantityInput = lineItem.locator(".quantity-selector-group-input");
2435
+ const productUnitPriceValue = lineItem.locator(".line-item-unit-price-value");
2436
+ const productTotalPriceValue = lineItem.locator(".line-item-total-price-value");
2437
+ const removeButton = lineItem.locator(".line-item-remove-button");
2438
+ return {
2439
+ lineItemImage,
2440
+ productNameLabel,
2441
+ productNumberLabel,
2442
+ productDeliveryDateLabel,
2443
+ productQuantityMinusButton,
2444
+ productQuantityPlusButton,
2445
+ productQuantityInput,
2446
+ productUnitPriceValue,
2447
+ productTotalPriceValue,
2448
+ removeButton
2449
+ };
2450
+ }
2451
+ }
2452
+
2453
+ var __defProp$l = Object.defineProperty;
2454
+ var __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2455
+ var __publicField$l = (obj, key, value) => {
2456
+ __defNormalProp$l(obj, typeof key !== "symbol" ? key + "" : key, value);
2457
+ return value;
2458
+ };
2459
+ class OffCanvasCart {
2460
+ constructor(page) {
2461
+ this.page = page;
2462
+ __publicField$l(this, "headline");
2463
+ __publicField$l(this, "itemCount");
2464
+ __publicField$l(this, "goToCheckoutButton");
2465
+ __publicField$l(this, "goToCartButton");
2466
+ __publicField$l(this, "continueShoppingButton");
2467
+ __publicField$l(this, "enterDiscountInput");
2468
+ __publicField$l(this, "submitDiscountButton");
2469
+ __publicField$l(this, "subTotalPrice");
2470
+ __publicField$l(this, "shippingCosts");
2471
+ __publicField$l(this, "cartQuantityNumber");
2472
+ this.headline = page.getByRole("heading", { name: "Shopping cart" });
2473
+ this.itemCount = page.locator(".offcanvas-cart-header-count");
2474
+ this.goToCheckoutButton = page.getByRole("link", { name: "Go to checkout" });
2475
+ this.goToCartButton = page.getByRole("link", { name: "Display shopping cart" });
2476
+ this.continueShoppingButton = page.getByRole("button", { name: "Continue shopping" });
2477
+ this.enterDiscountInput = page.getByPlaceholder("Enter discount code...");
2478
+ this.submitDiscountButton = page.locator("#addPromotionOffcanvasCart");
2479
+ this.subTotalPrice = page.locator('dt:has-text("Subtotal") + dd:visible');
2480
+ this.shippingCosts = page.locator('dt:has-text("Shipping costs") + dd:visible');
2481
+ this.cartQuantityNumber = page.getByLabel("Quantity", { exact: true });
2482
+ }
2483
+ url() {
2484
+ throw new Error("Off Canvas Cart does not have an own url.");
2485
+ }
2486
+ async getLineItemByProductNumber(productNumber) {
2487
+ const lineItem = this.page.locator(".line-item-product", { hasText: productNumber });
2488
+ const lineItemImage = lineItem.locator("line-item-img-container");
2489
+ const productNameLabel = lineItem.locator(".line-item-label");
2490
+ const productNumberLabel = lineItem.locator(".line-item-product-number");
2491
+ const productDeliveryDateLabel = lineItem.locator(".line-item-delivery-date");
2492
+ const productQuantityMinusButton = lineItem.locator(".btn-minus");
2493
+ const productQuantityPlusButton = lineItem.locator(".btn-plus");
2494
+ const productQuantityInput = lineItem.locator(".quantity-selector-group-input");
2495
+ const productUnitPriceValue = lineItem.locator(".line-item-unit-price-value");
2496
+ const productTotalPriceValue = lineItem.locator(".line-item-total-price-value");
2497
+ const removeButton = lineItem.locator(".line-item-remove-button");
2498
+ return {
2499
+ lineItemImage,
2500
+ productNameLabel,
2501
+ productNumberLabel,
2502
+ productDeliveryDateLabel,
2503
+ productQuantityMinusButton,
2504
+ productQuantityPlusButton,
2505
+ productQuantityInput,
2506
+ productUnitPriceValue,
2507
+ productTotalPriceValue,
2508
+ removeButton
2509
+ };
2510
+ }
2356
2511
  }
2357
2512
 
2358
2513
  var __defProp$k = Object.defineProperty;
@@ -2690,6 +2845,7 @@ const StorefrontPageObjects = {
2690
2845
  ProductDetail: ProductDetail$1,
2691
2846
  Category,
2692
2847
  CheckoutCart,
2848
+ OffCanvasCart,
2693
2849
  CheckoutConfirm,
2694
2850
  CheckoutFinish,
2695
2851
  CheckoutRegister,
@@ -2715,6 +2871,9 @@ const test$6 = test$e.extend({
2715
2871
  StorefrontCheckoutCart: async ({ StorefrontPage }, use) => {
2716
2872
  await use(new CheckoutCart(StorefrontPage));
2717
2873
  },
2874
+ StorefrontOffCanvasCart: async ({ StorefrontPage }, use) => {
2875
+ await use(new OffCanvasCart(StorefrontPage));
2876
+ },
2718
2877
  StorefrontCheckoutConfirm: async ({ StorefrontPage }, use) => {
2719
2878
  await use(new CheckoutConfirm(StorefrontPage));
2720
2879
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopware-ag/acceptance-test-suite",
3
- "version": "3.6.2",
3
+ "version": "3.8.0",
4
4
  "description": "Shopware Acceptance Test Suite",
5
5
  "author": "shopware AG",
6
6
  "license": "MIT",