Skip to content

Commit 3d9fafd

Browse files
committed
Fix initializing credit pools and servers returned by bulk endpoints
1 parent 9f95639 commit 3d9fafd

File tree

6 files changed

+55
-13
lines changed

6 files changed

+55
-13
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# 2.2.1
2+
## Added
3+
- `CreditPool#getClient()`
4+
5+
## Fixed
6+
- Objects returned by `ExarotonClient#getServers` and `ExarotonClient#getCreditPools` are now correctly initialized
7+
18
# 2.2.0
29

310
## Added

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ If you're creating a plugin/mod that runs on an exaroton server, you can get the
1313
Gradle:
1414
```gradle
1515
dependencies {
16-
implementation 'com.exaroton:api:2.2.0'
16+
implementation 'com.exaroton:api:2.2.1'
1717
}
1818
```
1919

@@ -22,7 +22,7 @@ Maven:
2222
<dependency>
2323
<groupId>com.exaroton</groupId>
2424
<artifactId>api</artifactId>
25-
<version>2.2.0</version>
25+
<version>2.2.1</version>
2626
</dependency>
2727
```
2828

src/main/java/com/exaroton/api/APIResponse.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,14 +111,33 @@ public CompletionStage<APIResponse<T>> getBody() {
111111
return CompletableFuture.failedFuture(new APIException(response.getError()));
112112
}
113113

114-
if (response.getData() instanceof Initializable) {
115-
((Initializable) response.getData()).initialize(client, gson);
116-
}
114+
initialize(response.getData());
117115

118116
return CompletableFuture.completedFuture(response);
119117
});
120118
}
121119

120+
/**
121+
* Initialize an object with the API client and gson instance. This will call initialize on object that
122+
* implements Initializable or initialize all objects in an Iterable.
123+
* @param object object to initialize
124+
*/
125+
private void initialize(Object object) {
126+
if (object == null) {
127+
return;
128+
}
129+
130+
if (object instanceof Iterable<?>) {
131+
for (Object item : (Iterable<?>) object) {
132+
initialize(item);
133+
}
134+
}
135+
136+
if (object instanceof Initializable) {
137+
((Initializable) object).initialize(client, gson);
138+
}
139+
}
140+
122141
@Override
123142
public void onSubscribe(Flow.Subscription subscription) {
124143
parent.onSubscribe(subscription);

src/main/java/com/exaroton/api/billing/pools/CreditPool.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ public final class CreditPool implements Initializable {
6969
/**
7070
* The client used to create this pool
7171
*/
72-
@NotNull
7372
private transient ExarotonClient client;
7473

7574
/**
@@ -173,6 +172,15 @@ public double getOwnCredits() {
173172
return ownCredits;
174173
}
175174

175+
/**
176+
* get the exaroton client used to create this server
177+
*
178+
* @return exaroton client used to create this server
179+
*/
180+
public ExarotonClient getClient() {
181+
return client;
182+
}
183+
176184
/**
177185
* Set the exaroton client used for further requests
178186
*

src/test/java/CreditPoolsTest.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,26 @@
99
import java.util.List;
1010
import java.util.Optional;
1111

12+
import static org.junit.jupiter.api.Assertions.assertNotNull;
13+
1214
public class CreditPoolsTest extends APIClientTest {
1315
private static final @NotNull String TEST_POOL_ID = System.getenv("EXAROTON_TEST_POOL");
1416

1517
@Test
1618
public void testGetCreditPools() throws IOException {
1719
List<CreditPool> pools = client.getCreditPools().join();
18-
Assertions.assertNotNull(pools);
20+
assertNotNull(pools);
1921
Assertions.assertFalse(pools.isEmpty(), "Expected at least one pool, got none");
2022
checkTestPool(pools.stream().filter(pool -> pool.getId().equals(TEST_POOL_ID)).findFirst().orElse(null));
23+
24+
for (var pool : pools) {
25+
assertNotNull(pool.getId());
26+
assertNotNull(pool.getClient());
27+
}
2128
}
2229

2330
private void checkTestPool(CreditPool pool) {
24-
Assertions.assertNotNull(pool);
31+
assertNotNull(pool);
2532
Assertions.assertEquals(TEST_POOL_ID, pool.getId());
2633
Assertions.assertEquals("eAPI tests", pool.getName());
2734
double poolCredits = pool.getCredits();
@@ -58,20 +65,20 @@ public void testGetPoolCache() throws IOException {
5865
public void testGetPoolMembers() throws IOException {
5966
CreditPool pool = client.getCreditPool(TEST_POOL_ID);
6067
List<CreditPoolMember> members = pool.getMemberList().join();
61-
Assertions.assertNotNull(members);
68+
assertNotNull(members);
6269
Assertions.assertEquals(2, members.size());
6370

6471
Optional<CreditPoolMember> owner = members.stream().filter(CreditPoolMember::isOwner).findFirst();
6572
Assertions.assertTrue(owner.isPresent());
66-
Assertions.assertNotNull(owner.get().getAccount());
67-
Assertions.assertNotNull(owner.get().getName());
73+
assertNotNull(owner.get().getAccount());
74+
assertNotNull(owner.get().getName());
6875
Assertions.assertTrue(owner.get().isOwner());
6976
Assertions.assertTrue(owner.get().getCredits() > 100, "Expected owner to have more than 100 credits, got " + owner.get().getCredits());
7077
Assertions.assertEquals(1, owner.get().getShare());
7178

7279
Optional<CreditPoolMember> other = members.stream().filter(member -> !member.isOwner()).findFirst();
7380
Assertions.assertTrue(other.isPresent());
74-
Assertions.assertNotNull(other.get().getAccount());
81+
assertNotNull(other.get().getAccount());
7582
Assertions.assertFalse(other.get().isOwner());
7683
Assertions.assertEquals(0, other.get().getCredits());
7784
Assertions.assertEquals(0, other.get().getShare());
@@ -81,7 +88,7 @@ public void testGetPoolMembers() throws IOException {
8188
public void testGetPoolServers() throws IOException {
8289
CreditPool pool = client.getCreditPool(TEST_POOL_ID);
8390
List<Server> servers = pool.getServerList().join();
84-
Assertions.assertNotNull(servers);
91+
assertNotNull(servers);
8592
Assertions.assertEquals(1, servers.size());
8693
Assertions.assertEquals(TEST_SERVER_ID, servers.get(0).getId());
8794
}

src/test/java/ServerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ void testGetServers() throws IOException {
1313
List<Server> servers = client.getServers().join();
1414
assertNotNull(servers);
1515
for (Server server : servers) {
16+
assertNotNull(server.getClient());
1617
assertNotNull(server.getAddress());
1718
assertNotNull(server.getName());
1819
assertNotNull(server.getId());

0 commit comments

Comments
 (0)