draft tests
This commit is contained in:
125
models/resources/tests/data_test.go
Normal file
125
models/resources/tests/data_test.go
Normal file
@@ -0,0 +1,125 @@
|
||||
package resources_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"cloud.o-forge.io/core/oc-lib/models/common/models"
|
||||
"cloud.o-forge.io/core/oc-lib/models/common/pricing"
|
||||
"cloud.o-forge.io/core/oc-lib/models/resources"
|
||||
"cloud.o-forge.io/core/oc-lib/tools"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestDataResource_GetType(t *testing.T) {
|
||||
d := &resources.DataResource{}
|
||||
assert.Equal(t, tools.DATA_RESOURCE.String(), d.GetType())
|
||||
}
|
||||
|
||||
func TestDataResource_GetAccessor(t *testing.T) {
|
||||
req := &tools.APIRequest{}
|
||||
acc := (&resources.DataResource{}).GetAccessor(req)
|
||||
assert.NotNil(t, acc)
|
||||
}
|
||||
|
||||
func TestDataResource_ConvertToPricedResource(t *testing.T) {
|
||||
d := &resources.DataResource{}
|
||||
d.UUID = "123"
|
||||
res := d.ConvertToPricedResource(tools.DATA_RESOURCE, &tools.APIRequest{})
|
||||
assert.IsType(t, &resources.PricedDataResource{}, res)
|
||||
|
||||
nilRes := d.ConvertToPricedResource(tools.PROCESSING_RESOURCE, &tools.APIRequest{})
|
||||
assert.Nil(t, nilRes)
|
||||
}
|
||||
|
||||
func TestDataInstance_StoreDraftDefault(t *testing.T) {
|
||||
di := &resources.DataInstance{
|
||||
Source: "test-src",
|
||||
ResourceInstance: resources.ResourceInstance[*resources.DataResourcePartnership]{
|
||||
Env: []models.Param{},
|
||||
},
|
||||
}
|
||||
di.StoreDraftDefault()
|
||||
assert.Len(t, di.ResourceInstance.Env, 1)
|
||||
assert.Equal(t, "source", di.ResourceInstance.Env[0].Attr)
|
||||
assert.Equal(t, "test-src", di.ResourceInstance.Env[0].Value)
|
||||
|
||||
// Call again, should not duplicate
|
||||
di.StoreDraftDefault()
|
||||
assert.Len(t, di.ResourceInstance.Env, 1)
|
||||
}
|
||||
|
||||
func TestDataResourcePricingStrategy_GetQuantity(t *testing.T) {
|
||||
tests := []struct {
|
||||
strategy resources.DataResourcePricingStrategy
|
||||
input float64
|
||||
expected float64
|
||||
}{
|
||||
{resources.PER_DOWNLOAD, 1, 1},
|
||||
{resources.PER_TB_DOWNLOADED, 1, 1000},
|
||||
{resources.PER_GB_DOWNLOADED, 2.5, 2.5},
|
||||
{resources.PER_MB_DOWNLOADED, 1, 0.001},
|
||||
{resources.PER_KB_DOWNLOADED, 1, 0.000001},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
q, err := tt.strategy.GetQuantity(tt.input)
|
||||
require.NoError(t, err)
|
||||
assert.InDelta(t, tt.expected, q, 1e-9)
|
||||
}
|
||||
|
||||
_, err := resources.DataResourcePricingStrategy(999).GetQuantity(1)
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
func TestDataResourcePricingProfile_IsPurchased(t *testing.T) {
|
||||
profile := &resources.DataResourcePricingProfile{}
|
||||
profile.Pricing.BuyingStrategy = pricing.PAY_PER_USE
|
||||
assert.False(t, profile.IsPurchased())
|
||||
|
||||
profile.Pricing.BuyingStrategy = pricing.SUBSCRIPTION
|
||||
assert.True(t, profile.IsPurchased())
|
||||
}
|
||||
|
||||
func TestPricedDataResource_GetPrice(t *testing.T) {
|
||||
now := time.Now()
|
||||
later := now.Add(1 * time.Hour)
|
||||
mockPrice := 42.0
|
||||
|
||||
pricingProfile := &resources.DataResourcePricingProfile{AccessPricingProfile: pricing.AccessPricingProfile[resources.DataResourcePricingStrategy]{
|
||||
Pricing: pricing.PricingStrategy[resources.DataResourcePricingStrategy]{Price: 42.0}},
|
||||
}
|
||||
pricingProfile.Pricing.OverrideStrategy = resources.PER_GB_DOWNLOADED
|
||||
|
||||
r := &resources.PricedDataResource{
|
||||
PricedResource: resources.PricedResource{
|
||||
UsageStart: &now,
|
||||
UsageEnd: &later,
|
||||
PricingProfiles: []pricing.PricingProfileITF{
|
||||
pricingProfile,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
price, err := r.GetPrice()
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, mockPrice, price)
|
||||
}
|
||||
|
||||
func TestPricedDataResource_GetPrice_NoProfiles(t *testing.T) {
|
||||
r := &resources.PricedDataResource{
|
||||
PricedResource: resources.PricedResource{
|
||||
ResourceID: "test-resource",
|
||||
},
|
||||
}
|
||||
_, err := r.GetPrice()
|
||||
assert.Error(t, err)
|
||||
assert.Contains(t, err.Error(), "pricing profile must be set")
|
||||
}
|
||||
|
||||
func TestPricedDataResource_GetType(t *testing.T) {
|
||||
r := &resources.PricedDataResource{}
|
||||
assert.Equal(t, tools.DATA_RESOURCE, r.GetType())
|
||||
}
|
||||
Reference in New Issue
Block a user