Browse Source

test(server): Attempt to make product variant creation deterministic

Snapshots were sometimes failing over a possible race condition in the code that generates variants.
Michael Bromley 7 years ago
parent
commit
a23f58e3f0

+ 25 - 25
server/e2e/__snapshots__/product.e2e-spec.ts.snap

@@ -77,13 +77,13 @@ Array [
     "id": "41",
     "image": "new-image",
     "languageCode": "en",
-    "name": "en Mashed Potato Small",
+    "name": "en Mashed Potato Large",
     "options": Array [
       Object {
-        "code": "small",
-        "id": "1",
+        "code": "large",
+        "id": "2",
         "languageCode": "en",
-        "name": "Small",
+        "name": "Large",
       },
     ],
     "price": 432,
@@ -92,7 +92,7 @@ Array [
       Object {
         "id": "81",
         "languageCode": "en",
-        "name": "en Mashed Potato Small",
+        "name": "en Mashed Potato Large",
       },
     ],
   },
@@ -117,13 +117,13 @@ Array [
     "id": "42",
     "image": "",
     "languageCode": "en",
-    "name": "en Mashed Potato Large",
+    "name": "en Mashed Potato Small",
     "options": Array [
       Object {
-        "code": "large",
-        "id": "2",
+        "code": "small",
+        "id": "1",
         "languageCode": "en",
-        "name": "Large",
+        "name": "Small",
       },
     ],
     "price": 123,
@@ -132,7 +132,7 @@ Array [
       Object {
         "id": "82",
         "languageCode": "en",
-        "name": "en Mashed Potato Large",
+        "name": "en Mashed Potato Small",
       },
     ],
   },
@@ -146,13 +146,13 @@ Array [
     "id": "41",
     "image": "",
     "languageCode": "en",
-    "name": "en Mashed Potato Small",
+    "name": "en Mashed Potato Large",
     "options": Array [
       Object {
-        "code": "small",
-        "id": "1",
+        "code": "large",
+        "id": "2",
         "languageCode": "en",
-        "name": "Small",
+        "name": "Large",
       },
     ],
     "price": 123,
@@ -161,7 +161,7 @@ Array [
       Object {
         "id": "81",
         "languageCode": "en",
-        "name": "en Mashed Potato Small",
+        "name": "en Mashed Potato Large",
       },
     ],
   },
@@ -170,13 +170,13 @@ Array [
     "id": "42",
     "image": "",
     "languageCode": "en",
-    "name": "en Mashed Potato Large",
+    "name": "en Mashed Potato Small",
     "options": Array [
       Object {
-        "code": "large",
-        "id": "2",
+        "code": "small",
+        "id": "1",
         "languageCode": "en",
-        "name": "Large",
+        "name": "Small",
       },
     ],
     "price": 123,
@@ -185,7 +185,7 @@ Array [
       Object {
         "id": "82",
         "languageCode": "en",
-        "name": "en Mashed Potato Large",
+        "name": "en Mashed Potato Small",
       },
     ],
   },
@@ -199,13 +199,13 @@ Array [
     "id": "41",
     "image": "new-image",
     "languageCode": "en",
-    "name": "en Mashed Potato Small",
+    "name": "en Mashed Potato Large",
     "options": Array [
       Object {
-        "code": "small",
-        "id": "1",
+        "code": "large",
+        "id": "2",
         "languageCode": "en",
-        "name": "Small",
+        "name": "Large",
       },
     ],
     "price": 432,
@@ -214,7 +214,7 @@ Array [
       Object {
         "id": "81",
         "languageCode": "en",
-        "name": "en Mashed Potato Small",
+        "name": "en Mashed Potato Large",
       },
     ],
   },

+ 7 - 6
server/src/service/product-variant.service.ts

@@ -76,9 +76,11 @@ export class ProductVariantService {
         const optionCombinations = product.optionGroups.length
             ? generateAllCombinations(product.optionGroups.map(g => g.options))
             : [[]];
-        const createVariants = optionCombinations.map(async options => {
+
+        const variants: ProductVariant[] = [];
+        for (const options of optionCombinations) {
             const name = this.createVariantName(productName, options);
-            return await this.create(product, {
+            const variant = await this.create(product, {
                 sku: defaultSku || 'sku-not-set',
                 price: defaultPrice || 0,
                 image: '',
@@ -90,11 +92,10 @@ export class ProductVariantService {
                     },
                 ],
             });
-        });
+            variants.push(variant);
+        }
 
-        return await Promise.all(createVariants).then(variants =>
-            variants.map(v => translateDeep(v, DEFAULT_LANGUAGE_CODE)),
-        );
+        return variants.map(v => translateDeep(v, DEFAULT_LANGUAGE_CODE));
     }
 
     async addFacetValues(