'use strict';

const { mount } = require( 'vue-test-utils' );
const UserInfoCardError = require( 'ext.checkUser.userInfoCard/components/UserInfoCardError.vue' );

QUnit.module( 'ext.checkUser.userInfoCard.UserInfoCardError', QUnit.newMwEnvironment( {
	beforeEach: function () {
		this.sandbox.stub( mw, 'msg' ).callsFake( ( key ) => key );
	}
} ) );

// Reusable mount helper
function mountComponent( props = {} ) {
	return mount( UserInfoCardError, {
		propsData: {
			message: 'Test error message',
			...props
		}
	} );
}

QUnit.test( 'renders correctly with required props', ( assert ) => {
	const wrapper = mountComponent();

	assert.true( wrapper.exists(), 'Component renders' );
	assert.true(
		wrapper.classes().includes( 'ext-checkuser-userinfocard-error' ),
		'Error component has correct class'
	);
} );

QUnit.test( 'uses CdxMessage component with correct type', ( assert ) => {
	const wrapper = mountComponent();

	const cdxMessage = wrapper.findComponent( { name: 'CdxMessage' } );
	assert.true( cdxMessage.exists(), 'CdxMessage component exists' );
	assert.strictEqual(
		cdxMessage.props( 'type' ),
		'error',
		'CdxMessage has error type'
	);
} );

QUnit.test( 'displays the correct error message', ( assert ) => {
	const customMessage = 'Custom error message';
	const wrapper = mountComponent( { message: customMessage } );

	const paragraphs = wrapper.findAll( 'p' );
	assert.strictEqual( paragraphs.length, 2, 'Component has two paragraphs' );
	assert.strictEqual(
		paragraphs[ 1 ].text(),
		customMessage,
		'Second paragraph displays the provided error message'
	);
} );

QUnit.test( 'displays the correct strong message from mw.msg', ( assert ) => {
	const wrapper = mountComponent();

	const paragraphs = wrapper.findAll( 'p' );
	const strongElement = paragraphs[ 0 ].find( 'strong' );
	assert.true( strongElement.exists(), 'Strong element exists in first paragraph' );
	assert.strictEqual(
		strongElement.text(),
		'checkuser-userinfocard-error-title',
		'Strong element displays the correct message key'
	);
} );

QUnit.test( 'setup function returns the correct strongMessage', ( assert ) => {
	const wrapper = mountComponent();

	assert.strictEqual(
		wrapper.vm.strongMessage,
		'checkuser-userinfocard-error-title',
		'strongMessage is set correctly from mw.msg'
	);
} );
