mirror of
https://github.com/pikami/cosmium.git
synced 2025-03-29 04:59:22 +00:00
114 lines
3.4 KiB
Go
114 lines
3.4 KiB
Go
package tests_test
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
|
|
"github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos"
|
|
"github.com/pikami/cosmium/internal/datastore"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func Test_Databases(t *testing.T) {
|
|
presets := []testPreset{PresetJsonStore, PresetBadgerStore}
|
|
|
|
runTestsWithPresets(t, "Database Create", presets, func(t *testing.T, ts *TestServer, client *azcosmos.Client) {
|
|
t.Run("Should create database", func(t *testing.T) {
|
|
ts.DataStore.DeleteDatabase(testDatabaseName)
|
|
|
|
createResponse, err := client.CreateDatabase(context.TODO(), azcosmos.DatabaseProperties{
|
|
ID: testDatabaseName,
|
|
}, &azcosmos.CreateDatabaseOptions{})
|
|
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, createResponse.DatabaseProperties.ID, testDatabaseName)
|
|
})
|
|
|
|
t.Run("Should return conflict when database exists", func(t *testing.T) {
|
|
ts.DataStore.CreateDatabase(datastore.Database{
|
|
ID: testDatabaseName,
|
|
})
|
|
|
|
_, err := client.CreateDatabase(context.TODO(), azcosmos.DatabaseProperties{
|
|
ID: testDatabaseName,
|
|
}, &azcosmos.CreateDatabaseOptions{})
|
|
assert.NotNil(t, err)
|
|
|
|
var respErr *azcore.ResponseError
|
|
if errors.As(err, &respErr) {
|
|
assert.Equal(t, respErr.StatusCode, http.StatusConflict)
|
|
} else {
|
|
panic(err)
|
|
}
|
|
})
|
|
})
|
|
|
|
runTestsWithPresets(t, "Database Read", presets, func(t *testing.T, ts *TestServer, client *azcosmos.Client) {
|
|
t.Run("Should read database", func(t *testing.T) {
|
|
ts.DataStore.CreateDatabase(datastore.Database{
|
|
ID: testDatabaseName,
|
|
})
|
|
|
|
databaseResponse, err := client.NewDatabase(testDatabaseName)
|
|
assert.Nil(t, err)
|
|
|
|
readResponse, err := databaseResponse.Read(context.TODO(), &azcosmos.ReadDatabaseOptions{})
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, readResponse.RawResponse.StatusCode, http.StatusOK)
|
|
assert.Equal(t, readResponse.DatabaseProperties.ID, testDatabaseName)
|
|
})
|
|
|
|
t.Run("Should return not found when database does not exist", func(t *testing.T) {
|
|
ts.DataStore.DeleteDatabase(testDatabaseName)
|
|
|
|
databaseResponse, err := client.NewDatabase(testDatabaseName)
|
|
assert.Nil(t, err)
|
|
|
|
_, err = databaseResponse.Read(context.TODO(), &azcosmos.ReadDatabaseOptions{})
|
|
assert.NotNil(t, err)
|
|
|
|
var respErr *azcore.ResponseError
|
|
if errors.As(err, &respErr) {
|
|
assert.Equal(t, respErr.StatusCode, http.StatusNotFound)
|
|
} else {
|
|
panic(err)
|
|
}
|
|
})
|
|
})
|
|
|
|
runTestsWithPresets(t, "Database Delete", presets, func(t *testing.T, ts *TestServer, client *azcosmos.Client) {
|
|
t.Run("Should delete database", func(t *testing.T) {
|
|
ts.DataStore.CreateDatabase(datastore.Database{
|
|
ID: testDatabaseName,
|
|
})
|
|
|
|
databaseResponse, err := client.NewDatabase(testDatabaseName)
|
|
assert.Nil(t, err)
|
|
|
|
readResponse, err := databaseResponse.Delete(context.TODO(), &azcosmos.DeleteDatabaseOptions{})
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, readResponse.RawResponse.StatusCode, http.StatusNoContent)
|
|
})
|
|
|
|
t.Run("Should return not found when database does not exist", func(t *testing.T) {
|
|
ts.DataStore.DeleteDatabase(testDatabaseName)
|
|
|
|
databaseResponse, err := client.NewDatabase(testDatabaseName)
|
|
assert.Nil(t, err)
|
|
|
|
_, err = databaseResponse.Read(context.TODO(), &azcosmos.ReadDatabaseOptions{})
|
|
assert.NotNil(t, err)
|
|
|
|
var respErr *azcore.ResponseError
|
|
if errors.As(err, &respErr) {
|
|
assert.Equal(t, respErr.StatusCode, http.StatusNotFound)
|
|
} else {
|
|
panic(err)
|
|
}
|
|
})
|
|
})
|
|
}
|