package resource_limit

import (
	"fmt"
	"testing"

	"github.com/onsi/gomega"

	"github.com/pingcap-inc/clinic/pkg/db/model"
)

func TestTenantQuotaLimit(t *testing.T) {
	limiter := NewQuotaLimiter()
	g := gomega.NewGomegaWithT(t)

	userID := uint(1)
	for i := 0; i < 100; i++ {
		ok := limiter.AskForResource(OrgCntQuota, 1, userID)
		if i < 3 {
			g.Expect(ok).To(gomega.BeTrue())
		} else {
			g.Expect(ok).To(gomega.BeFalse())
		}

		_, err := model.CreateOrganization(fmt.Sprintf("org%d", i), "test", 1, func(orgID uint) error {
			return nil
		})

		g.Expect(err).To(gomega.Succeed())
	}
}

func TestUploadSizeLimit(t *testing.T) {
	limiter := NewQuotaLimiter()
	g := gomega.NewGomegaWithT(t)

	ok := limiter.AskForResource(UploadSizeQuota, 1, uint(123))
	g.Expect(ok).To(gomega.BeTrue())

	ok = limiter.AskForResource(UploadSizeQuota, 3221225472, uint(123))
	g.Expect(ok).To(gomega.BeTrue())

	ok = limiter.AskForResource(UploadSizeQuota, 11100000000, uint(123))
	g.Expect(ok).To(gomega.BeFalse())
}
