fix: split multi-type golem core upkeep across all mana types (issue #315)
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m20s
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m20s
This commit is contained in:
@@ -186,11 +186,49 @@ describe('Computed stats', () => {
|
||||
const design = makeDesign('basic', 'earth', 'simple');
|
||||
const stats = computeGolemStats(design);
|
||||
|
||||
// Basic core has 1 mana type (earth), so all upkeep goes to earth
|
||||
expect(stats.upkeepCostPerHour.length).toBe(1);
|
||||
expect(stats.upkeepCostPerHour[0].amount).toBe(1.0);
|
||||
expect(stats.upkeepCostPerHour[0].element).toBe('earth');
|
||||
});
|
||||
|
||||
it('multi-type core splits upkeep evenly across selected mana types', () => {
|
||||
const design = makeDesign('intermediate', 'earth', 'simple');
|
||||
design.selectedManaTypes = ['fire', 'water'];
|
||||
const stats = computeGolemStats(design);
|
||||
|
||||
// Intermediate core: manaRegen=1.5, upkeep=3.0/hr split across 2 types = 1.5 each
|
||||
expect(stats.upkeepCostPerHour.length).toBe(2);
|
||||
expect(stats.upkeepCostPerHour[0].element).toBe('fire');
|
||||
expect(stats.upkeepCostPerHour[0].amount).toBe(1.5);
|
||||
expect(stats.upkeepCostPerHour[1].element).toBe('water');
|
||||
expect(stats.upkeepCostPerHour[1].amount).toBe(1.5);
|
||||
});
|
||||
|
||||
it('advanced core (3 types) splits upkeep three ways', () => {
|
||||
const design = makeDesign('advanced', 'steel', 'simple');
|
||||
design.selectedManaTypes = ['fire', 'water', 'earth'];
|
||||
const stats = computeGolemStats(design);
|
||||
|
||||
// Advanced core: manaRegen=3.0, upkeep=6.0/hr split across 3 types = 2.0 each
|
||||
expect(stats.upkeepCostPerHour.length).toBe(3);
|
||||
const totalUpkeep = stats.upkeepCostPerHour.reduce((sum, c) => sum + c.amount, 0);
|
||||
expect(totalUpkeep).toBe(6.0);
|
||||
for (const cost of stats.upkeepCostPerHour) {
|
||||
expect(cost.amount).toBe(2.0);
|
||||
}
|
||||
});
|
||||
|
||||
it('single-type core does not split upkeep', () => {
|
||||
const design = makeDesign('basic', 'earth', 'simple');
|
||||
// Basic core has manaTypes=['earth'], selectedManaTypes=[] => uses core.manaTypes
|
||||
const stats = computeGolemStats(design);
|
||||
|
||||
expect(stats.upkeepCostPerHour.length).toBe(1);
|
||||
expect(stats.upkeepCostPerHour[0].amount).toBe(1.0); // 0.5 * 2 = 1.0
|
||||
expect(stats.upkeepCostPerHour[0].element).toBe('earth');
|
||||
});
|
||||
|
||||
it('selected mana types override core defaults', () => {
|
||||
const design = makeDesign('intermediate', 'earth', 'simple');
|
||||
design.selectedManaTypes = ['fire', 'water'];
|
||||
|
||||
Reference in New Issue
Block a user