Fix TradersInfo nextResupply if it is null in profile data (!305)

Add test covering fixNullTraderNextResupply

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/305
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
This commit is contained in:
DrakiaXYZ 2024-04-24 07:13:31 +00:00 committed by chomp
parent 6e262a228f
commit 316234e9ae
2 changed files with 56 additions and 0 deletions

View File

@ -157,6 +157,7 @@ export class ProfileFixerService
}
this.fixNullTraderSalesSums(pmcProfile);
this.fixNullTraderNextResupply(pmcProfile);
this.updateProfileQuestDataValues(pmcProfile);
}
@ -1430,4 +1431,20 @@ export class ProfileFixerService
}
}
}
/**
* If someone has run a mod from pre-3.8.0, it results in an invalid `nextResupply` value
* Resolve this by setting the nextResupply to 0 if it's null
*/
protected fixNullTraderNextResupply(pmcProfile: IPmcData): void
{
for (const [traderId, trader] of Object.entries(pmcProfile.TradersInfo))
{
if (trader && trader.nextResupply === null)
{
this.logger.warning(`trader ${traderId} has a null nextResupply value, resetting to 0`);
trader.nextResupply = 0;
}
}
}
}

View File

@ -0,0 +1,39 @@
import { ProfileFixerService } from "@spt-aki/services/ProfileFixerService";
import { container } from "tsyringe";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
describe("ProfileFixerService", () =>
{
let profileFixerService: any; // Using "any" to access private/protected methods without type errors.
beforeEach(() =>
{
profileFixerService = container.resolve<ProfileFixerService>("ProfileFixerService");
});
afterEach(() =>
{
vi.restoreAllMocks();
});
describe("FixPmcProfileIssues", () =>
{
it("should reset nextResupply to 0 when it is null", () =>
{
const pmcProfile = { TradersInfo: { traderId: { nextResupply: null } } };
profileFixerService.fixNullTraderNextResupply(pmcProfile);
expect(pmcProfile.TradersInfo.traderId.nextResupply).toBe(0);
});
it("should not reset nextResupply to 0 when it is not null", () =>
{
const pmcProfile = { TradersInfo: { traderId: { nextResupply: 1234 } } };
profileFixerService.fixNullTraderNextResupply(pmcProfile);
expect(pmcProfile.TradersInfo.traderId.nextResupply).toBe(1234);
});
});
});