233 lines
5.9 KiB
Go
233 lines
5.9 KiB
Go
//go:build integration
|
|||
|
|
|
||
|
|
package onspring_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"net/http"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/StevanFreeborn/onspring-api-sdk-go"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestFieldsIntegration(t *testing.T) {
|
||
|
|
loadEnvFile(t)
|
||
|
|
client := createClient(t)
|
||
|
|
ctx := context.Background()
|
||
|
|
|
||
|
|
t.Run("Get", func(t *testing.T) {
|
||
|
|
t.Run("should return a field", func(t *testing.T) {
|
||
|
|
fieldId := requireEnvInt(t, "TEST_FIELD_ID")
|
||
|
|
|
||
|
|
field, err := client.Fields.Get(ctx, fieldId)
|
||
|
|
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Expected no error, got %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if field.Id != fieldId {
|
||
|
|
t.Errorf("Expected field id %d, got %d", fieldId, field.Id)
|
||
|
|
}
|
||
|
|
|
||
|
|
if field.Name == "" {
|
||
|
|
t.Error("Expected field name to not be empty")
|
||
|
|
}
|
||
|
|
|
||
|
|
if field.AppId == 0 {
|
||
|
|
t.Error("Expected field appId to not be zero")
|
||
|
|
}
|
||
|
|
|
||
|
|
if field.Type == "" {
|
||
|
|
t.Error("Expected field type to not be empty")
|
||
|
|
}
|
||
|
|
|
||
|
|
if field.Status == "" {
|
||
|
|
t.Error("Expected field status to not be empty")
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("should return a 401 error when an invalid api key is used", func(t *testing.T) {
|
||
|
|
invalidClient := createInvalidClient(t)
|
||
|
|
fieldId := requireEnvInt(t, "TEST_FIELD_ID")
|
||
|
|
|
||
|
|
_, err := invalidClient.Fields.Get(ctx, fieldId)
|
||
|
|
|
||
|
|
assertAPIError(t, err, http.StatusUnauthorized)
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("should return a 403 error when api key does not have access to the field", func(t *testing.T) {
|
||
|
|
fieldIdNoAccess := requireEnvInt(t, "TEST_FIELD_ID_NO_ACCESS")
|
||
|
|
|
||
|
|
_, err := client.Fields.Get(ctx, fieldIdNoAccess)
|
||
|
|
|
||
|
|
assertAPIError(t, err, http.StatusForbidden)
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("should return a 404 error when the field does not exist", func(t *testing.T) {
|
||
|
|
_, err := client.Fields.Get(ctx, 0)
|
||
|
|
|
||
|
|
assertAPIError(t, err, http.StatusNotFound)
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("List", func(t *testing.T) {
|
||
|
|
t.Run("should return a paged list of fields", func(t *testing.T) {
|
||
|
|
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||
|
|
|
||
|
|
page, err := client.Fields.List(ctx, surveyId)
|
||
|
|
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Expected no error, got %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if page.PageNumber == 0 {
|
||
|
|
t.Error("Expected page number to not be zero")
|
||
|
|
}
|
||
|
|
|
||
|
|
if page.TotalRecords == 0 {
|
||
|
|
t.Error("Expected total records to not be zero")
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(page.Items) == 0 {
|
||
|
|
t.Error("Expected items to not be empty")
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, field := range page.Items {
|
||
|
|
if field.Id == 0 {
|
||
|
|
t.Error("Expected field id to not be zero")
|
||
|
|
}
|
||
|
|
|
||
|
|
if field.Name == "" {
|
||
|
|
t.Error("Expected field name to not be empty")
|
||
|
|
}
|
||
|
|
|
||
|
|
if field.AppId == 0 {
|
||
|
|
t.Error("Expected field appId to not be zero")
|
||
|
|
}
|
||
|
|
|
||
|
|
if field.Type == "" {
|
||
|
|
t.Error("Expected field type to not be empty")
|
||
|
|
}
|
||
|
|
|
||
|
|
if field.Status == "" {
|
||
|
|
t.Error("Expected field status to not be empty")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("should return a paged list of fields with correct page size and number when passed paging request", func(t *testing.T) {
|
||
|
|
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||
|
|
|
||
|
|
page, err := client.Fields.List(ctx, surveyId, onspring.ForPageNumber(1), onspring.WithPageSize(1))
|
||
|
|
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Expected no error, got %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if page.PageNumber != 1 {
|
||
|
|
t.Errorf("Expected page number 1, got %d", page.PageNumber)
|
||
|
|
}
|
||
|
|
|
||
|
|
if page.PageSize != 1 {
|
||
|
|
t.Errorf("Expected page size 1, got %d", page.PageSize)
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(page.Items) != 1 {
|
||
|
|
t.Errorf("Expected 1 item, got %d", len(page.Items))
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("should return a 400 response when an invalid page size is used", func(t *testing.T) {
|
||
|
|
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||
|
|
|
||
|
|
_, err := client.Fields.List(ctx, surveyId, onspring.WithPageSize(1001))
|
||
|
|
|
||
|
|
assertAPIError(t, err, http.StatusBadRequest)
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("should return a 401 response when an invalid api key is used", func(t *testing.T) {
|
||
|
|
invalidClient := createInvalidClient(t)
|
||
|
|
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||
|
|
|
||
|
|
_, err := invalidClient.Fields.List(ctx, surveyId)
|
||
|
|
|
||
|
|
assertAPIError(t, err, http.StatusUnauthorized)
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("should return a 403 response when api key does not have access to the app", func(t *testing.T) {
|
||
|
|
appIdNoAccess := requireEnvInt(t, "TEST_APP_ID_NO_ACCESS")
|
||
|
|
|
||
|
|
_, err := client.Fields.List(ctx, appIdNoAccess)
|
||
|
|
|
||
|
|
assertAPIError(t, err, http.StatusForbidden)
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("ListAll", func(t *testing.T) {
|
||
|
|
t.Run("should iterate all fields for an app", func(t *testing.T) {
|
||
|
|
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||
|
|
|
||
|
|
var fields []onspring.Field
|
||
|
|
|
||
|
|
for field, err := range client.Fields.ListAll(ctx, surveyId, onspring.WithPageSize(1)) {
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Expected no error, got %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
fields = append(fields, field)
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(fields) == 0 {
|
||
|
|
t.Error("Expected to iterate at least one field")
|
||
|
|
}
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("GetMany", func(t *testing.T) {
|
||
|
|
t.Run("should return a collection of fields", func(t *testing.T) {
|
||
|
|
fieldIds := requireEnvIntSlice(t, "TEST_FIELD_IDS")
|
||
|
|
|
||
|
|
batch, err := client.Fields.GetMany(ctx, fieldIds)
|
||
|
|
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Expected no error, got %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if batch.Count != len(fieldIds) {
|
||
|
|
t.Errorf("Expected count %d, got %d", len(fieldIds), batch.Count)
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(batch.Items) != len(fieldIds) {
|
||
|
|
t.Errorf("Expected %d items, got %d", len(fieldIds), len(batch.Items))
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, field := range batch.Items {
|
||
|
|
if field.Id == 0 {
|
||
|
|
t.Error("Expected field id to not be zero")
|
||
|
|
}
|
||
|
|
|
||
|
|
if field.Name == "" {
|
||
|
|
t.Error("Expected field name to not be empty")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("should return a 401 response when an invalid api key is used", func(t *testing.T) {
|
||
|
|
invalidClient := createInvalidClient(t)
|
||
|
|
fieldIds := requireEnvIntSlice(t, "TEST_FIELD_IDS")
|
||
|
|
|
||
|
|
_, err := invalidClient.Fields.GetMany(ctx, fieldIds)
|
||
|
|
|
||
|
|
assertAPIError(t, err, http.StatusUnauthorized)
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("should return a 403 response when the api key does not have access to any of the requested fields", func(t *testing.T) {
|
||
|
|
fieldIdsNoAccess := requireEnvIntSlice(t, "TEST_FIELD_IDS_NO_ACCESS")
|
||
|
|
|
||
|
|
_, err := client.Fields.GetMany(ctx, fieldIdsNoAccess)
|
||
|
|
|
||
|
|
assertAPIError(t, err, http.StatusForbidden)
|
||
|
|
})
|
||
|
|
})
|
||
|
|
}
|