Просмотр исходного кода

fix(core): Fix crash on updating Facet code

Fixes #831
Michael Bromley 4 лет назад
Родитель
Сommit
755ebc40e5

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

@@ -592,6 +592,22 @@ describe('Facet resolver', () => {
             });
         }
 
+        // https://github.com/vendure-ecommerce/vendure/issues/831
+        it('updateFacet with unchanged code', async () => {
+            const { createFacet } = await createFacetWithCode('some-new-facet');
+            const result = await adminClient.query<UpdateFacet.Mutation, UpdateFacet.Variables>(
+                UPDATE_FACET,
+                {
+                    input: {
+                        id: createFacet.id,
+                        code: createFacet.code,
+                    },
+                },
+            );
+
+            expect(result.updateFacet.code).toBe(createFacet.code);
+        });
+
         it('createFacet with conflicting slug gets renamed', async () => {
             const { createFacet: result1 } = await createFacetWithCode('test');
             expect(result1.code).toBe('test');

+ 6 - 4
packages/core/src/service/services/facet.service.ts

@@ -167,12 +167,14 @@ export class FacetService {
     private async ensureUniqueCode(ctx: RequestContext, code: string, id?: ID) {
         let candidate = code;
         let suffix = 1;
-        let match: Facet | undefined;
+        let conflict = false;
         const alreadySuffixed = /-\d+$/;
         do {
-            match = await this.connection.getRepository(ctx, Facet).findOne({ where: { code: candidate } });
+            const match = await this.connection
+                .getRepository(ctx, Facet)
+                .findOne({ where: { code: candidate } });
 
-            const conflict = !!match && ((id != null && !idsAreEqual(match.id, id)) || id == null);
+            conflict = !!match && ((id != null && !idsAreEqual(match.id, id)) || id == null);
             if (conflict) {
                 suffix++;
                 if (alreadySuffixed.test(candidate)) {
@@ -181,7 +183,7 @@ export class FacetService {
                     candidate = `${candidate}-${suffix}`;
                 }
             }
-        } while (match);
+        } while (conflict);
 
         return candidate;
     }