diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelect.test.ts b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelect.test.ts index 5aae57b01b..fad2def1f2 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelect.test.ts +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelect.test.ts @@ -179,6 +179,42 @@ describe('WidgetSelect Value Binding', () => { expect(emitted).toBeDefined() expect(emitted![0]).toContain('100') }) + + it('displays value not in options list as placeholder (deserialized workflow value)', async () => { + // Simulate a workflow loaded with a value that's no longer in the options + // (e.g., a deleted model file) + const currentOptions = ['model1.ckpt', 'model2.safetensors'] + const deserializedValue = 'old_deleted_model.ckpt' + const widget = createMockWidget(deserializedValue, { + values: currentOptions + }) + const wrapper = mountComponent(widget, deserializedValue) + + const select = wrapper.findComponent({ name: 'Select' }) + + // The deserialized value should be shown as the placeholder + expect(select.props('placeholder')).toBe(deserializedValue) + + // The options should remain unchanged (not include the deserialized value) + const options = select.props('options') + expect(options).not.toContain(deserializedValue) + expect(options).toContain('model1.ckpt') + expect(options).toContain('model2.safetensors') + }) + + it('uses widget placeholder when value exists in options', async () => { + const options = ['option1', 'option2', 'option3'] + const widget = createMockWidget('option2', { + values: options, + placeholder: 'Select an option' + }) + const wrapper = mountComponent(widget, 'option2') + + const select = wrapper.findComponent({ name: 'Select' }) + + // Should use the widget's placeholder since value is in options + expect(select.props('placeholder')).toBe('Select an option') + }) }) describe('Spec-aware rendering', () => { diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue index cb69ac7b88..48d03ff2ad 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue @@ -3,6 +3,7 @@