Passed
Push — 6.4 ( a2ab34...70d76f )
by Christian
13:23 queued 14s
created

sw-order-detail-details.spec.ts ➔ createWrapper   B

Complexity

Conditions 2

Size

Total Lines 64
Code Lines 53

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 53
dl 0
loc 64
rs 8.5381
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
import Vue from 'vue';
2
import Vuex from 'vuex';
3
import { shallowMount, createLocalVue } from '@vue/test-utils';
4
import type { Wrapper } from '@vue/test-utils';
5
import swOrderDetailDetails from 'src/module/sw-order/view/sw-order-detail-details';
6
import orderDetailStore from 'src/module/sw-order/state/order-detail.store';
7
8
const orderMock = {
9
    orderCustomer: {
10
        email: '[email protected]'
11
    },
12
    shippingCosts: {
13
        calculatedTaxes: [],
14
        totalPrice: {}
15
    },
16
    currency: {
17
        translated: {
18
            shortName: ''
19
        }
20
    },
21
    transactions: [
22
        {
23
            stateMachineState: {
24
                translated: {
25
                    name: ''
26
                }
27
            }
28
        }
29
    ],
30
    deliveries: [
31
        {
32
            stateMachineState: {
33
                translated: {
34
                    name: ''
35
                }
36
            },
37
            shippingCosts: {
38
                calculatedTaxes: [],
39
                totalPrice: {}
40
            },
41
            shippingOrderAddress: {
42
                id: 'address1'
43
            },
44
        }
45
    ],
46
    stateMachineState: {
47
        translated: {
48
            name: ''
49
        }
50
    },
51
    price: {
52
        calculatedTaxes: [],
53
        taxStatus: 'gross'
54
    },
55
    totalRounding: {
56
        interval: 0.01,
57
        decimals: 2
58
    },
59
    itemRounding: {
60
        interval: 0.01,
61
        decimals: 2
62
    },
63
    lineItems: [],
64
    billingAddressId: 'address1',
65
    shippingAddressId: 'address1',
66
    addresses: [
67
        {
68
            id: 'address1',
69
        },
70
    ],
71
};
72
73
Shopware.Component.register('sw-order-detail-details', swOrderDetailDetails);
74
75
async function createWrapper(privileges = []): Promise<Wrapper<Vue>> {
76
    const localVue = createLocalVue();
77
    localVue.use(Vuex);
78
    localVue.directive('tooltip', {});
79
    localVue.filter('currency', Shopware.Filter.getByName('currency'));
80
81
    orderMock.transactions.last = () => ({
82
        stateMachineState: {
83
            translated: {
84
                name: ''
85
            }
86
        }
87
    });
88
89
    orderMock.addresses.get = () => ({});
90
91
    return shallowMount(await Shopware.Component.build('sw-order-detail-details'), {
92
        localVue,
93
        stubs: {
94
            'sw-card-view': true,
95
            'sw-order-user-card': true,
96
            'sw-container': true,
97
            'sw-order-state-select': true,
98
            'sw-card': true,
99
            'sw-order-line-items-grid': true,
100
            'sw-card-section': true,
101
            'sw-description-list': true,
102
            'sw-order-saveable-field': true,
103
            'sw-order-state-history-card': true,
104
            'sw-order-delivery-metadata': true,
105
            'sw-order-document-card': true,
106
            'sw-text-field': true,
107
            'sw-order-details-state-card': true,
108
            'sw-order-address-selection': true,
109
            'sw-entity-single-select': true,
110
            'sw-number-field': true,
111
            'sw-datepicker': true,
112
            'sw-multi-tag-select': true,
113
            'sw-textarea-field': true,
114
            'sw-order-promotion-field': true
115
        },
116
        provide: {
117
            acl: {
118
                can: (key) => {
119
                    if (!key) { return true; }
120
121
                    return privileges.includes(key);
122
                }
123
            },
124
            orderService: {},
125
            stateStyleDataProviderService: {
126
                getStyle: () => ({})
127
            },
128
            repositoryFactory: {
129
                create: () => ({
130
                    search: () => Promise.resolve([]),
131
                })
132
            }
133
134
        },
135
        propsData: {
136
            orderId: '1a2b3c',
137
            isSaveSuccessful: false
138
        }
139
    });
140
}
141
142
describe('src/module/sw-order/view/sw-order-detail-details', () => {
143
    let wrapper;
144
145
    beforeAll(() => {
146
        Shopware.State.registerModule('swOrderDetail', {
147
            ...orderDetailStore,
148
            state: {
149
                ...orderDetailStore.state,
150
                order: orderMock
151
            }
152
        });
153
    });
154
155
    beforeEach(async () => {
156
        wrapper = await createWrapper();
157
    });
158
159
    afterEach(async () => {
160
        await wrapper.destroy();
161
    });
162
163
    it('should be a Vue.js component', async () => {
164
        expect(wrapper.vm).toBeTruthy();
165
    });
166
167
    it('should have a disabled on transaction card', async () => {
168
        const stateCard = wrapper.find('sw-order-details-state-card-stub[state-label="sw-order.stateCard.headlineTransactionState"]');
169
        const addressSelection = wrapper.find('.sw-order-detail-details__billing-address');
170
171
        expect(stateCard.attributes().disabled).toBeTruthy();
172
        expect(addressSelection.attributes().disabled).toBeTruthy();
173
    });
174
175
    it('should not have an disabled on transaction card', async () => {
176
        wrapper = await createWrapper(['order.editor']);
177
        const stateCard = wrapper.find('sw-order-details-state-card-stub[state-label="sw-order.stateCard.headlineTransactionState"');
178
        const addressSelection = wrapper.find('.sw-order-detail-details__billing-address');
179
180
        expect(stateCard.attributes().disabled).toBeUndefined();
181
        expect(addressSelection.attributes().disabled).toBeUndefined();
182
    });
183
184
    it('should have a disabled on delivery card', async () => {
185
        const stateCard = wrapper.find('sw-order-details-state-card-stub[state-label="sw-order.stateCard.headlineDeliveryState"');
186
        const addressSelection = wrapper.find('.sw-order-detail-details__shipping-address');
187
        const trackingCodeField = wrapper.find('.sw-order-user-card__tracking-code-select');
188
189
        expect(stateCard.attributes().disabled).toBeTruthy();
190
        expect(addressSelection.attributes().disabled).toBeTruthy();
191
        expect(trackingCodeField.attributes().disabled).toBeTruthy();
192
    });
193
194
    it('should not have a disabled on detail card', async () => {
195
        wrapper = await createWrapper(['order.editor']);
196
197
        const stateCard = wrapper.find('sw-order-details-state-card-stub[state-label="sw-order.stateCard.headlineDeliveryState"');
198
        const addressSelection = wrapper.find('.sw-order-detail-details__shipping-address');
199
        const trackingCodeField = wrapper.find('.sw-order-user-card__tracking-code-select');
200
201
        expect(stateCard.attributes().disabled).toBeUndefined();
202
        expect(addressSelection.attributes().disabled).toBeUndefined();
203
        expect(trackingCodeField.attributes().disabled).toBeUndefined();
204
    });
205
206
    it('should have a disabled on order card', async () => {
207
        const stateCard = wrapper.find('sw-order-details-state-card-stub[state-label="sw-order.stateCard.headlineOrderState"');
208
        const emailField = wrapper.find('.sw-order-detail-details__email');
209
        const phoneNumberField = wrapper.find('.sw-order-detail-details__phone-number');
210
        const affiliateCodeField = wrapper.find('.sw-order-detail-details__affiliate-code');
211
        const campaignCodeField = wrapper.find('.sw-order-detail-details__campaign-code');
212
213
        expect(stateCard.attributes().disabled).toBeTruthy();
214
        expect(emailField.attributes().disabled).toBeTruthy();
215
        expect(phoneNumberField.attributes().disabled).toBeTruthy();
216
        expect(affiliateCodeField.attributes().disabled).toBeTruthy();
217
        expect(campaignCodeField.attributes().disabled).toBeTruthy();
218
    });
219
220
    it('should not have a disabled on order card', async () => {
221
        wrapper = await createWrapper(['order.editor']);
222
223
        const stateCard = wrapper.find('sw-order-details-state-card-stub[state-label="sw-order.stateCard.headlineOrderState"');
224
        const emailField = wrapper.find('.sw-order-detail-details__email');
225
        const phoneNumberField = wrapper.find('.sw-order-detail-details__phone-number');
226
        const affiliateCodeField = wrapper.find('.sw-order-detail-details__affiliate-code');
227
        const campaignCodeField = wrapper.find('.sw-order-detail-details__campaign-code');
228
229
        expect(stateCard.attributes().disabled).toBeUndefined();
230
        expect(emailField.attributes().disabled).toBeUndefined();
231
        expect(phoneNumberField.attributes().disabled).toBeUndefined();
232
        expect(affiliateCodeField.attributes().disabled).toBeUndefined();
233
        expect(campaignCodeField.attributes().disabled).toBeUndefined();
234
    });
235
});
236