tests: add integration tests
This commit is contained in:
@@ -0,0 +1,649 @@
|
||||
//go:build integration
|
||||
|
||||
package onspring_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/StevanFreeborn/onspring-api-sdk-go"
|
||||
)
|
||||
|
||||
func TestRecordsIntegration(t *testing.T) {
|
||||
loadEnvFile(t)
|
||||
client := createClient(t)
|
||||
ctx := context.Background()
|
||||
|
||||
t.Run("Get", func(t *testing.T) {
|
||||
t.Run("should get a record", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
recordId := requireEnvInt(t, "TEST_SURVEY_RECORD_ID")
|
||||
|
||||
record, err := client.Records.Get(ctx, surveyId, recordId)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
if record.AppId != surveyId {
|
||||
t.Errorf("Expected appId %d, got %d", surveyId, record.AppId)
|
||||
}
|
||||
|
||||
if record.RecordId != recordId {
|
||||
t.Errorf("Expected recordId %d, got %d", recordId, record.RecordId)
|
||||
}
|
||||
|
||||
if len(record.FieldData) == 0 {
|
||||
t.Error("Expected field data to not be empty")
|
||||
}
|
||||
|
||||
for _, field := range record.FieldData {
|
||||
if field.FieldId == 0 {
|
||||
t.Error("Expected field id to not be zero")
|
||||
}
|
||||
|
||||
if field.Type == "" {
|
||||
t.Error("Expected field type to not be empty")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should get a record when fieldIds and data format are passed as parameters", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
recordId := requireEnvInt(t, "TEST_SURVEY_RECORD_ID")
|
||||
textFieldId := requireEnvInt(t, "TEST_TEXT_FIELD")
|
||||
|
||||
record, err := client.Records.Get(
|
||||
ctx,
|
||||
surveyId,
|
||||
recordId,
|
||||
onspring.WithFieldIds([]int{textFieldId}),
|
||||
onspring.WithRecordDataFormat("Formatted"),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
if record.AppId != surveyId {
|
||||
t.Errorf("Expected appId %d, got %d", surveyId, record.AppId)
|
||||
}
|
||||
|
||||
if record.RecordId != recordId {
|
||||
t.Errorf("Expected recordId %d, got %d", recordId, record.RecordId)
|
||||
}
|
||||
|
||||
if len(record.FieldData) == 0 {
|
||||
t.Error("Expected field data 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)
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
recordId := requireEnvInt(t, "TEST_SURVEY_RECORD_ID")
|
||||
|
||||
_, err := invalidClient.Records.Get(ctx, surveyId, recordId)
|
||||
|
||||
assertAPIError(t, err, http.StatusUnauthorized)
|
||||
})
|
||||
|
||||
t.Run("should return a 404 error when an invalid record id is used", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
|
||||
_, err := client.Records.Get(ctx, surveyId, 0)
|
||||
|
||||
assertAPIError(t, err, http.StatusNotFound)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("List", func(t *testing.T) {
|
||||
t.Run("should get records", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
|
||||
page, err := client.Records.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 _, record := range page.Items {
|
||||
if record.AppId != surveyId {
|
||||
t.Errorf("Expected appId %d, got %d", surveyId, record.AppId)
|
||||
}
|
||||
|
||||
if record.RecordId == 0 {
|
||||
t.Error("Expected recordId to not be zero")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should get records when fieldIds, paging information, and data format are passed as parameters", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
textFieldId := requireEnvInt(t, "TEST_TEXT_FIELD")
|
||||
|
||||
page, err := client.Records.List(
|
||||
ctx,
|
||||
surveyId,
|
||||
onspring.WithFieldIds([]int{textFieldId}),
|
||||
onspring.WithRecordDataFormat("Formatted"),
|
||||
onspring.WithPaging(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 401 error when an invalid API key is passed", func(t *testing.T) {
|
||||
invalidClient := createInvalidClient(t)
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
|
||||
_, err := invalidClient.Records.List(ctx, surveyId)
|
||||
|
||||
assertAPIError(t, err, http.StatusUnauthorized)
|
||||
})
|
||||
|
||||
t.Run("should return a 403 error when the api key does not have access to the app", func(t *testing.T) {
|
||||
appIdNoAccess := requireEnvInt(t, "TEST_APP_ID_NO_ACCESS")
|
||||
|
||||
_, err := client.Records.List(ctx, appIdNoAccess)
|
||||
|
||||
assertAPIError(t, err, http.StatusForbidden)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("ListAll", func(t *testing.T) {
|
||||
t.Run("should iterate all records for an app", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
|
||||
var records []onspring.Record
|
||||
|
||||
for record, err := range client.Records.ListAll(ctx, surveyId, onspring.WithPaging(onspring.WithPageSize(1))) {
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
records = append(records, record)
|
||||
}
|
||||
|
||||
if len(records) == 0 {
|
||||
t.Error("Expected to iterate at least one record")
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("GetMany", func(t *testing.T) {
|
||||
t.Run("should get records", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
recordId := requireEnvInt(t, "TEST_SURVEY_RECORD_ID")
|
||||
|
||||
batch, err := client.Records.GetMany(ctx, onspring.GetManyRecordsRequest{
|
||||
AppId: surveyId,
|
||||
RecordIds: []int{recordId},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
if batch.Count == 0 {
|
||||
t.Error("Expected count to not be zero")
|
||||
}
|
||||
|
||||
if len(batch.Items) == 0 {
|
||||
t.Error("Expected items to not be empty")
|
||||
}
|
||||
|
||||
for _, record := range batch.Items {
|
||||
if record.AppId != surveyId {
|
||||
t.Errorf("Expected appId %d, got %d", surveyId, record.AppId)
|
||||
}
|
||||
|
||||
if record.RecordId == 0 {
|
||||
t.Error("Expected recordId to not be zero")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should get records when field ids and data format are passed as parameters", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
recordId := requireEnvInt(t, "TEST_SURVEY_RECORD_ID")
|
||||
textFieldId := requireEnvInt(t, "TEST_TEXT_FIELD")
|
||||
|
||||
batch, err := client.Records.GetMany(ctx, onspring.GetManyRecordsRequest{
|
||||
AppId: surveyId,
|
||||
RecordIds: []int{recordId},
|
||||
FieldIds: []int{textFieldId},
|
||||
DataFormat: "Formatted",
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
if batch.Count == 0 {
|
||||
t.Error("Expected count to not be zero")
|
||||
}
|
||||
|
||||
if len(batch.Items) == 0 {
|
||||
t.Error("Expected items to not be empty")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should return a 400 error if too many record ids are passed", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
|
||||
ids := make([]int, 101)
|
||||
for i := range ids {
|
||||
ids[i] = i + 1
|
||||
}
|
||||
|
||||
_, err := client.Records.GetMany(ctx, onspring.GetManyRecordsRequest{
|
||||
AppId: surveyId,
|
||||
RecordIds: ids,
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusBadRequest)
|
||||
})
|
||||
|
||||
t.Run("should return a 401 error if the api key is invalid", func(t *testing.T) {
|
||||
invalidClient := createInvalidClient(t)
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
recordId := requireEnvInt(t, "TEST_SURVEY_RECORD_ID")
|
||||
|
||||
_, err := invalidClient.Records.GetMany(ctx, onspring.GetManyRecordsRequest{
|
||||
AppId: surveyId,
|
||||
RecordIds: []int{recordId},
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusUnauthorized)
|
||||
})
|
||||
|
||||
t.Run("should return a 403 error if the user does not have access to the app", func(t *testing.T) {
|
||||
appIdNoAccess := requireEnvInt(t, "TEST_APP_ID_NO_ACCESS")
|
||||
recordId := requireEnvInt(t, "TEST_SURVEY_RECORD_ID")
|
||||
|
||||
_, err := client.Records.GetMany(ctx, onspring.GetManyRecordsRequest{
|
||||
AppId: appIdNoAccess,
|
||||
RecordIds: []int{recordId},
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusForbidden)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("Query", func(t *testing.T) {
|
||||
t.Run("should return records", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
autoNumberField := requireEnvInt(t, "TEST_SURVEY_AUTO_NUMBER_FIELD")
|
||||
filter := fmt.Sprintf("%d gt 0", autoNumberField)
|
||||
|
||||
page, err := client.Records.Query(ctx, onspring.QueryRecordsRequest{
|
||||
AppId: surveyId,
|
||||
Filter: filter,
|
||||
})
|
||||
|
||||
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 _, record := range page.Items {
|
||||
if record.AppId != surveyId {
|
||||
t.Errorf("Expected appId %d, got %d", surveyId, record.AppId)
|
||||
}
|
||||
|
||||
if record.RecordId == 0 {
|
||||
t.Error("Expected recordId to not be zero")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should return records when data format, paging information, and fields are passed as parameters", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
autoNumberField := requireEnvInt(t, "TEST_SURVEY_AUTO_NUMBER_FIELD")
|
||||
textFieldId := requireEnvInt(t, "TEST_TEXT_FIELD")
|
||||
filter := fmt.Sprintf("%d gt 0", autoNumberField)
|
||||
|
||||
page, err := client.Records.Query(
|
||||
ctx,
|
||||
onspring.QueryRecordsRequest{
|
||||
AppId: surveyId,
|
||||
Filter: filter,
|
||||
FieldIds: []int{textFieldId},
|
||||
DataFormat: "Formatted",
|
||||
},
|
||||
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 error if page size is invalid", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
autoNumberField := requireEnvInt(t, "TEST_SURVEY_AUTO_NUMBER_FIELD")
|
||||
filter := fmt.Sprintf("%d gt 0", autoNumberField)
|
||||
|
||||
_, err := client.Records.Query(
|
||||
ctx,
|
||||
onspring.QueryRecordsRequest{
|
||||
AppId: surveyId,
|
||||
Filter: filter,
|
||||
},
|
||||
onspring.WithPageSize(1001),
|
||||
)
|
||||
|
||||
assertAPIError(t, err, http.StatusBadRequest)
|
||||
})
|
||||
|
||||
t.Run("should return a 401 error if the API key is invalid", func(t *testing.T) {
|
||||
invalidClient := createInvalidClient(t)
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
autoNumberField := requireEnvInt(t, "TEST_SURVEY_AUTO_NUMBER_FIELD")
|
||||
filter := fmt.Sprintf("%d gt 0", autoNumberField)
|
||||
|
||||
_, err := invalidClient.Records.Query(ctx, onspring.QueryRecordsRequest{
|
||||
AppId: surveyId,
|
||||
Filter: filter,
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusUnauthorized)
|
||||
})
|
||||
|
||||
t.Run("should return a 403 error if the API key does not have access to the app", func(t *testing.T) {
|
||||
appIdNoAccess := requireEnvInt(t, "TEST_APP_ID_NO_ACCESS")
|
||||
autoNumberField := requireEnvInt(t, "TEST_SURVEY_AUTO_NUMBER_FIELD")
|
||||
filter := fmt.Sprintf("%d gt 0", autoNumberField)
|
||||
|
||||
_, err := client.Records.Query(ctx, onspring.QueryRecordsRequest{
|
||||
AppId: appIdNoAccess,
|
||||
Filter: filter,
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusForbidden)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("QueryAll", func(t *testing.T) {
|
||||
t.Run("should iterate all records matching a query", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
autoNumberField := requireEnvInt(t, "TEST_SURVEY_AUTO_NUMBER_FIELD")
|
||||
filter := fmt.Sprintf("%d gt 0", autoNumberField)
|
||||
|
||||
var records []onspring.Record
|
||||
|
||||
for record, err := range client.Records.QueryAll(
|
||||
ctx,
|
||||
onspring.QueryRecordsRequest{
|
||||
AppId: surveyId,
|
||||
Filter: filter,
|
||||
},
|
||||
onspring.WithPageSize(1),
|
||||
) {
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
records = append(records, record)
|
||||
}
|
||||
|
||||
if len(records) == 0 {
|
||||
t.Error("Expected to iterate at least one record")
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("Save", func(t *testing.T) {
|
||||
t.Run("should add a record when no record id is passed", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
textFieldId := requireEnvInt(t, "TEST_TEXT_FIELD")
|
||||
|
||||
response, err := client.Records.Save(ctx, onspring.SaveRecordRequest{
|
||||
AppId: surveyId,
|
||||
Fields: map[string]any{
|
||||
fmt.Sprintf("%d", textFieldId): "integration test record",
|
||||
},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
if response.Id == 0 {
|
||||
t.Error("Expected record id to not be zero")
|
||||
}
|
||||
|
||||
if response.Warnings == nil {
|
||||
t.Error("Expected warnings to not be nil")
|
||||
}
|
||||
|
||||
t.Cleanup(func() {
|
||||
_ = client.Records.Delete(context.Background(), surveyId, response.Id)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("should update a record when a record id is passed", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
textFieldId := requireEnvInt(t, "TEST_TEXT_FIELD")
|
||||
recordId := addTestRecord(t, client, surveyId, textFieldId)
|
||||
|
||||
response, err := client.Records.Save(ctx, onspring.SaveRecordRequest{
|
||||
AppId: surveyId,
|
||||
RecordId: &recordId,
|
||||
Fields: map[string]any{
|
||||
fmt.Sprintf("%d", textFieldId): "updated integration test record",
|
||||
},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
if response.Id == 0 {
|
||||
t.Error("Expected record id to not be zero")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should return a 400 error when field data is empty", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
|
||||
_, err := client.Records.Save(ctx, onspring.SaveRecordRequest{
|
||||
AppId: surveyId,
|
||||
Fields: map[string]any{},
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusBadRequest)
|
||||
})
|
||||
|
||||
t.Run("should return a 401 error when the api key is invalid", func(t *testing.T) {
|
||||
invalidClient := createInvalidClient(t)
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
textFieldId := requireEnvInt(t, "TEST_TEXT_FIELD")
|
||||
|
||||
_, err := invalidClient.Records.Save(ctx, onspring.SaveRecordRequest{
|
||||
AppId: surveyId,
|
||||
Fields: map[string]any{
|
||||
fmt.Sprintf("%d", textFieldId): "test",
|
||||
},
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusUnauthorized)
|
||||
})
|
||||
|
||||
t.Run("should return a 403 error when the api key does not have access to the app", func(t *testing.T) {
|
||||
appIdNoAccess := requireEnvInt(t, "TEST_APP_ID_NO_ACCESS")
|
||||
textFieldId := requireEnvInt(t, "TEST_TEXT_FIELD")
|
||||
|
||||
_, err := client.Records.Save(ctx, onspring.SaveRecordRequest{
|
||||
AppId: appIdNoAccess,
|
||||
Fields: map[string]any{
|
||||
fmt.Sprintf("%d", textFieldId): "test",
|
||||
},
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusForbidden)
|
||||
})
|
||||
|
||||
t.Run("should return a 404 error when the record id is not found", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
textFieldId := requireEnvInt(t, "TEST_TEXT_FIELD")
|
||||
recordId := 0
|
||||
|
||||
_, err := client.Records.Save(ctx, onspring.SaveRecordRequest{
|
||||
AppId: surveyId,
|
||||
RecordId: &recordId,
|
||||
Fields: map[string]any{
|
||||
fmt.Sprintf("%d", textFieldId): "test",
|
||||
},
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusNotFound)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("Delete", func(t *testing.T) {
|
||||
t.Run("should delete a record", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
textFieldId := requireEnvInt(t, "TEST_TEXT_FIELD")
|
||||
recordId := addTestRecord(t, client, surveyId, textFieldId)
|
||||
|
||||
err := client.Records.Delete(ctx, surveyId, recordId)
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("Expected no error, got %v", err)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should return a 401 error when the API key is invalid", func(t *testing.T) {
|
||||
invalidClient := createInvalidClient(t)
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
recordId := requireEnvInt(t, "TEST_SURVEY_RECORD_ID")
|
||||
|
||||
err := invalidClient.Records.Delete(ctx, surveyId, recordId)
|
||||
|
||||
assertAPIError(t, err, http.StatusUnauthorized)
|
||||
})
|
||||
|
||||
t.Run("should return a 403 error when the API key does not have access to the app", func(t *testing.T) {
|
||||
appIdNoAccess := requireEnvInt(t, "TEST_APP_ID_NO_ACCESS")
|
||||
recordId := requireEnvInt(t, "TEST_SURVEY_RECORD_ID")
|
||||
|
||||
err := client.Records.Delete(ctx, appIdNoAccess, recordId)
|
||||
|
||||
assertAPIError(t, err, http.StatusForbidden)
|
||||
})
|
||||
|
||||
t.Run("should return a 404 error when the record does not exist", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
|
||||
err := client.Records.Delete(ctx, surveyId, 0)
|
||||
|
||||
assertAPIError(t, err, http.StatusNotFound)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("DeleteMany", func(t *testing.T) {
|
||||
t.Run("should delete records", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
textFieldId := requireEnvInt(t, "TEST_TEXT_FIELD")
|
||||
recordId1 := addTestRecord(t, client, surveyId, textFieldId)
|
||||
recordId2 := addTestRecord(t, client, surveyId, textFieldId)
|
||||
|
||||
err := client.Records.DeleteMany(ctx, onspring.DeleteManyRecordsRequest{
|
||||
AppId: surveyId,
|
||||
RecordIds: []int{recordId1, recordId2},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("Expected no error, got %v", err)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should return a 400 error when no record ids are provided", func(t *testing.T) {
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
|
||||
err := client.Records.DeleteMany(ctx, onspring.DeleteManyRecordsRequest{
|
||||
AppId: surveyId,
|
||||
RecordIds: []int{},
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusBadRequest)
|
||||
})
|
||||
|
||||
t.Run("should return a 401 error when an invalid API key is used", func(t *testing.T) {
|
||||
invalidClient := createInvalidClient(t)
|
||||
surveyId := requireEnvInt(t, "TEST_SURVEY_ID")
|
||||
|
||||
err := invalidClient.Records.DeleteMany(ctx, onspring.DeleteManyRecordsRequest{
|
||||
AppId: surveyId,
|
||||
RecordIds: []int{1},
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusUnauthorized)
|
||||
})
|
||||
|
||||
t.Run("should return a 403 error when the API key does not have access to the app", func(t *testing.T) {
|
||||
appIdNoAccess := requireEnvInt(t, "TEST_APP_ID_NO_ACCESS")
|
||||
|
||||
err := client.Records.DeleteMany(ctx, onspring.DeleteManyRecordsRequest{
|
||||
AppId: appIdNoAccess,
|
||||
RecordIds: []int{1},
|
||||
})
|
||||
|
||||
assertAPIError(t, err, http.StatusForbidden)
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user