Page MenuHomeWickedGov Phorge

BlockLog.test.js
No OneTemporary

Size
5 KB
Referenced Files
None
Subscribers
None

BlockLog.test.js

'use strict';
const { mount, flushPromises } = require( '@vue/test-utils' );
const { createTestingPinia } = require( '@pinia/testing' );
const { mockMwApiGet, mockMwConfigGet } = require( './SpecialBlock.setup.js' );
const BlockLog = require( '../../../resources/src/mediawiki.special.block/components/BlockLog.vue' );
beforeAll( () => mockMwApiGet() );
describe( 'BlockLog', () => {
it( 'should show a table with one row when given a user with one block', async () => {
mockMwConfigGet( { blockTargetUser: 'ExampleUser' } );
const wrapper = mount( BlockLog, {
global: { plugins: [ createTestingPinia( { stubActions: false } ) ] }
} );
await flushPromises();
// Test: The table should exist
expect( wrapper.find( '.cdx-table__table' ).exists() ).toBeTruthy();
const rows = wrapper.findAll( '.cdx-table__table tbody tr' );
// Test: The table tbody should have one row
expect( rows ).toHaveLength( 1 );
} );
it( 'should show a table with the no-previous-blocks message when given a user with no blocks', async () => {
mockMwConfigGet( { blockTargetUser: 'NeverBlocked' } );
const wrapper = mount( BlockLog, {
global: { plugins: [ createTestingPinia( { stubActions: false } ) ] }
} );
await flushPromises();
// Test: The table should exist
expect( wrapper.find( '.cdx-table__table' ).exists() ).toBeTruthy();
const rows = wrapper.findAll( '.cdx-table__table tbody tr' );
// Test: The table tbody should have one row
expect( rows ).toHaveLength( 1 );
// Test: The row should contain the no-previous-blocks message
expect( rows[ 0 ].text() ).toContain( 'block-user-no-previous-blocks' );
} );
it( 'should show a table with ten rows, and a show more link, when given a user with more than ten blocks', async () => {
mockMwConfigGet( { blockTargetUser: 'BlockedALot' } );
const wrapper = mount( BlockLog, {
global: { plugins: [ createTestingPinia( { stubActions: false } ) ] }
} );
await flushPromises();
// Test: The table should exist
expect( wrapper.find( '.cdx-table__table' ).exists() ).toBeTruthy();
const rows = wrapper.findAll( '.cdx-table__table tbody tr' );
// Test: The table tbody should have ten rows
expect( rows ).toHaveLength( 10 );
// Test: The show more link should exist
expect( wrapper.find( '.mw-block-log-fulllog' ).exists() ).toBeTruthy();
} );
it( 'should show the suppress log with block and reblock entries', async () => {
mockMwConfigGet( { blockTargetUser: 'BadNameBlocked' } );
const wrapper = mount( BlockLog, {
propsData: { blockLogType: 'suppress' },
global: { plugins: [ createTestingPinia( { stubActions: false } ) ] }
} );
await flushPromises();
expect( wrapper.find( '.mw-block-log__type-suppress' ).exists() ).toBeTruthy();
const rows = wrapper.findAll( '.cdx-table__table tbody tr' );
expect( rows ).toHaveLength( 3 );
} );
it( 'should show the active hightlighted selected row', async () => {
mockMwConfigGet( { blockTargetUser: 'ActiveBlockedUser', blockTargetExists: true, blockId: 1116 } );
const wrapper = mount( BlockLog, {
propsData: { blockLogType: 'active' },
global: { plugins: [ createTestingPinia( { stubActions: false } ) ] }
} );
await flushPromises();
expect( wrapper.find( '.mw-block-log__type-active' ).exists() ).toBeTruthy();
const rows = wrapper.findAll( 'table.cdx-table__table tbody tr' );
expect( rows ).toHaveLength( 3 );
expect( rows[ 1 ].classes() ).toContain( 'cdx-selected-block-row' );
} );
it( 'should show a table with the block-user-no-active-blocks message when given a user with no active blocks', async () => {
mockMwConfigGet( { blockTargetUser: 'NeverBlocked' } );
const wrapper = mount( BlockLog, {
propsData: { blockLogType: 'active' },
global: { plugins: [ createTestingPinia( { stubActions: false } ) ] }
} );
await flushPromises();
// Test: The table should exist
expect( wrapper.find( '.mw-block-log__type-active' ).exists() ).toBeTruthy();
const rows = wrapper.findAll( 'table.cdx-table__table tbody tr' );
// Test: The table tbody should have one row
expect( rows ).toHaveLength( 1 );
// Test: The row should contain the block-user-no-active-blocks message
expect( rows[ 0 ].text() ).toContain( 'block-user-no-active-blocks' );
} );
it( 'should show a list of block parameters', async () => {
mockMwConfigGet( { blockTargetUser: 'PartiallyBlockedUser' } );
const wrapper = mount( BlockLog, {
propsData: { blockLogType: 'active' },
global: { plugins: [ createTestingPinia( { stubActions: false } ) ] }
} );
await flushPromises();
expect( wrapper.find( '.mw-block-log__type-active' ).exists() ).toBeTruthy();
const rows = wrapper.findAll( 'table.cdx-table__table tbody tr' );
expect( rows ).toHaveLength( 1 );
expect( rows[ 0 ].find( 'ul' ).text() ).toContain( 'blocklist-editing blocklist-editing-page Foobar' );
} );
it( 'should show relative expiries where appropriate', async () => {
mockMwConfigGet( { blockTargetUser: 'BlockedALot' } );
const wrapper = mount( BlockLog, {
propsData: { blockLogType: 'recent' },
global: { plugins: [ createTestingPinia( { stubActions: false } ) ] }
} );
await flushPromises();
// First expiry (5 years)
expect( wrapper.find(
'.mw-block-log__type-recent tr:first-child .mw-block-log__parameters li:first-child'
).text() ).toStrictEqual( '5 years' );
// Second is an unblock event, so no expiry
expect(
wrapper.find( '.mw-block-log__type-recent tr:nth-child(2) .mw-block-log__parameters' ).text()
).toStrictEqual( '' );
// Third row is an indefinite block
expect( wrapper.find(
'.mw-block-log__type-recent tr:nth-child(3) .mw-block-log__parameters li:first-child'
).text() ).toStrictEqual( 'infinite' );
// Fourth is a block entered with an exact datetime, and so should not show a relative expiry.
expect( wrapper.find(
'.mw-block-log__type-recent tr:nth-child(4) .mw-block-log__parameters li:first-child'
).text() ).toStrictEqual( '2029-09-20T14:31:51.000Z' );
} );
} );

File Metadata

Mime Type
text/plain
Expires
Sat, May 16, 14:58 (23 h, 54 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
4a/ec/0fb19f7fd8c97a8a0e3f2cf90260
Default Alt Text
BlockLog.test.js (5 KB)

Event Timeline