diff --git a/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/ReputationController.java b/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/ReputationController.java index 4342a99aa5..862ab59280 100644 --- a/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/ReputationController.java +++ b/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/ReputationController.java @@ -139,7 +139,6 @@ public void initializeReputation(Campaign campaign) { transportationValues = rawTransportationData.get(2); transportationRating = transportationCapacities.get("total"); - transportationCapacities.remove("total"); // step five: support rating Map> rawSupportData = calculateSupportRating(campaign, transportationRequirements); diff --git a/MekHQ/unittests/mekhq/campaign/rating/CamOpsReputation/ReputationControllerTest.java b/MekHQ/unittests/mekhq/campaign/rating/CamOpsReputation/ReputationControllerTest.java new file mode 100644 index 0000000000..8f78dfa4d6 --- /dev/null +++ b/MekHQ/unittests/mekhq/campaign/rating/CamOpsReputation/ReputationControllerTest.java @@ -0,0 +1,155 @@ +package mekhq.campaign.rating.CamOpsReputation; + +import megamek.common.enums.SkillLevel; +import mekhq.campaign.Campaign; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.when; + +class ReputationControllerTest { + private ReputationController reputation; + private Campaign campaign; + private MockedStatic averageExperienceRating; + private MockedStatic commandRating; + private MockedStatic combatRecordRating; + private MockedStatic transportationRating; + private MockedStatic supportRating; + private MockedStatic financialRating; + private MockedStatic crimeRating; + private MockedStatic otherModifiersRating; + + @BeforeEach + void setUp() { + reputation = new ReputationController(); + campaign = mock(Campaign.class); + when(campaign.getFlaggedCommander()).thenReturn(null); + when(campaign.getFinances()).thenReturn(null); + when(campaign.getDateOfLastCrime()).thenReturn(null); + averageExperienceRating = mockStatic(AverageExperienceRating.class); + commandRating = mockStatic(CommandRating.class); + combatRecordRating = mockStatic(CombatRecordRating.class); + transportationRating = mockStatic(TransportationRating.class); + supportRating = mockStatic(SupportRating.class); + financialRating = mockStatic(FinancialRating.class); + crimeRating = mockStatic(CrimeRating.class); + otherModifiersRating = mockStatic(OtherModifiers.class); + } + + @AfterEach + void tearDown() { + averageExperienceRating.close(); + commandRating.close(); + combatRecordRating.close(); + transportationRating.close(); + supportRating.close(); + financialRating.close(); + crimeRating.close(); + otherModifiersRating.close(); + } + + @Test + void testGetReputationModifierShouldBeFour() { + averageExperienceRating.when(() -> + AverageExperienceRating.getSkillLevel(campaign, true)) + .thenReturn(SkillLevel.VETERAN); + averageExperienceRating.when(() -> + AverageExperienceRating.getAverageExperienceModifier(SkillLevel.VETERAN)) + .thenReturn(20); + averageExperienceRating.when(() -> + AverageExperienceRating.getAtBModifier(campaign)) + .thenReturn(3); + commandRating.when(() -> + CommandRating.calculateCommanderRating(campaign, null)) + .thenReturn(Collections.singletonMap("total", 3)); + combatRecordRating.when(() -> + CombatRecordRating.calculateCombatRecordRating(campaign)) + .thenReturn(Collections.singletonMap("total", 3)); + + List> transportationData = new ArrayList<>(); + transportationData.add(Collections.singletonMap("total", 3)); + transportationData.add(Collections.singletonMap("total", 3)); + transportationData.add(Collections.singletonMap("total", 3)); + transportationRating.when(() -> + TransportationRating.calculateTransportationRating(campaign)) + .thenReturn(transportationData); + + Map> supportData = new HashMap<>(); + supportData.put("total", Collections.singletonMap("total", 3)); + supportRating.when(() -> + SupportRating.calculateSupportRating(campaign, transportationData.get(1))) + .thenReturn(supportData); + + financialRating.when(() -> + FinancialRating.calculateFinancialRating(campaign.getFinances())) + .thenReturn(Collections.singletonMap("total", 3)); + + crimeRating.when(() -> + CrimeRating.calculateCrimeRating(campaign)) + .thenReturn(Collections.singletonMap("total", 3)); + + otherModifiersRating.when(() -> + OtherModifiers.calculateOtherModifiers(campaign)) + .thenReturn(Collections.singletonMap("total", 3)); + + reputation.initializeReputation(campaign); + assertEquals(41, reputation.getReputationRating()); + assertEquals(4, reputation.getReputationModifier()); + } + + @Test + void testGetReputationModifierShouldBeZero() { + averageExperienceRating.when(() -> + AverageExperienceRating.getSkillLevel(campaign, true)) + .thenReturn(SkillLevel.ULTRA_GREEN); + averageExperienceRating.when(() -> + AverageExperienceRating.getAverageExperienceModifier(SkillLevel.ULTRA_GREEN)) + .thenReturn(5); + averageExperienceRating.when(() -> + AverageExperienceRating.getAtBModifier(campaign)) + .thenReturn(0); + commandRating.when(() -> + CommandRating.calculateCommanderRating(campaign, null)) + .thenReturn(Collections.singletonMap("total", 0)); + combatRecordRating.when(() -> + CombatRecordRating.calculateCombatRecordRating(campaign)) + .thenReturn(Collections.singletonMap("total", 0)); + + List> transportationData = new ArrayList<>(); + transportationData.add(Collections.singletonMap("total", 0)); + transportationData.add(Collections.singletonMap("total", 0)); + transportationData.add(Collections.singletonMap("total", 0)); + transportationRating.when(() -> + TransportationRating.calculateTransportationRating(campaign)) + .thenReturn(transportationData); + + Map> supportData = new HashMap<>(); + supportData.put("total", Collections.singletonMap("total", 0)); + supportRating.when(() -> + SupportRating.calculateSupportRating(campaign, transportationData.get(1))) + .thenReturn(supportData); + + financialRating.when(() -> + FinancialRating.calculateFinancialRating(campaign.getFinances())) + .thenReturn(Collections.singletonMap("total", 0)); + + crimeRating.when(() -> + CrimeRating.calculateCrimeRating(campaign)) + .thenReturn(Collections.singletonMap("total", 0)); + + otherModifiersRating.when(() -> + OtherModifiers.calculateOtherModifiers(campaign)) + .thenReturn(Collections.singletonMap("total", 0)); + + reputation.initializeReputation(campaign); + assertEquals(5, reputation.getReputationRating()); + assertEquals(0, reputation.getReputationModifier()); + } +} \ No newline at end of file