@eturnity/eturnity_reusable_components 7.45.1 → 7.45.2

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eturnity/eturnity_reusable_components",
3
- "version": "7.45.1",
3
+ "version": "7.45.2",
4
4
  "files": [
5
5
  "dist",
6
6
  "src"
@@ -0,0 +1,79 @@
1
+ import Card from './index.vue'
2
+
3
+ export default {
4
+ title: 'Card',
5
+ component: Card,
6
+ tags: ['autodocs'],
7
+ }
8
+
9
+ // To use:
10
+ // <RCCard
11
+ // :isLoading="true"
12
+ // minWidth="150px"
13
+ // popoverText="Sample popover text"
14
+ // :showPopover="true"
15
+ // title="Sample title"
16
+ // titleClass="sampleTitleClass"
17
+ // viewCardClass="sampleViewCardClass"
18
+ // width="200px"
19
+ // />
20
+
21
+ export const Default = {
22
+ args: {
23
+ title: 'Sample card title',
24
+ },
25
+ render: (args) => ({
26
+ components: { Card },
27
+ setup() {
28
+ return { args }
29
+ },
30
+ template: `
31
+ <Card v-bind="args">
32
+ Sample card content
33
+ </ActionBanner>
34
+ `,
35
+ }),
36
+ }
37
+
38
+ export const LoadingCard = {
39
+ args: {
40
+ isLoading: true,
41
+ },
42
+ }
43
+
44
+ export const CustomWidth = {
45
+ args: {
46
+ title: 'Sample card title',
47
+ width: '600px',
48
+ },
49
+ render: (args) => ({
50
+ components: { Card },
51
+ setup() {
52
+ return { args }
53
+ },
54
+ template: `
55
+ <Card v-bind="args">
56
+ Sample card content
57
+ </ActionBanner>
58
+ `,
59
+ }),
60
+ }
61
+
62
+ export const PopoverShown = {
63
+ args: {
64
+ title: 'Sample card title',
65
+ showPopover: true,
66
+ popoverText: 'Sample popover text',
67
+ },
68
+ render: (args) => ({
69
+ components: { Card },
70
+ setup() {
71
+ return { args }
72
+ },
73
+ template: `
74
+ <Card v-bind="args">
75
+ Sample card content
76
+ </ActionBanner>
77
+ `,
78
+ }),
79
+ }
@@ -0,0 +1,135 @@
1
+ /* eslint-disable */
2
+ import { mount, config } from '@vue/test-utils'
3
+ import Card from '@/components/card'
4
+ import theme from '@/assets/theme'
5
+
6
+ config.global.components = {
7
+ EtPopover: {
8
+ template: '<div>{{ text }}</div>',
9
+ props: ['text'],
10
+ },
11
+ }
12
+
13
+ config.global.mocks = {
14
+ $gettext: (msg) => msg,
15
+ }
16
+
17
+ describe('Card Component', () => {
18
+ it('card title is shown when a title props is passed', () => {
19
+ const title = 'Test Card Title'
20
+ const wrapper = mount(Card, {
21
+ props: {
22
+ title,
23
+ },
24
+ global: {
25
+ provide: {
26
+ theme,
27
+ },
28
+ },
29
+ })
30
+
31
+ expect(wrapper.text()).toContain(title)
32
+ })
33
+
34
+ it('card spinner is shown when user set isLoading props to true', async () => {
35
+ // Start with isLoading is false
36
+ const wrapper = mount(Card, {
37
+ props: {
38
+ title: 'Test Card Title',
39
+ isLoading: false,
40
+ },
41
+ global: {
42
+ provide: {
43
+ theme,
44
+ },
45
+ },
46
+ })
47
+
48
+ let cardSpinner = wrapper.find('[data-test-id="card_spinner"]')
49
+ expect(cardSpinner.exists()).toBe(false)
50
+ await wrapper.setProps({ isLoading: true })
51
+ await wrapper.vm.$nextTick()
52
+ cardSpinner = wrapper.find('[data-test-id="card_spinner"]')
53
+ expect(cardSpinner.exists()).toBe(true)
54
+ })
55
+
56
+ it('card wrapper has custom class when viewCardClass props is passed', async () => {
57
+ const viewCardClass = 'sampleClass'
58
+ const wrapper = mount(Card, {
59
+ props: {
60
+ title: 'Test Card Title',
61
+ viewCardClass,
62
+ },
63
+ global: {
64
+ provide: {
65
+ theme,
66
+ },
67
+ },
68
+ })
69
+
70
+ const cardMainWrapper = wrapper.find('[data-test-id="card_main_wrapper"]')
71
+ expect(cardMainWrapper.classes()).toContain(viewCardClass)
72
+ })
73
+
74
+ it('card title has custom class when titleClass props is passed', async () => {
75
+ const titleClass = 'sampleClass'
76
+ const wrapper = mount(Card, {
77
+ props: {
78
+ title: 'Test Card Title',
79
+ titleClass,
80
+ },
81
+ global: {
82
+ provide: {
83
+ theme,
84
+ },
85
+ },
86
+ })
87
+
88
+ const cardTitle = wrapper.find('[data-test-id="card_title"]')
89
+ expect(cardTitle.classes()).toContain(titleClass)
90
+ })
91
+
92
+ it('card popover is shown when user set showPopover props to true', async () => {
93
+ // Start with showPopover is false
94
+ const wrapper = mount(Card, {
95
+ props: {
96
+ title: 'Test Card Title',
97
+ showPopover: false,
98
+ popoverText: 'Sample popover text',
99
+ },
100
+ global: {
101
+ provide: {
102
+ theme,
103
+ },
104
+ },
105
+ })
106
+
107
+ let cardPopover = wrapper.find('[data-test-id="card_popover"]')
108
+ expect(cardPopover.exists()).toBe(false)
109
+ await wrapper.setProps({ showPopover: true })
110
+ await wrapper.vm.$nextTick()
111
+ cardPopover = wrapper.find('[data-test-id="card_popover"]')
112
+ expect(cardPopover.exists()).toBe(true)
113
+ expect(cardPopover.text()).toContain('Sample popover text')
114
+ })
115
+
116
+ it('card popover text is set when user passed a popoverText props value', async () => {
117
+ const popoverText = 'Sample popover text'
118
+ const wrapper = mount(Card, {
119
+ props: {
120
+ title: 'Test Card Title',
121
+ showPopover: true,
122
+ popoverText,
123
+ },
124
+ global: {
125
+ provide: {
126
+ theme,
127
+ },
128
+ },
129
+ })
130
+
131
+ let cardPopover = wrapper.find('[data-test-id="card_popover"]')
132
+ expect(cardPopover.exists()).toBe(true)
133
+ expect(cardPopover.text()).toContain('Sample popover text')
134
+ })
135
+ })
@@ -2,15 +2,22 @@
2
2
  <Wrapper
3
3
  v-show="!isLoading"
4
4
  :class="viewCardClass"
5
+ data-test-id="card_main_wrapper"
5
6
  :min-width="minWidth"
6
7
  :width="width"
7
8
  >
8
- <Spinner v-if="isLoading" :limited-to-modal="true" size="50px" />
9
+ <Spinner
10
+ v-if="isLoading"
11
+ data-test-id="card_spinner"
12
+ :limited-to-modal="true"
13
+ size="50px"
14
+ />
9
15
  <CardWrapper v-else>
10
- <CardTitle :class="titleClass">
16
+ <CardTitle :class="titleClass" data-test-id="card_title">
11
17
  {{ $gettext(title) }}
12
18
  <EtPopover
13
19
  v-if="showPopover && popoverText !== ''"
20
+ data-test-id="card_popover"
14
21
  :text="popoverText"
15
22
  />
16
23
  </CardTitle>
@@ -20,6 +27,19 @@
20
27
  </template>
21
28
 
22
29
  <script>
30
+ // To use:
31
+ // import RCCard from "@eturnity/eturnity_reusable_components/src/components/card"
32
+ // <RCCard
33
+ // :isLoading="true"
34
+ // minWidth="150px"
35
+ // popoverText="Sample popover text"
36
+ // :showPopover="true"
37
+ // title="Sample title"
38
+ // titleClass="sampleTitleClass"
39
+ // viewCardClass="sampleViewCardClass"
40
+ // width="200px"
41
+ // />
42
+
23
43
  import styled from 'vue3-styled-components'
24
44
  import Spinner from '../spinner'
25
45