Skip to content

Commit 5e0b9a1

Browse files
committed
Properly handle notifications from the database about a Reference's backing PersistentValue
1 parent d15c96d commit 5e0b9a1

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

src/main/java/net/staticstudios/data/DataManager.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.zaxxer.hikari.pool.HikariPool;
1010
import net.staticstudios.data.data.Data;
1111
import net.staticstudios.data.data.InitialValue;
12+
import net.staticstudios.data.data.Reference;
1213
import net.staticstudios.data.data.UniqueData;
1314
import net.staticstudios.data.data.collection.PersistentManyToManyCollection;
1415
import net.staticstudios.data.data.collection.PersistentUniqueDataCollection;
@@ -202,6 +203,11 @@ public <T extends UniqueData> List<T> loadAll(Class<T> clazz) {
202203
dummyValueMap.put(value.getSchema() + "." + value.getTable(), value);
203204
}
204205

206+
if (data instanceof Reference<?> reference) {
207+
PersistentValue<?> value = reference.getBackingValue();
208+
dummyValueMap.put(value.getSchema() + "." + value.getTable(), value);
209+
}
210+
205211
if (data instanceof SimplePersistentCollection<?> collection) {
206212
dummySimplePersistentCollectionMap.put(collection.getSchema() + "." + collection.getTable(), collection);
207213
dummySimplePersistentCollections.put(data.getHolder().getRootHolder(), collection);

src/main/java/net/staticstudios/data/data/Reference.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,8 @@ public DataHolder getHolder() {
8989
public UniqueData getRootHolder() {
9090
return holder.getRootHolder();
9191
}
92+
93+
public PersistentValue<UUID> getBackingValue() {
94+
return id;
95+
}
9296
}

src/test/java/net/staticstudios/data/ReferenceTest.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.staticstudios.data.mock.reference.SnapchatUser;
66
import net.staticstudios.data.mock.reference.SnapchatUserSettings;
77
import org.junit.jupiter.api.BeforeEach;
8+
import org.junit.jupiter.api.Test;
89
import org.junitpioneer.jupiter.RetryingTest;
910

1011
import java.sql.SQLException;
@@ -74,7 +75,7 @@ public void testLoadingReference() {
7475
assertFalse(user.getSettings().getEnableFriendRequests());
7576
}
7677

77-
@RetryingTest(5)
78+
@Test
7879
public void testSetReference() {
7980
MockEnvironment environment = getMockEnvironments().getFirst();
8081
DataManager dataManager = environment.dataManager();
@@ -88,5 +89,17 @@ public void testSetReference() {
8889

8990
user.setFavoriteUser(null);
9091
assertNull(user.getFavoriteUser());
92+
93+
waitForDataPropagation();
94+
95+
try (Statement statement = getConnection().createStatement()) {
96+
statement.executeUpdate("update snapchat.users set favorite_user_id = '" + favoriteUser.getId() + "' where id = '" + user.getId() + "'");
97+
} catch (SQLException e) {
98+
throw new RuntimeException(e);
99+
}
100+
101+
waitForDataPropagation();
102+
103+
assertEquals(favoriteUser, user.getFavoriteUser());
91104
}
92105
}

0 commit comments

Comments
 (0)