Page MenuHomeWickedGov Phorge

IPAutoRevealOnDialog.test.js
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

IPAutoRevealOnDialog.test.js

'use strict';
// Mock ipReveal methods to check they are called properly
const mockEnableAutoReveal = jest.fn().mockResolvedValue();
jest.mock( '../../../../modules/ext.checkUser.tempAccounts/ipReveal.js', () => ( {
enableAutoReveal: mockEnableAutoReveal
} ) );
// Mock dynamic package file
jest.mock( '../../../../modules/ext.checkUser.tempAccounts/durations.json', () => ( [
{
translation: '1 hour',
seconds: 3600
},
{
translation: '1 day',
seconds: 86400
},
{
translation: '90 days',
seconds: 7776000
}
] ), { virtual: true } );
jest.mock( '../../../../modules/ext.checkUser.tempAccounts/useInstrument.js' );
const IPAutoRevealOnDialog = require( '../../../../modules/ext.checkUser.tempAccounts/components/IPAutoRevealOnDialog.vue' );
const useInstrument = require( '../../../../modules/ext.checkUser.tempAccounts/useInstrument.js' );
const { nextTick } = require( 'vue' );
const utils = require( '@vue/test-utils' );
const { CdxDialog, CdxSelect } = require( '@wikimedia/codex' );
const mockSetText = jest.fn();
const renderComponent = () => {
const props = {
toolLink: { text: mockSetText }
};
return utils.mount( IPAutoRevealOnDialog, {
props: props
} );
};
describe( 'IP auto-reveal On dialog', () => {
let logEvent;
let wrapper;
beforeEach( () => {
logEvent = jest.fn();
useInstrument.mockImplementation( () => logEvent );
wrapper = renderComponent();
} );
it( 'mounts correctly', () => {
expect( wrapper.exists() ).toEqual( true );
} );
it( 'disables the primary action button initially', () => {
expect( wrapper.findComponent( CdxDialog ).props( 'primaryAction' ).disabled ).toEqual( true );
} );
it( 'enables the primary action button when a selection is made', async () => {
await wrapper.findComponent( CdxSelect ).vm.$emit( 'update:selected', '1800' );
expect( wrapper.findComponent( CdxDialog ).props( 'primaryAction' ).disabled ).toEqual( false );
expect( logEvent ).toHaveBeenCalledTimes( 0 );
} );
it( 'calls enableAutoReveal and shows notification on submit', async () => {
await wrapper.findComponent( CdxSelect ).vm.$emit( 'update:selected', '3600' );
await wrapper.findComponent( CdxDialog ).vm.$emit( 'primary' );
await nextTick();
expect( mockEnableAutoReveal ).toHaveBeenCalledWith( '3600' );
expect( mockSetText ).toHaveBeenCalled();
expect( mw.notify ).toHaveBeenCalled();
expect( wrapper.findComponent( CdxDialog ).props( 'open' ) ).toBe( false );
expect( logEvent ).toHaveBeenCalledTimes( 1 );
expect( logEvent ).toHaveBeenCalledWith( 'session_start', { sessionLength: 3600 } );
} );
it( 'correctly handles enableAutoReveal returning an error', async () => {
mockEnableAutoReveal.mockRejectedValueOnce();
await wrapper.findComponent( CdxSelect ).vm.$emit( 'update:selected', '3600' );
await wrapper.findComponent( CdxDialog ).vm.$emit( 'primary' );
await nextTick();
expect( mockEnableAutoReveal ).toHaveBeenCalledWith( '3600' );
expect( mockSetText ).not.toHaveBeenCalled();
expect( mw.notify ).not.toHaveBeenCalled();
expect( wrapper.findComponent( CdxDialog ).props( 'open' ) ).toBe( true );
expect( logEvent ).toHaveBeenCalledTimes( 0 );
} );
} );

File Metadata

Mime Type
text/plain
Expires
Wed, Aug 19, 01:50 (2 w, 2 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
37/dd/4caecf02e2398f142ce377234d68
Default Alt Text
IPAutoRevealOnDialog.test.js (3 KB)

Event Timeline