package v1

import (
	"context"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

var _ = Describe("Backup", func() {

	Context("Create backup", func() {
		It("should contains provider type and region label", func() {
			ctx := context.Background()
			pt, _, nt, tpl := prepareCluster()
			c := tpl.DeepCopy()
			Expect(k8sClient.Create(ctx, c)).To(Succeed())

			backup := &Backup{
				ObjectMeta: metav1.ObjectMeta{
					GenerateName: "backup-",
					Namespace:    c.Namespace,
				},
				Spec: BackupSpec{
					ClusterName: c.Name,
				},
			}
			Expect(k8sClient.Create(ctx, backup)).To(Succeed())
			Expect(backup.Labels[ProviderTypeLabel]).To(Equal(pt.Name))
			Expect(backup.Labels[RegionLabel]).To(Equal(nt.Spec.Region))

		})

		It("test storage validate", func() {
			ctx := context.Background()
			_, _, _, tpl := prepareCluster(option{providerName: ProviderTypeGCP})
			c := tpl.DeepCopy()
			Expect(k8sClient.Create(ctx, c)).To(Succeed())

			illegalStorage := ":"
			awsStorage := "s3//test"
			gcpstorage := "gs://test"

			backup := &Backup{
				ObjectMeta: metav1.ObjectMeta{
					GenerateName: "backup-",
					Namespace:    c.Namespace,
				},
				Spec: BackupSpec{
					ClusterName: c.Name,
				},
			}
			backup2 := *backup

			Expect(k8sClient.Create(ctx, backup)).To(Succeed())
			Expect(k8sClient.Delete(ctx, backup)).To(Succeed())

			backup.Spec.Storage = &illegalStorage
			Expect(k8sClient.Create(ctx, backup)).NotTo(Succeed())

			backup.Spec.Storage = &awsStorage
			Expect(k8sClient.Create(ctx, backup)).NotTo(Succeed())

			backup2.Spec.Storage = &gcpstorage
			Expect(k8sClient.Create(ctx, &backup2)).To(Succeed())
			Expect(k8sClient.Delete(ctx, &backup2)).To(Succeed())
		})
	})
})
