Skip to content

Commit

Permalink
Proof of concept: Add annotation to InstanceMethods#getInstance
Browse files Browse the repository at this point in the history
  • Loading branch information
PattaFeuFeu committed Nov 5, 2023
1 parent 2a4dcca commit 29e379b
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package social.bigbone.api.method

import social.bigbone.MastodonClient
import social.bigbone.MastodonMinServerVersion
import social.bigbone.MastodonRequest
import social.bigbone.api.entity.DomainBlock
import social.bigbone.api.entity.ExtendedDescription
import social.bigbone.api.entity.Instance
import social.bigbone.api.entity.InstanceActivity
import social.bigbone.api.entity.InstanceV1
import social.bigbone.api.entity.Rule
import social.bigbone.api.exception.BigBoneVersionException
import social.bigbone.requireMinVersion

/**
* Allows access to API methods with endpoints having an "api/vX/instance" prefix.
Expand All @@ -21,9 +24,14 @@ class InstanceMethods(private val client: MastodonClient) {

/**
* Obtain general information about the server.
* @throws BigBoneVersionException if the Mastodon server version doesn't match the [MastodonMinServerVersion] for this method
* @see <a href="https://docs.joinmastodon.org/methods/instance/#v2">Mastodon API documentation: methods/instance/#v2</a>
*/
@MastodonMinServerVersion("4.0.0")
@Throws(BigBoneVersionException::class)
fun getInstance(): MastodonRequest<Instance> {
InstanceMethods::getInstance.requireMinVersion(client)

return client.getMastodonRequest(
endpoint = instanceEndpointV2,
method = MastodonClient.Method.GET
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package social.bigbone.api.method

import io.mockk.Called
import io.mockk.verify
import org.amshove.kluent.invoking
import org.amshove.kluent.shouldBeEqualTo
Expand All @@ -16,14 +17,15 @@ import social.bigbone.api.entity.ExtendedDescription
import social.bigbone.api.entity.InstanceActivity
import social.bigbone.api.entity.Rule
import social.bigbone.api.exception.BigBoneRequestException
import social.bigbone.api.exception.BigBoneVersionException
import social.bigbone.testtool.MockClient
import social.bigbone.testtool.TestUtil
import java.time.Instant

class InstanceMethodsTest {
@Test
fun getInstance() {
val client = MockClient.mock("instance.json")
val client = MockClient.mock(jsonName = "instance.json")
val instanceMethods = InstanceMethods(client)

val instance = instanceMethods.getInstance().execute()
Expand All @@ -41,6 +43,18 @@ class InstanceMethodsTest {
}
}

@Test
fun `Given an instance with Mastodon 3-4-0, when calling getInstance, then fail with BigBoneVersionException`() {
val client = MockClient.mock(jsonName = "instance.json", instanceVersion = "3.4.0")
val instanceMethods = InstanceMethods(client)

invoking { instanceMethods.getInstance().execute() }
.shouldThrow(BigBoneVersionException::class)
.withMessage("getInstance requires the server to run at least Mastodon 4.0.0 but it runs 3.4.0")

verify { client.get(path = "/api/v2/instance", query = null) wasNot Called }
}

@Test
fun getInstanceExtended() {
val client = MockClient.mock("instance_extended.json")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
import social.bigbone.MastodonClient;
import social.bigbone.api.entity.Instance;
import social.bigbone.api.exception.BigBoneRequestException;
import social.bigbone.api.exception.BigBoneVersionException;

@SuppressWarnings("PMD.SystemPrintln")
public class GetInstanceInfo {

public static void main(final String[] args) throws BigBoneRequestException {
public static void main(final String[] args) throws BigBoneRequestException, BigBoneVersionException {
final String instance = args[0];

// Instantiate client
Expand Down

0 comments on commit 29e379b

Please sign in to comment.