Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .fernignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@ src/main/java/com/seam/api/resources/clientsessions/ClientSessionsClient.java
src/main/java/com/seam/api/resources/actionattempts/ActionAttemptsClient.java
src/main/java/com/seam/api/resources/accesscodes/AccessCodesClient.java
src/main/java/com/seam/api/types/ConnectedAccountsGetRequest.java

# Integration Tests
src/test/java
11 changes: 0 additions & 11 deletions src/test/java/com/seam/api/TestClient.java

This file was deleted.

25 changes: 25 additions & 0 deletions src/test/java/com/seam/api/TestUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.seam.api;

import java.io.IOException;

public final class TestUtils {

public static final String SEAM_TEST_API_KEY = "seam_apikey1_token";

private TestUtils() {}

public static Seam startFakeSeam(int port) {
try {
ProcessBuilder process = new ProcessBuilder("npx", "@seamapi/fake-seam-connect", "--seed");
process.environment().put("PORT", "8080");
process.start();
Thread.sleep(5000);
return Seam.builder()
.url("http://localhost:" + Integer.toString(port))
.apiKey(TestUtils.SEAM_TEST_API_KEY)
.build();
} catch (IOException | InterruptedException e) {
throw new RuntimeException("Failed to start fake seam", e);
}
}
}
128 changes: 128 additions & 0 deletions src/test/java/com/seam/api/accesscode/AccessCodesTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
package com.seam.api.accesscode;

import com.seam.api.Seam;
import com.seam.api.TestUtils;
import com.seam.api.resources.accesscodes.requests.AccessCodesCreateMultipleRequest;
import com.seam.api.resources.accesscodes.requests.AccessCodesCreateRequest;
import com.seam.api.resources.accesscodes.requests.AccessCodesDeleteRequest;
import com.seam.api.resources.accesscodes.requests.AccessCodesGetRequest;
import com.seam.api.resources.accesscodes.requests.AccessCodesListRequest;
import com.seam.api.resources.accesscodes.requests.AccessCodesUpdateRequest;
import com.seam.api.types.AccessCode;
import com.seam.api.types.AccessCodeStatus;
import com.seam.api.types.AccessCodeType;
import com.seam.api.types.AccessCodesUpdateRequestType;
import com.seam.api.types.ActionAttempt;
import com.seam.api.types.Device;
import java.util.List;
import java.util.stream.Collectors;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

public final class AccessCodesTest {

private static Seam seam;

@BeforeAll
public static void beforeAll() {
seam = TestUtils.startFakeSeam(8080);
}

@Test
public void test_access_codes() {
List<Device> allDevices = seam.devices().list();
Device someDevice = allDevices.get(0);

List<AccessCode> initialAccessCodes = seam.accessCodes()
.list(AccessCodesListRequest.builder()
.deviceId(someDevice.getDeviceId())
.build());

AccessCode createdAccessCode = seam.accessCodes()
.create(AccessCodesCreateRequest.builder()
.deviceId(someDevice.getDeviceId())
.name("Test code")
.code("4444")
.build());
Assertions.assertThat(createdAccessCode.getName()).hasValue("Test code");
Assertions.assertThat(createdAccessCode.getStatus()).isEqualTo(AccessCodeStatus.SETTING);

seam.accessCodes()
.create(AccessCodesCreateRequest.builder()
.deviceId(someDevice.getDeviceId())
.name("Test code 2")
.code("5555")
.build());

List<AccessCode> accessCodes = seam.accessCodes()
.list(AccessCodesListRequest.builder()
.deviceId(someDevice.getDeviceId())
.build());
Assertions.assertThat(accessCodes).hasSize(2 + initialAccessCodes.size());

accessCodes = seam.accessCodes()
.list(AccessCodesListRequest.builder()
.deviceId(someDevice.getDeviceId())
.accessCodeIds(List.of(createdAccessCode.getAccessCodeId()))
.build());
Assertions.assertThat(accessCodes).hasSizeGreaterThan(0);

AccessCode accessCode = seam.accessCodes()
.get(AccessCodesGetRequest.builder()
.accessCodeId(createdAccessCode.getAccessCodeId())
.build());
Assertions.assertThat(accessCode.getCode()).hasValue("4444");

// Fake seam does not dedupe access codes
// assertThatThrownBy(() -> {
// seam.accessCodes().create(AccessCodesCreateRequest.builder()
// .deviceId(someDevice.getDeviceId())
// .name("Duplicate Access Code")
// .code("4444")
// .build());
// }).hasCauseInstanceOf(ApiError.class);

seam.accessCodes()
.update(AccessCodesUpdateRequest.builder()
.accessCodeId(createdAccessCode.getAccessCodeId())
.name("Updated Name")
.build());
accessCode = seam.accessCodes()
.get(AccessCodesGetRequest.builder()
.accessCodeId(createdAccessCode.getAccessCodeId())
.build());
Assertions.assertThat(accessCode.getName()).hasValue("Updated Name");

seam.accessCodes()
.update(AccessCodesUpdateRequest.builder()
.accessCodeId(createdAccessCode.getAccessCodeId())
.type(AccessCodesUpdateRequestType.TIME_BOUND)
.startsAt("3001-01-01")
.endsAt("3001-01-03")
.build());
accessCode = seam.accessCodes()
.get(AccessCodesGetRequest.builder()
.accessCodeId(createdAccessCode.getAccessCodeId())
.build());
Assertions.assertThat(accessCode.getType()).isEqualTo(AccessCodeType.TIME_BOUND);

ActionAttempt deleteActionAttempt = seam.accessCodes()
.delete(AccessCodesDeleteRequest.builder()
.accessCodeId(createdAccessCode.getAccessCodeId())
.build());
Assertions.assertThat(deleteActionAttempt.getSuccess()).isNotEmpty();

accessCodes = seam.accessCodes()
.createMultiple(AccessCodesCreateMultipleRequest.builder()
.addAllDeviceIds(accessCodes.stream()
.map(AccessCode::getAccessCodeId)
.collect(Collectors.toList()))
.build());
Assertions.assertThat(accessCodes).hasSize(allDevices.size());
Assertions.assertThat(allDevices).hasSizeGreaterThan(1);
Assertions.assertThat(
accessCodes.stream().map(AccessCode::getCommonCodeKey).collect(Collectors.toSet()))
.hasSize(1);
}
}
40 changes: 40 additions & 0 deletions src/test/java/com/seam/api/actionattempt/ActionAttemptsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.seam.api.actionattempt;

import com.seam.api.Seam;
import com.seam.api.TestUtils;
import com.seam.api.resources.accesscodes.requests.AccessCodesCreateRequest;
import com.seam.api.resources.accesscodes.requests.AccessCodesDeleteRequest;
import com.seam.api.types.AccessCode;
import com.seam.api.types.ActionAttempt;
import com.seam.api.types.Device;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

public final class ActionAttemptsTest {

private static Seam seam;

@BeforeAll
public static void beforeAll() {
seam = TestUtils.startFakeSeam(8080);
}

@Test
public void test_access_attempts() {
Device someDevice = seam.devices().list().get(0);

AccessCode createdAccessCode = seam.accessCodes()
.create(AccessCodesCreateRequest.builder()
.deviceId(someDevice.getDeviceId())
.name("Test code")
.code("4444")
.build());

ActionAttempt deleteActionAttempt = seam.accessCodes()
.delete(AccessCodesDeleteRequest.builder()
.accessCodeId(createdAccessCode.getAccessCodeId())
.build());
Assertions.assertThat(deleteActionAttempt).isNotNull();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.seam.api.connectedaccounts;

import com.seam.api.Seam;
import com.seam.api.TestUtils;
import com.seam.api.types.ConnectedAccount;
import com.seam.api.types.ConnectedAccountsGetRequest;
import java.util.List;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

public final class ConnectedAccountsTest {

private static Seam seam;

@BeforeAll
public static void beforeAll() {
seam = TestUtils.startFakeSeam(8080);
}

private static final String EMAIL = "user-4@example.com";

@Test
public void test_connected_accounts() {
List<ConnectedAccount> connectedAccounts = seam.connectedAccounts().list();
Assertions.assertThat(connectedAccounts).hasSizeGreaterThan(0);

String connectedAccountId =
connectedAccounts.get(0).getConnectedAccountId().get();

ConnectedAccount connectedAccount =
seam.connectedAccounts().get(ConnectedAccountsGetRequest.id(connectedAccountId));
Assertions.assertThat(connectedAccount.getConnectedAccountId()).hasValue(connectedAccountId);

// Fake Seam does not like email creation
// ConnectedAccount emailAccount = seam.connectedAccounts().get(
// ConnectedAccountsGetRequest.email(EMAIL));
// Assertions.assertThat(emailAccount.getConnectedAccountId()).hasValue(connectedAccountId);

// Fake Seam does serve account deletion
// seam.connectedAccounts().delete(ConnectedAccountsDeleteRequest.builder()
// .connectedAccountId(connectedAccountId)
// .build());
// Assertions.assertThat(seam.connectedAccounts().list()).hasSize(0);
}
}
52 changes: 52 additions & 0 deletions src/test/java/com/seam/api/connectwebview/ConnectWebviewsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.seam.api.connectwebview;

import com.seam.api.Seam;
import com.seam.api.TestUtils;
import com.seam.api.resources.connectwebviews.requests.ConnectWebviewsCreateRequest;
import com.seam.api.resources.connectwebviews.requests.ConnectWebviewsGetRequest;
import com.seam.api.types.ConnectWebview;
import com.seam.api.types.ConnectWebviewsCreateRequestAcceptedProvidersItem;
import com.seam.api.types.ConnectWebviewsCreateRequestProviderCategory;
import java.util.List;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

public final class ConnectWebviewsTest {

private static Seam seam;

@BeforeAll
public static void beforeAll() {
seam = TestUtils.startFakeSeam(8080);
}

@Test
public void test_connect_webviews() throws InterruptedException {
ConnectWebview createdWebView = seam.connectWebviews()
.create(ConnectWebviewsCreateRequest.builder()
.acceptedProviders(List.of(ConnectWebviewsCreateRequestAcceptedProvidersItem.SCHLAGE))
.build());
Assertions.assertThat(createdWebView.getConnectWebviewId()).isNotNull();

ConnectWebview webview = seam.connectWebviews().getById(createdWebView.getConnectWebviewId());
Assertions.assertThat(webview.getConnectWebviewId()).isEqualTo(createdWebView.getConnectWebviewId());

// Fake Seam does not serve list webviews
// List<ConnectWebview> webviews = seam.connectWebviews().list();
// Assertions.assertThat(webviews).hasSizeGreaterThan(0);

// Test with provider category
ConnectWebview newWebview = seam.connectWebviews()
.create(ConnectWebviewsCreateRequest.builder()
.providerCategory(ConnectWebviewsCreateRequestProviderCategory.STABLE)
.build());
Assertions.assertThat(newWebview.getConnectWebviewId()).isNotNull();

webview = seam.connectWebviews()
.get(ConnectWebviewsGetRequest.builder()
.connectWebviewId(newWebview.getConnectWebviewId())
.build());
Assertions.assertThat(webview.getAcceptedProviders()).hasSizeGreaterThan(0);
}
}
Loading