Browse Source

fix(admin-ui): Correctly handle falsy configArg default values

Fixes #1663
Michael Bromley 3 years ago
parent
commit
1d8c30e1f2

+ 89 - 0
packages/admin-ui/src/lib/core/src/common/utilities/configurable-operation-utils.spec.ts

@@ -0,0 +1,89 @@
+import { getDefaultConfigArgValue } from '@vendure/admin-ui/core';
+
+describe('getDefaultConfigArgValue()', () => {
+    it('returns a default string value', () => {
+        const value = getDefaultConfigArgValue({
+            name: 'test',
+            type: 'string',
+            defaultValue: 'foo',
+            list: false,
+            required: false,
+        });
+
+        expect(value).toBe('foo');
+    });
+
+    it('returns a default empty string value', () => {
+        const value = getDefaultConfigArgValue({
+            name: 'test',
+            type: 'string',
+            defaultValue: '',
+            list: false,
+            required: false,
+        });
+
+        expect(value).toBe('');
+    });
+
+    it('returns a default number value', () => {
+        const value = getDefaultConfigArgValue({
+            name: 'test',
+            type: 'float',
+            defaultValue: 2.5,
+            list: false,
+            required: false,
+        });
+
+        expect(value).toBe(2.5);
+    });
+
+    it('returns a default zero number value', () => {
+        const value = getDefaultConfigArgValue({
+            name: 'test',
+            type: 'float',
+            defaultValue: 0,
+            list: false,
+            required: false,
+        });
+
+        expect(value).toBe(0);
+    });
+
+    it('returns a default list value', () => {
+        const value = getDefaultConfigArgValue({
+            name: 'test',
+            type: 'float',
+            list: true,
+            required: false,
+        });
+
+        expect(value).toEqual([]);
+    });
+
+    it('returns a null if no default set', () => {
+        function getValueForType(type: string) {
+            return getDefaultConfigArgValue({
+                name: 'test',
+                type,
+                list: false,
+                required: false,
+            });
+        }
+        expect(getValueForType('string')).toBeNull();
+        expect(getValueForType('datetime')).toBeNull();
+        expect(getValueForType('float')).toBeNull();
+        expect(getValueForType('ID')).toBeNull();
+        expect(getValueForType('int')).toBeNull();
+    });
+
+    it('returns false for boolean without default', () => {
+        const value = getDefaultConfigArgValue({
+            name: 'test',
+            type: 'boolean',
+            list: false,
+            required: false,
+        });
+
+        expect(value).toBe(false);
+    });
+});

+ 2 - 2
packages/admin-ui/src/lib/core/src/common/utilities/configurable-operation-utils.ts

@@ -15,7 +15,7 @@ import {
  */
 export function getConfigArgValue(value: any) {
     try {
-        return value ? JSON.parse(value) : undefined;
+        return value != null ? JSON.parse(value) : undefined;
     } catch (e) {
         return value;
     }
@@ -103,7 +103,7 @@ export function getDefaultConfigArgValue(arg: ConfigArgDefinition): any {
     if (arg.list) {
         return [];
     }
-    if (arg.defaultValue) {
+    if (arg.defaultValue != null) {
         return arg.defaultValue;
     }
     const type = arg.type as ConfigArgType;