'use strict';

const assert = require('./../../assert');
const common = require('./../../common');

let battle;

describe('Thick Fat', () => {
	afterEach(() => {
		battle.destroy();
	});

	it(`should halve damage from Fire- or Ice-type attacks`, () => {
		battle = common.createBattle([[
			{ species: 'Miltank', ability: 'thickfat', item: 'lumberry', moves: ['luckychant', 'recover'] },
		], [
			{ species: 'Wynaut', moves: ['icebeam', 'flamethrower'] },
		]]);
		const miltank = battle.p1.active[0];
		const damageRange = [16, 19];
		battle.makeChoices('move luckychant', 'move icebeam');
		assert.bounded(miltank.maxhp - miltank.hp, damageRange);
		battle.makeChoices('move recover', 'move flamethrower');
		assert.bounded(miltank.maxhp - miltank.hp, damageRange);
	});

	it(`should halve damage from Fire- or Ice-type attacks in past generations, even when holding a type-boosting item`, () => {
		battle = common.gen(3).createBattle([[
			{ species: 'Miltank', ability: 'thickfat', moves: ['recover'] },
		], [
			{ species: 'Wynaut', item: 'nevermeltice', moves: ['icebeam'] },
		]]);
		const miltank = battle.p1.active[0];
		battle.makeChoices();
		assert.bounded(miltank.maxhp - miltank.hp, [18, 22]);
	});

	it(`should be suppressed by Mold Breaker`, () => {
		battle = common.createBattle([[
			{ species: 'Miltank', ability: 'thickfat', item: 'lumberry', moves: ['luckychant', 'recover'] },
		], [
			{ species: 'Wynaut', ability: 'moldbreaker', moves: ['icebeam', 'flamethrower'] },
		]]);
		const miltank = battle.p1.active[0];
		const damageRange = [31, 37];
		battle.makeChoices('move luckychant', 'move icebeam');
		assert.bounded(miltank.maxhp - miltank.hp, damageRange);
		battle.makeChoices('move recover', 'move flamethrower');
		assert.bounded(miltank.maxhp - miltank.hp, damageRange);
	});
});
