From 989dd653209bd55cf9df278a314a6c61bc05d088 Mon Sep 17 00:00:00 2001 From: Guillaume Lepoetre Date: Fri, 27 Oct 2023 16:48:13 +0200 Subject: [PATCH 01/14] feat: add data-test attribute --- .../components/accordion/src/accordion.ts | 20 ++++++++ .../components/accordion/src/accordion.vue | 15 +++++- .../accordion/stories/accordion.stories.ts | 15 ++++++ packages/components/alert/src/alert.ts | 15 ++++++ packages/components/alert/src/alert.vue | 6 ++- .../components/alert/stories/alert.stories.ts | 12 +++++ packages/components/badge/src/badge.ts | 5 ++ packages/components/badge/src/badge.vue | 6 ++- .../components/badge/stories/badge.stories.ts | 5 ++ .../components/breadcrumb/src/breadcrumb.ts | 3 +- .../components/breadcrumb/src/breadcrumb.vue | 6 ++- .../breadcrumb/stories/breadcrumb.stories.ts | 1 + packages/components/button/src/button.ts | 15 ++++++ packages/components/button/src/button.vue | 3 ++ .../button/stories/button.stories.ts | 15 ++++++ packages/components/checkbox/src/checkbox.ts | 10 ++++ packages/components/checkbox/src/checkbox.vue | 2 + .../checkbox/stories/checkbox.stories.ts | 8 ++++ packages/components/icon/src/icon.ts | 5 ++ packages/components/icon/src/icon.vue | 7 ++- .../components/icon/stories/icon.stories.ts | 4 ++ packages/components/input/src/input.ts | 10 ++++ packages/components/input/src/input.vue | 6 ++- .../components/input/stories/input.stories.ts | 8 ++++ packages/components/label/src/label.ts | 5 ++ packages/components/label/src/label.vue | 2 +- .../components/label/stories/label.stories.ts | 4 ++ packages/components/link/src/link.ts | 5 ++ packages/components/link/src/link.vue | 1 + .../components/link/stories/link.stories.ts | 4 ++ .../components/menu/src/menu-item-title.ts | 8 +++- .../components/menu/src/menu-item-title.vue | 2 +- .../menu/stories/menu-item-title.stories.ts | 48 +++++++++++++++++++ .../components/menu/stories/menu.stories.ts | 2 +- packages/components/modal/src/modal.ts | 25 ++++++++++ packages/components/modal/src/modal.vue | 8 +++- .../components/modal/stories/modal.stories.ts | 25 ++++++++++ .../pagination/src/pagination-large.ts | 15 ++++++ .../pagination/src/pagination-large.vue | 4 +- .../pagination/src/pagination-loader.ts | 5 ++ .../pagination/src/pagination-loader.vue | 1 + .../pagination/src/pagination-medium.ts | 15 ++++++ .../pagination/src/pagination-medium.vue | 4 +- .../pagination/src/pagination-mobile.ts | 15 ++++++ .../pagination/src/pagination-mobile.vue | 4 +- .../pagination/src/pagination-small.ts | 15 ++++++ .../pagination/src/pagination-small.vue | 4 +- .../components/pagination/src/pagination.ts | 15 ++++++ .../components/pagination/src/pagination.vue | 13 +++++ .../pagination/stories/pagination.stories.ts | 36 ++++++++++++++ .../progress-bar/src/progress-bar.ts | 5 ++ .../progress-bar/src/progress-bar.vue | 1 + .../stories/progress-bar.stories.ts | 6 +++ .../src/progress-stepper-step.ts | 15 ++++++ .../src/progress-stepper-step.vue | 8 +++- .../stories/progress-stepper-step.stories.ts | 12 +++++ packages/components/radio/src/radio.ts | 10 ++++ packages/components/radio/src/radio.vue | 8 +++- .../components/radio/stories/radio.stories.ts | 10 ++++ .../components/select/test/select.spec.ts | 2 +- packages/components/tooltip/src/tooltip.ts | 10 ++++ packages/components/tooltip/src/tooltip.vue | 2 + .../tooltip/stories/tooltip.stories.ts | 8 ++++ 63 files changed, 563 insertions(+), 21 deletions(-) create mode 100644 packages/components/menu/stories/menu-item-title.stories.ts diff --git a/packages/components/accordion/src/accordion.ts b/packages/components/accordion/src/accordion.ts index 8c14194e..7ef6ac2f 100644 --- a/packages/components/accordion/src/accordion.ts +++ b/packages/components/accordion/src/accordion.ts @@ -7,21 +7,41 @@ export const accordionProps = buildProps({ type: String, required: true, }, + buttonDataTest: { + type: String, + required: false, + default: undefined, + }, title: { type: String, required: false, default: undefined, }, + titleDataTest: { + type: String, + required: false, + default: undefined, + }, subTitle: { type: String, required: false, default: undefined, }, + subTitleDataTest: { + type: String, + required: false, + default: undefined, + }, icon: { type: String, required: false, default: undefined, }, + iconDataTest: { + type: String, + required: false, + default: undefined, + }, disabled: { type: Boolean, required: false, diff --git a/packages/components/accordion/src/accordion.vue b/packages/components/accordion/src/accordion.vue index bebae64a..6657a4ad 100644 --- a/packages/components/accordion/src/accordion.vue +++ b/packages/components/accordion/src/accordion.vue @@ -11,6 +11,7 @@ :aria-controls="id" class="puik-accordion__header" :disabled="disabled" + :data-test="buttonDataTest" @click="onClick" >
-
{{ title }}
-
+
+ {{ title }} +
+
{{ subTitle }}
diff --git a/packages/components/accordion/stories/accordion.stories.ts b/packages/components/accordion/stories/accordion.stories.ts index 9bd358e2..8d2a0d96 100644 --- a/packages/components/accordion/stories/accordion.stories.ts +++ b/packages/components/accordion/stories/accordion.stories.ts @@ -15,14 +15,26 @@ export default { control: 'text', description: 'Title displayed in the header', }, + titleDataTest: { + control: 'text', + description: 'Set the data-test attribute for the title', + }, subTitle: { control: 'text', description: 'Sub title displayed in the header', }, + subTitleDataTest: { + control: 'text', + description: 'Set the data-test attribute for the sub title', + }, icon: { control: 'text', description: 'Icon used in the header', }, + iconDataTest: { + control: 'text', + description: 'Set the data-test attribute for the icon', + }, disabled: { control: 'boolean', description: 'Set accordion disabled', @@ -66,6 +78,9 @@ export const Default = { subTitle: 'Accordion subtitle', icon: 'home', disabled: false, + titleDataTest: '', + subTitleDataTest: '', + iconDataTest: '', }, parameters: { diff --git a/packages/components/alert/src/alert.ts b/packages/components/alert/src/alert.ts index ac37d3a0..d81c172e 100644 --- a/packages/components/alert/src/alert.ts +++ b/packages/components/alert/src/alert.ts @@ -19,11 +19,21 @@ export const alertProps = buildProps({ required: false, default: undefined, }, + titleDataTest: { + type: String, + required: false, + default: undefined, + }, description: { type: String, required: false, default: undefined, }, + descriptionDataTest: { + type: String, + required: false, + default: undefined, + }, variant: { type: String as PropType, default: 'success', @@ -37,6 +47,11 @@ export const alertProps = buildProps({ required: false, default: undefined, }, + buttonDataTest: { + type: String, + required: false, + default: undefined, + }, ariaLive: { type: String as PropType<'polite' | 'assertive'>, required: false, diff --git a/packages/components/alert/src/alert.vue b/packages/components/alert/src/alert.vue index 4cb775ba..5e842072 100644 --- a/packages/components/alert/src/alert.vue +++ b/packages/components/alert/src/alert.vue @@ -10,10 +10,13 @@
-

{{ title }}

+

+ {{ title }} +

{{ description }}
@@ -22,6 +25,7 @@ v-if="buttonLabel" :variant="variant" class="puik-alert__button" + :button-data-test="buttonDataTest" @click="click" > {{ buttonLabel }} diff --git a/packages/components/alert/stories/alert.stories.ts b/packages/components/alert/stories/alert.stories.ts index 0f45a8b4..d0e349e7 100644 --- a/packages/components/alert/stories/alert.stories.ts +++ b/packages/components/alert/stories/alert.stories.ts @@ -44,6 +44,15 @@ export default { control: 'none', description: 'Set the alert description', }, + titleDataTest: { + description: 'Set the data-test attribute for the title', + }, + descriptionDataTest: { + description: 'Set the data-test attribute for the description', + }, + buttonDataTest: { + description: 'Set the data-test attribute for the button', + }, }, args: { title: 'Title', @@ -51,6 +60,9 @@ export default { variant: 'success', disableBorders: false, buttonLabel: 'Button', + titleDataTest: '', + descriptionDataTest: '', + buttonDataTest: '', }, } as Meta diff --git a/packages/components/badge/src/badge.ts b/packages/components/badge/src/badge.ts index 04927ec2..26d6e333 100644 --- a/packages/components/badge/src/badge.ts +++ b/packages/components/badge/src/badge.ts @@ -17,6 +17,11 @@ export const badgeProps = buildProps({ type: String as PropType, default: 'neutral', }, + badgeDataTest: { + type: String, + required: false, + default: undefined, + }, } as const) export type BadgeProps = ExtractPropTypes diff --git a/packages/components/badge/src/badge.vue b/packages/components/badge/src/badge.vue index 031efe10..888fde3f 100644 --- a/packages/components/badge/src/badge.vue +++ b/packages/components/badge/src/badge.vue @@ -1,5 +1,9 @@ diff --git a/packages/components/badge/stories/badge.stories.ts b/packages/components/badge/stories/badge.stories.ts index 5ec5d5c7..b9c06ad5 100644 --- a/packages/components/badge/stories/badge.stories.ts +++ b/packages/components/badge/stories/badge.stories.ts @@ -25,10 +25,15 @@ export default { }, }, }, + badgeDataTest: { + control: 'text', + description: 'Set the data-test attribute on the badge', + }, }, args: { default: 'Status', variant: 'neutral', + badgeDataTest: '', }, } as Meta diff --git a/packages/components/breadcrumb/src/breadcrumb.ts b/packages/components/breadcrumb/src/breadcrumb.ts index 02f9e895..5bbe869c 100644 --- a/packages/components/breadcrumb/src/breadcrumb.ts +++ b/packages/components/breadcrumb/src/breadcrumb.ts @@ -7,7 +7,8 @@ export interface BreadcrumbItem { label: string to?: RouteLocationRaw href?: string - target?: string + target?: '_blank' | '_self' | '_parent' | '_top' + dataTest?: string } export const breadcrumbProps = buildProps({ diff --git a/packages/components/breadcrumb/src/breadcrumb.vue b/packages/components/breadcrumb/src/breadcrumb.vue index f060fbd1..8d524d83 100644 --- a/packages/components/breadcrumb/src/breadcrumb.vue +++ b/packages/components/breadcrumb/src/breadcrumb.vue @@ -17,6 +17,7 @@ :to="item.to" :href="item.href" :target="item.target" + :data-test="item.dataTest" size="sm" > {{ item.label }} @@ -29,7 +30,10 @@ >
-
+
{{ items[items.length - 1].label }}
diff --git a/packages/components/breadcrumb/stories/breadcrumb.stories.ts b/packages/components/breadcrumb/stories/breadcrumb.stories.ts index 4b2459d6..9761907a 100644 --- a/packages/components/breadcrumb/stories/breadcrumb.stories.ts +++ b/packages/components/breadcrumb/stories/breadcrumb.stories.ts @@ -23,6 +23,7 @@ interface BreadBreadcrumbItem { to: string | undefined, href: string | undefined, target: '_blank' | '_self' | '_parent' | '_top' | undefined, + dataTest: string | undefined, }`, }, }, diff --git a/packages/components/button/src/button.ts b/packages/components/button/src/button.ts index 73db5e85..9c8a2fdf 100644 --- a/packages/components/button/src/button.ts +++ b/packages/components/button/src/button.ts @@ -48,11 +48,21 @@ export const buttonProps = buildProps({ required: false, default: '', }, + leftIconDataTest: { + type: String, + required: false, + default: undefined, + }, rightIcon: { type: String, required: false, default: '', }, + rightIconDataTest: { + type: String, + required: false, + default: undefined, + }, to: { type: [Object, String] as PropType, required: false, @@ -68,6 +78,11 @@ export const buttonProps = buildProps({ required: false, default: undefined, }, + buttonDataTest: { + type: String, + required: false, + default: undefined, + }, } as const) export type ButtonProps = ExtractPropTypes diff --git a/packages/components/button/src/button.vue b/packages/components/button/src/button.vue index 9f70637a..828b9afc 100644 --- a/packages/components/button/src/button.vue +++ b/packages/components/button/src/button.vue @@ -10,6 +10,7 @@ { 'puik-button--fluid': fluid }, ]" :disabled="disabled" + :data-test="buttonDataTest" @click="setSelected" > diff --git a/packages/components/button/stories/button.stories.ts b/packages/components/button/stories/button.stories.ts index 0406bdf0..401d5efe 100644 --- a/packages/components/button/stories/button.stories.ts +++ b/packages/components/button/stories/button.stories.ts @@ -71,6 +71,18 @@ export default { control: 'text', description: 'Set a link for the button (changes button to "a" html tag)', }, + buttonDataTest: { + control: 'text', + description: 'Set a data-test attribute to the button', + }, + leftIconDataTest: { + control: 'text', + description: 'Set a data-test attribute to the left icon', + }, + rightIconDataTest: { + control: 'text', + description: 'Set a data-test attribute to the right icon', + }, }, args: { variant: 'primary', @@ -82,6 +94,9 @@ export default { to: undefined, href: undefined, default: 'Add to cart', + buttonDataTest: '', + leftIconDataTest: '', + rightIconDataTest: '', }, } as Meta diff --git a/packages/components/checkbox/src/checkbox.ts b/packages/components/checkbox/src/checkbox.ts index b443a474..e63526ca 100644 --- a/packages/components/checkbox/src/checkbox.ts +++ b/packages/components/checkbox/src/checkbox.ts @@ -12,6 +12,11 @@ export const checkboxProps = buildProps({ required: false, default: undefined, }, + labelDataTest: { + type: String, + required: false, + default: undefined, + }, disabled: { type: Boolean, required: false, @@ -22,6 +27,11 @@ export const checkboxProps = buildProps({ required: false, default: false, }, + inputDataTest: { + type: String, + required: false, + default: undefined, + }, } as const) export type CheckboxProps = ExtractPropTypes diff --git a/packages/components/checkbox/src/checkbox.vue b/packages/components/checkbox/src/checkbox.vue index aecc9ea4..e91fd61a 100644 --- a/packages/components/checkbox/src/checkbox.vue +++ b/packages/components/checkbox/src/checkbox.vue @@ -8,11 +8,13 @@ type="checkbox" :indeterminate="indeterminate" :disabled="disabled" + :data-test="inputDataTest" /> diff --git a/packages/components/checkbox/stories/checkbox.stories.ts b/packages/components/checkbox/stories/checkbox.stories.ts index c421eff8..636a2f7d 100644 --- a/packages/components/checkbox/stories/checkbox.stories.ts +++ b/packages/components/checkbox/stories/checkbox.stories.ts @@ -33,6 +33,12 @@ export default { }, }, }, + inputDataTest: { + description: 'Set the input data-test attribute', + }, + labelDataTest: { + description: 'Set the label data-test attribute', + }, }, args: { label: 'Label', @@ -40,6 +46,8 @@ export default { indeterminate: false, disabled: false, modelValue: false, + inputDataTest: '', + labelDataTest: '', }, } as Meta diff --git a/packages/components/icon/src/icon.ts b/packages/components/icon/src/icon.ts index 8ed7cc43..008b7611 100644 --- a/packages/components/icon/src/icon.ts +++ b/packages/components/icon/src/icon.ts @@ -7,6 +7,11 @@ export const iconProps = buildProps({ type: String, required: true, }, + dataTest: { + type: String, + required: false, + default: undefined, + }, nodeType: { type: String, default: 'div', diff --git a/packages/components/icon/src/icon.vue b/packages/components/icon/src/icon.vue index 22cd7bc0..6071cd73 100644 --- a/packages/components/icon/src/icon.vue +++ b/packages/components/icon/src/icon.vue @@ -1,5 +1,10 @@ diff --git a/packages/components/icon/stories/icon.stories.ts b/packages/components/icon/stories/icon.stories.ts index a8b7e58c..4aaffbb6 100644 --- a/packages/components/icon/stories/icon.stories.ts +++ b/packages/components/icon/stories/icon.stories.ts @@ -31,6 +31,9 @@ export default { options: ['div', 'span'], }, }, + dataTest: { + description: 'Set the data-test attribute', + }, }, } as Meta @@ -52,6 +55,7 @@ export const Default = { color: 'green', fontSize: 24, nodeType: 'span', + dataTest: '', }, parameters: { diff --git a/packages/components/input/src/input.ts b/packages/components/input/src/input.ts index c64f5338..812a81b7 100644 --- a/packages/components/input/src/input.ts +++ b/packages/components/input/src/input.ts @@ -90,6 +90,16 @@ export const inputProps = buildProps({ required: false, default: false, }, + inputDataTest: { + type: String, + required: false, + default: undefined, + }, + errorTextDataTest: { + type: String, + required: false, + default: undefined, + }, } as const) export type InputProps = ExtractPropTypes diff --git a/packages/components/input/src/input.vue b/packages/components/input/src/input.vue index db774fbc..bbb031ce 100644 --- a/packages/components/input/src/input.vue +++ b/packages/components/input/src/input.vue @@ -17,6 +17,7 @@ :min="type === 'number' ? min : undefined" :max="type === 'number' ? max : undefined" :step="type === 'number' ? step : undefined" + :data-test="inputDataTest" @focus="handleFocus" @blur="handleBlur" /> @@ -49,7 +50,10 @@ class="puik-input__hint__error__icon" font-size="1.25rem" > - + {{ error }}
diff --git a/packages/components/input/stories/input.stories.ts b/packages/components/input/stories/input.stories.ts index 5c2d25de..6e7bad25 100644 --- a/packages/components/input/stories/input.stories.ts +++ b/packages/components/input/stories/input.stories.ts @@ -93,6 +93,12 @@ export default { control: 'none', description: 'Append an icon or text to the input', }, + inputDataTest: { + description: 'Set the data-test attribute on the input element', + }, + errorTextDataTest: { + description: 'Set the data-test attribute on the error slot', + }, }, } as Meta @@ -124,6 +130,8 @@ export const Default = { min: undefined, max: undefined, disabled: false, + inputDataTest: '', + errorTextDataTest: '', }, parameters: { diff --git a/packages/components/label/src/label.ts b/packages/components/label/src/label.ts index 67b23ee8..4e25ff2a 100644 --- a/packages/components/label/src/label.ts +++ b/packages/components/label/src/label.ts @@ -2,6 +2,11 @@ import { buildProps } from '@puik/utils' import type { ExtractPropTypes } from 'vue' import type Label from './label.vue' export const labelProps = buildProps({ + dataTest: { + type: String, + required: false, + default: undefined, + }, optional: { type: Boolean, required: false, diff --git a/packages/components/label/src/label.vue b/packages/components/label/src/label.vue index 69d5080b..a89c0d56 100644 --- a/packages/components/label/src/label.vue +++ b/packages/components/label/src/label.vue @@ -1,5 +1,5 @@