Browse Source

fix(core): Do not throw when deleting Facet with no FacetValues

Fixes #105
Michael Bromley 6 years ago
parent
commit
f7d337f3d8

+ 14 - 0
packages/core/e2e/facet.e2e-spec.ts

@@ -310,6 +310,20 @@ describe('Facet resolver', () => {
             });
             expect(result3.product!.facetValues).toEqual([]);
         });
+
+        it('deleteFacet with no FacetValues works', async () => {
+            const { createFacet } = await client.query<CreateFacet.Mutation, CreateFacet.Variables>(CREATE_FACET, {
+                input: {
+                    code: 'test',
+                    isPrivate: false,
+                    translations: [
+                        { languageCode: LanguageCode.en, name: 'Test' },
+                    ],
+                },
+            });
+            const result = await client.query<DeleteFacet.Mutation, DeleteFacet.Variables>(DELETE_FACET, { id: createFacet.id, force: false });
+            expect(result.deleteFacet.result).toBe(DeletionResult.DELETED);
+        });
     });
 });
 

+ 9 - 3
packages/core/src/service/services/facet.service.ts

@@ -94,9 +94,15 @@ export class FacetService {
 
     async delete(ctx: RequestContext, id: ID, force: boolean = false): Promise<DeletionResponse> {
         const facet = await getEntityOrThrow(this.connection, Facet, id, { relations: ['values'] });
-        const { productCount, variantCount } = await this.facetValueService.checkFacetValueUsage(
-            facet.values.map(fv => fv.id),
-        );
+        let productCount = 0;
+        let variantCount = 0;
+        if (facet.values.length) {
+            const counts = await this.facetValueService.checkFacetValueUsage(
+                facet.values.map(fv => fv.id),
+            );
+            productCount = counts.productCount;
+            variantCount = counts.variantCount;
+        }
 
         const isInUse = !!(productCount || variantCount);
         const both = !!(productCount && variantCount) ? 'both' : 'single';