gitpod/components/gitpod-db/go/stripe_customer_test.go
2022-12-08 13:05:19 -03:00

87 lines
2.8 KiB
Go

// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
// Licensed under the GNU Affero General Public License (AGPL).
// See License.AGPL.txt in the project root for license information.
package db_test
import (
"context"
"testing"
"time"
db "github.com/gitpod-io/gitpod/components/gitpod-db/go"
"github.com/gitpod-io/gitpod/components/gitpod-db/go/dbtest"
"github.com/google/uuid"
"github.com/stretchr/testify/require"
)
func TestCreateStripeCustomer(t *testing.T) {
conn := dbtest.ConnectForTests(t)
customer := db.StripeCustomer{
StripeCustomerID: "cus_1234",
AttributionID: db.NewUserAttributionID(uuid.New().String()),
CreationTime: db.NewVarCharTime(time.Now()),
}
t.Cleanup(func() {
require.NoError(t, conn.Delete(&customer).Error)
})
require.NoError(t, db.CreateStripeCustomer(context.Background(), conn, customer))
// second create should fail due to PK contstraint
require.Error(t, db.CreateStripeCustomer(context.Background(), conn, customer))
}
func TestGetStripeCustomer(t *testing.T) {
conn := dbtest.ConnectForTests(t)
customers := dbtest.CreateStripeCustomers(t, conn, dbtest.NewStripeCustomer(t, db.StripeCustomer{}))
customer := customers[0]
retrieved, err := db.GetStripeCustomer(context.Background(), conn, customer.StripeCustomerID)
require.NoError(t, err)
require.Equal(t, customer.StripeCustomerID, retrieved.StripeCustomerID)
require.Equal(t, customer.AttributionID, retrieved.AttributionID)
}
func TestGetStripeCustomer_NotFound_WhenNotExists(t *testing.T) {
conn := dbtest.ConnectForTests(t)
_, err := db.GetStripeCustomer(context.Background(), conn, "cus_12314141")
require.Error(t, err)
require.ErrorIs(t, err, db.ErrorNotFound)
}
func TestGetStripeCustomerByAttributionID_ReturnsLatestRecord(t *testing.T) {
conn := dbtest.ConnectForTests(t)
now := time.Now()
attributionID := db.NewTeamAttributionID(uuid.New().String())
first := dbtest.NewStripeCustomer(t, db.StripeCustomer{
AttributionID: attributionID,
CreationTime: db.NewVarCharTime(now.Add(-1 * time.Hour)),
})
second := dbtest.NewStripeCustomer(t, db.StripeCustomer{
AttributionID: attributionID,
CreationTime: db.NewVarCharTime(now),
})
dbtest.CreateStripeCustomers(t, conn, first, second)
retrieved, err := db.GetStripeCustomerByAttributionID(context.Background(), conn, attributionID)
require.NoError(t, err)
require.Equal(t, second.StripeCustomerID, retrieved.StripeCustomerID)
require.Equal(t, second.AttributionID, retrieved.AttributionID)
}
func TestGetStripeCustomerByAttributionID_NotFound_WhenNotExists(t *testing.T) {
conn := dbtest.ConnectForTests(t)
attributionID := db.NewTeamAttributionID(uuid.New().String())
_, err := db.GetStripeCustomerByAttributionID(context.Background(), conn, attributionID)
require.Error(t, err)
require.ErrorIs(t, err, db.ErrorNotFound)
}