tests: add integration tests
This commit is contained in:
@@ -0,0 +1,203 @@
|
||||
//go:build integration
|
||||
|
||||
package onspring_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/StevanFreeborn/onspring-api-sdk-go"
|
||||
)
|
||||
|
||||
func TestReportsIntegration(t *testing.T) {
|
||||
loadEnvFile(t)
|
||||
client := createClient(t)
|
||||
ctx := context.Background()
|
||||
|
||||
t.Run("Get", func(t *testing.T) {
|
||||
t.Run("should return a report", func(t *testing.T) {
|
||||
reportId := requireEnvInt(t, "TEST_REPORT")
|
||||
|
||||
report, err := client.Reports.Get(ctx, reportId)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
if report.Columns == nil {
|
||||
t.Error("Expected columns to not be nil")
|
||||
}
|
||||
|
||||
if report.Rows == nil {
|
||||
t.Error("Expected rows to not be nil")
|
||||
}
|
||||
|
||||
for _, row := range report.Rows {
|
||||
if row.Cells == nil {
|
||||
t.Error("Expected cells to not be nil")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should return report data for a report with chart data when report data is requested", func(t *testing.T) {
|
||||
reportId := requireEnvInt(t, "TEST_REPORT_WITH_CHART_DATA")
|
||||
|
||||
report, err := client.Reports.Get(ctx, reportId)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
if report.Columns == nil {
|
||||
t.Error("Expected columns to not be nil")
|
||||
}
|
||||
|
||||
if report.Rows == nil {
|
||||
t.Error("Expected rows to not be nil")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should return chart data for a report with a chart when chart data is requested", func(t *testing.T) {
|
||||
reportId := requireEnvInt(t, "TEST_REPORT_WITH_CHART_DATA")
|
||||
|
||||
report, err := client.Reports.Get(
|
||||
ctx,
|
||||
reportId,
|
||||
onspring.WithDataFormat("Raw"),
|
||||
onspring.WithDataType("ChartData"),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
if report.Columns == nil {
|
||||
t.Error("Expected columns to not be nil")
|
||||
}
|
||||
|
||||
if report.Rows == nil {
|
||||
t.Error("Expected rows to not be nil")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should return a 400 error if chart data is requested for a report without chart data", func(t *testing.T) {
|
||||
reportId := requireEnvInt(t, "TEST_REPORT")
|
||||
|
||||
_, err := client.Reports.Get(
|
||||
ctx,
|
||||
reportId,
|
||||
onspring.WithDataFormat("Raw"),
|
||||
onspring.WithDataType("ChartData"),
|
||||
)
|
||||
|
||||
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)
|
||||
reportId := requireEnvInt(t, "TEST_REPORT")
|
||||
|
||||
_, err := invalidClient.Reports.Get(ctx, reportId)
|
||||
|
||||
assertAPIError(t, err, http.StatusUnauthorized)
|
||||
})
|
||||
|
||||
t.Run("should return a 403 error if the api key does not have access to the report", func(t *testing.T) {
|
||||
reportIdNoAccess := requireEnvInt(t, "TEST_REPORT_NO_ACCESS")
|
||||
|
||||
_, err := client.Reports.Get(ctx, reportIdNoAccess)
|
||||
|
||||
assertAPIError(t, err, http.StatusForbidden)
|
||||
})
|
||||
|
||||
t.Run("should return a 404 error if the report does not exist", func(t *testing.T) {
|
||||
_, err := client.Reports.Get(ctx, 0)
|
||||
|
||||
assertAPIError(t, err, http.StatusNotFound)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("List", func(t *testing.T) {
|
||||
t.Run("should return a list of reports", func(t *testing.T) {
|
||||
appId := requireEnvInt(t, "TEST_APP_ID")
|
||||
|
||||
page, err := client.Reports.List(ctx, appId)
|
||||
|
||||
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 _, report := range page.Items {
|
||||
if report.Id == 0 {
|
||||
t.Error("Expected report id to not be zero")
|
||||
}
|
||||
|
||||
if report.AppId == 0 {
|
||||
t.Error("Expected report appId to not be zero")
|
||||
}
|
||||
|
||||
if report.Name == "" {
|
||||
t.Error("Expected report name to not be empty")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("should return a 400 error if page size is invalid", func(t *testing.T) {
|
||||
appId := requireEnvInt(t, "TEST_APP_ID")
|
||||
|
||||
_, err := client.Reports.List(ctx, appId, 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)
|
||||
appId := requireEnvInt(t, "TEST_APP_ID")
|
||||
|
||||
_, err := invalidClient.Reports.List(ctx, appId)
|
||||
|
||||
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")
|
||||
|
||||
_, err := client.Reports.List(ctx, appIdNoAccess)
|
||||
|
||||
assertAPIError(t, err, http.StatusForbidden)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("ListAll", func(t *testing.T) {
|
||||
t.Run("should iterate all reports for an app", func(t *testing.T) {
|
||||
appId := requireEnvInt(t, "TEST_APP_ID")
|
||||
|
||||
var reports []onspring.Report
|
||||
|
||||
for report, err := range client.Reports.ListAll(ctx, appId, onspring.WithPageSize(1)) {
|
||||
if err != nil {
|
||||
t.Fatalf("Expected no error, got %v", err)
|
||||
}
|
||||
|
||||
reports = append(reports, report)
|
||||
}
|
||||
|
||||
if len(reports) == 0 {
|
||||
t.Error("Expected to iterate at least one report")
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user