Skip to content

Commit

Permalink
chore: review update
Browse files Browse the repository at this point in the history
  • Loading branch information
xlassix authored and chibie committed Jul 29, 2024
1 parent 64a0b01 commit 92737b8
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 259 deletions.
1 change: 0 additions & 1 deletion services/priority_queue.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,6 @@ func (s *PriorityQueueService) CreatePriorityQueueForBucket(ctx context.Context,
// Enqueue provider ID and rate as a single string into the circular queue
redisKey := fmt.Sprintf("bucket_%s_%s_%s", bucket.Edges.Currency.Code, bucket.MinAmount, bucket.MaxAmount)

// BUG!!!if we clear redis like this only one provider will ever be in the public Queue
_, err := storage.RedisClient.Del(ctx, redisKey).Result() // delete existing queue
if err != nil {
logger.Errorf("failed to delete existing circular queue: %v", err)
Expand Down
261 changes: 8 additions & 253 deletions services/priority_queue_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"net/http"
"strings"
"testing"
"time"

"github.com/jarcoal/httpmock"
"github.com/paycrest/protocol/ent"
Expand Down Expand Up @@ -167,6 +168,7 @@ func setupForPQ() error {

return nil
}

func TestPriorityQueueTest(t *testing.T) {
// Set up test database client
client := enttest.Open(t, "sqlite3", "file:ent?mode=memory&_fk=1")
Expand Down Expand Up @@ -220,14 +222,12 @@ func TestPriorityQueueTest(t *testing.T) {

redisKey := fmt.Sprintf("bucket_%s_%s_%s", _bucket.Edges.Currency.Code, testCtxForPQ.minAmount, testCtxForPQ.maxAmount)

// err = db.RedisClient.RPush(ctx, redisKey, testCtxForPQ.privateProviderPrivate.ID).Err()
// assert.NoError(t, err)
data, err := db.RedisClient.LRange(ctx, redisKey, 0, -1).Result()
assert.NoError(t, err)
assert.Equal(t, len(data), 1)
assert.Contains(t, data[0], testCtxForPQ.privateProviderPrivate.ID)

})

t.Run("TestProcessBucketQueues", func(t *testing.T) {
err = service.ProcessBucketQueues()
assert.NoError(t, err)
Expand Down Expand Up @@ -340,6 +340,7 @@ func TestPriorityQueueTest(t *testing.T) {
ProvisionBucket: order.Edges.ProvisionBucket,
})
assert.NoError(t, err)

t.Run("TestNotifyProvider", func(t *testing.T) {

// setup httpmock
Expand Down Expand Up @@ -389,10 +390,9 @@ func TestPriorityQueueTest(t *testing.T) {
})
assert.NoError(t, err)
_order, err := test.CreateTestLockPaymentOrder(map[string]interface{}{
"provider": testCtxForPQ.providerProfile,
"tokenID": testCtxForPQ.token.ID,
"status": lockpaymentorder.StatusProcessing.String(),
"updatedAt": 0.0,
"provider": testCtxForPQ.providerProfile,
"tokenID": testCtxForPQ.token.ID,
"status": lockpaymentorder.StatusProcessing.String(),
})
assert.NoError(t, err)

Expand Down Expand Up @@ -422,7 +422,7 @@ func TestPriorityQueueTest(t *testing.T) {
"provider": testCtxForPQ.privateProviderPrivate,
"tokenID": testCtxForPQ.token.ID,
"status": lockpaymentorder.StatusProcessing.String(),
"updatedAt": 0.0,
"updatedAt": time.Now().Add(-5 * time.Minute),
})
assert.NoError(t, err)

Expand Down Expand Up @@ -452,248 +452,3 @@ func TestPriorityQueueTest(t *testing.T) {
})
})
}

// func TestProviderVisibilityMode(t *testing.T) {

// // Set up test Redis client
// redisClient := redis.NewClient(&redis.Options{
// Addr: "localhost:6379",
// })
// defer redisClient.Close()

// // Set up test database client
// client := enttest.Open(t, "sqlite3", "file:ent?mode=memory&_fk=1")
// defer client.Close()
// db.Client = client

// // Run the auto migration tool.
// err := client.Schema.Create(context.Background(), migrate.WithGlobalUniqueID(true))
// assert.NoError(t, err)

// // Seed the database
// err = storage.SeedAll()
// assert.NoError(t, err)

// // Initialize Redis
// err = storage.InitializeRedis()
// assert.NoError(t, err)

// // Set up test service
// pqService := NewPriorityQueueService()

// // Set up test order
// // order := types.LockPaymentOrderFields{
// // ID: 1,
// // ProvisionBucket: &types.Provi{
// // Edges: types.ProvisionBucketEdges{
// // Currency: &types.Currency{
// // Code: "USD",
// // },
// // },
// // MinAmount: decimal.NewFromFloat(100),
// // MaxAmount: decimal.NewFromFloat(1000),
// // },
// // Rate: decimal.NewFromFloat(1.5),
// // Amount: decimal.NewFromFloat(500),
// // Token: &types.Token{Symbol: "USDT"},
// // Institution: "Test Institution",
// // ProviderID: "",
// // }

// // Set up test provider user
// ProviderPublic, err := test.CreateTestUser(map[string]string{
// "scope": "provider",
// "email": "[email protected]",
// })
// assert.NoError(t, err)

// providerPrivate, err := test.CreateTestUser(map[string]string{
// "scope": "provider",
// "email": "[email protected]",
// })
// assert.NoError(t, err)

// // Set up test provider currency
// currency, err := test.CreateTestFiatCurrency(nil)
// assert.NoError(t, err)

// publicProviderPrivate, err := test.CreateTestProviderProfile(nil, ProviderPublic, currency)
// assert.NoError(t, err)
// privateProviderPrivate, err := test.CreateTestProviderProfile(map[string]interface{}{"visibility_mode": "private"}, providerPrivate, currency)
// assert.NoError(t, err)

// // Set up payment order
// _, err = test.CreateTestLockPaymentOrder(map[string]interface{}{"provider": privateProviderPrivate})
// assert.NoError(t, err)
// _, err = test.CreateTestLockPaymentOrder(map[string]interface{}{"provider": publicProviderPrivate, "order_id": "order_1234"})
// assert.NoError(t, err)

// t.Run("GetProvidersByBucket", func(t *testing.T) {
// t.Run("Return only providers with visibility mode public", func(t *testing.T) {
// buckets, err := pqService.GetProvidersByBucket(context.Background())
// assert.NoError(t, err)
// fmt.Printf("!!!buckets >> %v", buckets)

// })
// })

// service.GetProvidersByBucket(context.Background())

// // Test case 1: no exclude list, no specified provider, circular queue has a match
// err := redisClient.Del(ctx, "bucket_USD_100_1000").Err()
// assert.NoError(t, err)

// err = redisClient.RPush(ctx, "bucket_USD_100_1000", "p1:1.5", "p2:1.6", "p3:1.4").Err()
// assert.NoError(t, err)

// err = service.AssignLockPaymentOrder(ctx, order)
// assert.NoError(t, err)

// orderKey := fmt.Sprintf("order_request_%d", order.ID)
// orderRequestData, err := redisClient.HGetAll(ctx, orderKey).Result()
// assert.NoError(t, err)

// assert.Equal(t, "750", orderRequestData["amount"])
// assert.Equal(t, "USDT", orderRequestData["token"])
// assert.Equal(t, "Test Institution", orderRequestData["institution"])
// assert.Equal(t, "p1", orderRequestData["providerId"])

// // Test case 2: no exclude list, no specified provider, circular queue has no match
// err = redisClient.Del(ctx, "bucket_USD_100_1000").Err()
// assert.NoError(t, err)

// err = redisClient.RPush(ctx, "bucket_USD_100_1000", "p1:1.6", "p2:1.7", "p3:1.8").Err()
// assert.NoError(t, err)

// err = service.AssignLockPaymentOrder(ctx, order)
// assert.NoError(t, err)

// orderRequestData, err = redisClient.HGetAll(ctx, orderKey).Result()
// assert.NoError(t, err)

// assert.Equal(t, "750", orderRequestData["amount"])
// assert.Equal(t, "USDT", orderRequestData["token"])
// assert.Equal(t, "Test Institution", orderRequestData["institution"])
// assert.Equal(t, "p1", orderRequestData["providerId"])

// // Test case 3: no exclude list, specified provider has no match
// err = redisClient.Del(ctx, "bucket_USD_100_1000").Err()
// assert.NoError(t, err)

// err = redisClient.RPush(ctx, "bucket_USD_100_1000", "p1:1.6", "p2:1.7", "p3:1.8").Err()
// assert.NoError(t, err)

// order.ProviderID = "p4"

// err = service.AssignLockPaymentOrder(ctx, order)
// assert.NoError(t, err)

// orderRequestData, err = redisClient.HGetAll(ctx, orderKey).Result()
// assert.NoError(t, err)

// assert.Equal(t, "750", orderRequestData["amount"])
// assert.Equal(t, "USDT", orderRequestData["token"])
// assert.Equal(t, "Test Institution", orderRequestData["institution"])
// assert.Equal(t, "p4", orderRequestData["providerId"])

// // Test case 4: exclude list, specified provider has no match
// err = redisClient.Del(ctx, "bucket_USD_100_1000").Err()
// assert.NoError(t, err)

// err = redisClient.RPush(ctx, "bucket_USD_100_1000", "p1:1.6", "p2:1.7", "p3:1.8").Err()
// assert.NoError(t, err)

// err = redisClient.RPush(ctx, "order_exclude_list_1", "p4").Err()
// assert.NoError(t, err)

// order.ProviderID = "p4"

// err = service.AssignLockPaymentOrder(ctx, order)
// assert.NoError(t, err)

// orderRequestData, err = redisClient.HGetAll(ctx, orderKey).Result()
// assert.NoError(t, err)

// assert.Equal(t, "750", orderRequestData["amount"])
// assert.Equal(t, "USDT", orderRequestData["token"])
// assert.Equal(t, "Test Institution", orderRequestData["institution"])
// assert.Equal(t, "p1", orderRequestData["providerId"])

// // Test case 5: exclude list, specified provider has a match
// err = redisClient.Del(ctx, "bucket_USD_100_1000").Err()
// assert.NoError(t, err)

// err = redisClient.RPush(ctx, "bucket_USD_100_1000", "p1:1.5", "p2:1.6", "p3:1.4").Err()
// assert.NoError(t, err)

// err = redisClient.RPush(ctx, "order_exclude_list_1", "p2").Err()
// assert.NoError(t, err)

// order.ProviderID = "p2"

// err = service.AssignLockPaymentOrder(ctx, order)
// assert.NoError(t, err)

// orderRequestData, err = redisClient.HGetAll(ctx, orderKey).Result()
// assert.NoError(t, err)

// assert.Equal(t, "750", orderRequestData["amount"])
// assert.Equal(t, "USDT", orderRequestData["token"])
// assert.Equal(t, "Test Institution", orderRequestData["institution"])
// assert.Equal(t, "p1", orderRequestData["providerId"])

// // Test case 6: invalid provider data format
// err = redisClient.Del(ctx, "bucket_USD_100_1000").Err()
// assert.NoError(t, err)

// err = redisClient.RPush(ctx, "bucket_USD_100_1000", "p1:1.5", "invalid_data", "p3:1.4").Err()
// assert.NoError(t, err)

// err = service.AssignLockPaymentOrder(ctx, order)
// assert.NoError(t, err)

// orderRequestData, err = redisClient.HGetAll(ctx, orderKey).Result()
// assert.NoError(t, err)

// assert.Equal(t, "750", orderRequestData["amount"])
// assert.Equal(t, "USDT", orderRequestData["token"])
// assert.Equal(t, "Test Institution", orderRequestData["institution"])
// assert.Equal(t, "p1", orderRequestData["providerId"])

// // Test case 7: Redis error
// err = redisClient.Del(ctx, "bucket_USD_100_1000").Err()
// assert.NoError(t, err)

// err = redisClient.RPush(ctx, "bucket_USD_100_1000", "p1:1.5", "p2:1.6", "p3:1.4").Err()
// assert.NoError(t, err)

// // Force a Redis error by deleting the Redis key
// err = redisClient.Del(ctx, orderKey).Err()
// assert.NoError(t, err)

// err = service.AssignLockPaymentOrder(ctx, order)
// assert.Error(t, err)
// assert.True(t, strings.HasPrefix(err.Error(), "failed to map order to a provider in Redis: "))

// // Test case 8: provider notification error
// err = redisClient.Del(ctx, "bucket_USD_100_1000").Err()
// assert.NoError(t, err)

// err = redisClient.RPush(ctx, "bucket_USD_100_1000", "p1:1.5", "p2:1.6", "p3:1.4").Err()
// assert.NoError(t, err)

// // Force a provider notification error by using an invalid provider ID
// order.ProviderID = "invalid_provider_id"

// err = service.AssignLockPaymentOrder(ctx, order)
// assert.NoError(t, err)

// orderRequestData, err = redisClient.HGetAll(ctx, orderKey).Result()
// assert.NoError(t, err)

// assert.Equal(t, "750", orderRequestData["amount"])
// assert.Equal(t, "USDT", orderRequestData["token"])
// assert.Equal(t, "Test Institution", orderRequestData["institution"])
// assert.Equal(t, "p1", orderRequestData["providerId"])

// }
7 changes: 2 additions & 5 deletions utils/test/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ func CreateTestLockPaymentOrder(overrides map[string]interface{}) (*ent.LockPaym
"institution": "ABNGNGLA",
"account_identifier": "1234567890",
"account_name": "Test Account",
"updatedAt": 5.0,
"updatedAt": time.Now(),
"tokenID": 0,
}

Expand Down Expand Up @@ -237,9 +237,8 @@ func CreateTestLockPaymentOrder(overrides map[string]interface{}) (*ent.LockPaym
SetAccountName(payload["account_name"].(string)).
SetTokenID(payload["tokenID"].(int)).
SetProvider(providerProfile).
SetUpdatedAt(time.Now().Add(time.Minute * time.Duration(payload["updatedAt"].(float64)))).
SetUpdatedAt(payload["updatedAt"].(time.Time)).
Save(context.Background())

if err != nil {
return nil, err
}
Expand Down Expand Up @@ -518,7 +517,6 @@ func CreateTestProvisionBucket(overrides map[string]interface{}) (*ent.Provision
SetMaxAmount(payload["max_amount"].(decimal.Decimal)).
SetCurrencyID(payload["currency_id"].(uuid.UUID)).
Save(context.Background())

if err != nil {
return nil, err
}
Expand All @@ -527,7 +525,6 @@ func CreateTestProvisionBucket(overrides map[string]interface{}) (*ent.Provision
UpdateOneID(payload["provider_id"].(string)).
AddProvisionBucketIDs(bucket.ID).
Save(context.Background())

if err != nil {
return nil, err
}
Expand Down

0 comments on commit 92737b8

Please sign in to comment.