Skip to content

Commit f208565

Browse files
committed
Cover recursive tariff ledger payments
1 parent cefb748 commit f208565

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

‎src/main/java/net/tfminecraft/simplefactions/guild/income/Ledger.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,10 @@ public double getWarReparationsReceived() {
784784
if (payerGuild == null) {
785785
continue;
786786
}
787+
Ledger payerLedger = payerGuild.getLedger();
788+
if (payerLedger == null || payerLedger.skipsMoneyMovement()) {
789+
continue;
790+
}
787791
TradeBreakdown trade = payerGuild.getTradeBreakdown();
788792
double grossTradeIncome = trade == null ? 0.0 : trade.getIncome();
789793
total += grossTradeIncome * (obligation.getIncomePercent() / 100.0);

‎src/test/java/net/tfminecraft/simplefactions/war/resolution/WarReparationsServiceTest.java‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212

1313
import org.junit.jupiter.api.BeforeEach;
1414
import org.junit.jupiter.api.Test;
15+
import org.mockito.MockedStatic;
1516

1617
import net.tfminecraft.simplefactions.Cache;
1718
import net.tfminecraft.simplefactions.objects.Faction;
19+
import net.tfminecraft.simplefactions.managers.RelationManager;
1820
import net.tfminecraft.simplefactions.war.core.War;
1921
import net.tfminecraft.simplefactions.war.enums.WarGoalType;
2022
import net.tfminecraft.simplefactions.war.enums.WarType;
@@ -78,6 +80,36 @@ void applyFromWar_attackerPaysDefenderWithCacheValues() {
7880
assertEquals(10, obligations.get(0).getDaysRemaining());
7981
}
8082

83+
@Test
84+
void apply_recursivelyAddsObligationToEveryVassalOnce() {
85+
Faction child = mockFaction("child");
86+
Faction grandchild = mockFaction("grandchild");
87+
List<WarReparationsObligation> childObligations = new ArrayList<>();
88+
List<WarReparationsObligation> grandchildObligations = new ArrayList<>();
89+
when(child.getWarReparationsObligations()).thenReturn(childObligations);
90+
when(grandchild.getWarReparationsObligations()).thenReturn(grandchildObligations);
91+
doAnswer(invocation -> {
92+
childObligations.add(invocation.getArgument(0));
93+
return null;
94+
}).when(child).addWarReparationsObligation(org.mockito.ArgumentMatchers.any());
95+
doAnswer(invocation -> {
96+
grandchildObligations.add(invocation.getArgument(0));
97+
return null;
98+
}).when(grandchild).addWarReparationsObligation(org.mockito.ArgumentMatchers.any());
99+
100+
try (MockedStatic<RelationManager> relations = org.mockito.Mockito.mockStatic(RelationManager.class)) {
101+
relations.when(() -> RelationManager.getSubjects(payer)).thenReturn(List.of(child));
102+
relations.when(() -> RelationManager.getSubjects(child)).thenReturn(List.of(grandchild));
103+
relations.when(() -> RelationManager.getSubjects(grandchild)).thenReturn(List.of(payer));
104+
assertTrue(WarReparationsService.apply(payer, payee));
105+
}
106+
107+
assertEquals(1, obligations.size());
108+
assertEquals(1, childObligations.size());
109+
assertEquals(1, grandchildObligations.size());
110+
assertEquals("def", grandchildObligations.get(0).getPayeeFactionId());
111+
}
112+
81113
private static Faction mockFaction(String id) {
82114
Faction faction = mock(Faction.class);
83115
when(faction.getId()).thenReturn(id);

0 commit comments

Comments
 (0)