diff --git a/Emulator/src/main/java/com/eu/habbo/messages/rcon/GiveCredits.java b/Emulator/src/main/java/com/eu/habbo/messages/rcon/GiveCredits.java index a5b8fb07..d5f906ed 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/rcon/GiveCredits.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/rcon/GiveCredits.java @@ -29,10 +29,14 @@ public class GiveCredits extends RCONMessage { try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE users SET credits = credits + ? WHERE id = ? LIMIT 1")) { statement.setInt(1, object.credits); statement.setInt(2, object.user_id); - statement.execute(); + if (statement.executeUpdate() == 0) { + this.status = RCONMessage.HABBO_NOT_FOUND; + return; + } } catch (SQLException e) { this.status = RCONMessage.SYSTEM_ERROR; LOGGER.error("Caught SQL exception", e); + return; } this.message = "offline"; diff --git a/Emulator/src/test/java/com/eu/habbo/messages/rcon/GiveCreditsContractTest.java b/Emulator/src/test/java/com/eu/habbo/messages/rcon/GiveCreditsContractTest.java new file mode 100644 index 00000000..dda7da84 --- /dev/null +++ b/Emulator/src/test/java/com/eu/habbo/messages/rcon/GiveCreditsContractTest.java @@ -0,0 +1,24 @@ +package com.eu.habbo.messages.rcon; + +import org.junit.jupiter.api.Test; + +import java.nio.file.Files; +import java.nio.file.Path; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class GiveCreditsContractTest { + private static String giveCreditsSource() throws Exception { + return Files.readString(Path.of("src/main/java/com/eu/habbo/messages/rcon/GiveCredits.java")); + } + + @Test + void offlineCreditGrantReportsMissingUsersWhenNoRowsChange() throws Exception { + String source = giveCreditsSource(); + + assertTrue(source.contains("executeUpdate()"), + "Offline RCON credit grants must inspect the affected row count"); + assertTrue(source.contains("HABBO_NOT_FOUND"), + "Offline RCON credit grants must report missing users when the UPDATE changes no rows"); + } +}