Skip to content

Commit faccf0d

Browse files
lucaswerkmeisterjenkins-bot
authored andcommitted
Add Jest test for wbui2025 references
With a TODO that, once we have separate wrapper elements for separate references (so they can be styled distinctly, see T400237), we should also assert that. Right now it’s one flat list of snak <div>s, emitted from two nested <template v-for=>s. Bug: T400340 Change-Id: I2a54eb621c1dd337f03db7e2f81ebf78143dfc81
1 parent ffb1b9d commit faccf0d

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
jest.mock(
2+
'../../codex.js',
3+
() => require( '@wikimedia/codex' ),
4+
{ virtual: true }
5+
);
6+
7+
const propertyNameComponent = require( '../../resources/wikibase.wbui2025/wikibase.wbui2025.propertyName.vue' );
8+
const snakValueComponent = require( '../../resources/wikibase.wbui2025/wikibase.wbui2025.snakValue.vue' );
9+
const referencesComponent = require( '../../resources/wikibase.wbui2025/wikibase.wbui2025.references.vue' );
10+
const { mount } = require( '@vue/test-utils' );
11+
const { createTestingPinia } = require( '@pinia/testing' );
12+
13+
describe( 'wikibase.wbui2025.references', () => {
14+
it( 'defines component', async () => {
15+
expect( typeof referencesComponent ).toBe( 'object' );
16+
expect( referencesComponent )
17+
.toHaveProperty( 'name', 'WikibaseWbui2025References' );
18+
} );
19+
20+
describe( 'the mounted component', () => {
21+
let wrapper;
22+
beforeEach( async () => {
23+
wrapper = await mount( referencesComponent, {
24+
props: {
25+
references: [
26+
{
27+
snaks: {
28+
P1: [
29+
{
30+
snaktype: 'value',
31+
property: 'P1',
32+
hash: '3ab28b81d81a4d2ec1227cf068e09850d6d8b2e3',
33+
datavalue: { value: 'reference10', type: 'string' },
34+
datatype: 'string'
35+
},
36+
{
37+
snaktype: 'value',
38+
property: 'P1',
39+
hash: '24f38d18cb3c564dc39dc73abc54acaf38194666',
40+
datavalue: { value: 'reference11', type: 'string' },
41+
datatype: 'string'
42+
}
43+
],
44+
P2: [
45+
{
46+
snaktype: 'value',
47+
property: 'P2',
48+
hash: 'ed7b027c838c304a0d455dc0b9c99a75a1ca7751',
49+
datavalue: { value: 'reference20', type: 'string' },
50+
datatype: 'string'
51+
}
52+
]
53+
},
54+
'snaks-order': [ 'P2', 'P1' ]
55+
},
56+
{
57+
snaks: {
58+
P3: [
59+
{
60+
snaktype: 'value',
61+
property: 'P3',
62+
hash: '16b2c8d03729480fd64a1c34c40a0aa0b8f7d823',
63+
datavalue: { value: 'reference30', type: 'string' },
64+
datatype: 'string'
65+
}
66+
]
67+
},
68+
'snaks-order': [ 'P3' ]
69+
}
70+
]
71+
},
72+
global: {
73+
plugins: [
74+
createTestingPinia()
75+
]
76+
}
77+
} );
78+
} );
79+
80+
it( 'mounts successfully', () => {
81+
expect( wrapper.exists() ).toBe( true );
82+
expect( wrapper.findAll( '.wikibase-wbui2025-clickable' ) ).toHaveLength( 1 );
83+
} );
84+
85+
it( 'mounts property name and snak value', () => {
86+
const propertyNames = wrapper.findAllComponents( propertyNameComponent );
87+
expect( propertyNames ).toHaveLength( 4 );
88+
expect( propertyNames[ 0 ].props( 'propertyId' ) ).toBe( 'P2' );
89+
expect( propertyNames[ 1 ].props( 'propertyId' ) ).toBe( 'P1' );
90+
expect( propertyNames[ 2 ].props( 'propertyId' ) ).toBe( 'P1' );
91+
expect( propertyNames[ 3 ].props( 'propertyId' ) ).toBe( 'P3' );
92+
const snakValues = wrapper.findAllComponents( snakValueComponent );
93+
expect( snakValues ).toHaveLength( 4 );
94+
expect( snakValues[ 0 ].props( 'snak' ) )
95+
.toHaveProperty( [ 'datavalue', 'value' ], 'reference20' );
96+
expect( snakValues[ 1 ].props( 'snak' ) )
97+
.toHaveProperty( [ 'datavalue', 'value' ], 'reference10' );
98+
expect( snakValues[ 2 ].props( 'snak' ) )
99+
.toHaveProperty( [ 'datavalue', 'value' ], 'reference11' );
100+
expect( snakValues[ 3 ].props( 'snak' ) )
101+
.toHaveProperty( [ 'datavalue', 'value' ], 'reference30' );
102+
// TODO assert that the two references are in separate wrapper elements (T400237)
103+
} );
104+
} );
105+
} );

0 commit comments

Comments
 (0)