package main

import (
	"testing"

	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
)

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

	It("native merge", func() {
		base := map[string]interface{}{
			"config": map[string]interface{}{
				"raftstore": map[string]interface{}{
					"apply-pool-size": 2,
					"store-pool-size": 2,
				},
			},
		}
		overlay := map[string]interface{}{
			"config": map[string]interface{}{
				"raftstore": map[string]interface{}{
					"apply-pool-size": 1,
					"store-pool-size": 1,
				},
				"rocksdb": map[string]interface{}{
					"defaultcf": map[string]interface{}{
						"soft-pending-compaction-bytes-limit": "1024GB",
					},
				},
			},
		}
		err := merge(base, overlay)
		Expect(err).To(Succeed())
		raftstoreConfig, err := GetChild(base, "config", "raftstore")
		Expect(err).To(Succeed())
		Expect(raftstoreConfig["apply-pool-size"]).To(Equal(1))
		Expect(raftstoreConfig["store-pool-size"]).To(Equal(1))
		defaultcfConf, err := GetChild(base, "config", "rocksdb", "defaultcf")
		Expect(err).To(Succeed())
		Expect(defaultcfConf["soft-pending-compaction-bytes-limit"]).To(Equal("1024GB"))
	})

	It("merge will override whole slice", func() {
		base := map[string]interface{}{
			"replication": map[string]interface{}{
				"location-labels": []string{"a", "b"},
			},
		}
		overlay := map[string]interface{}{
			"replication": map[string]interface{}{
				"location-labels": []string{"failure-domain.beta.kubernetes.io/region", "failure-domain.beta.kubernetes.io/zone", "kubernetes.io/hostname"},
			},
		}
		err := merge(base, overlay)
		Expect(err).To(Succeed())
		rep, err := GetChild(base, "replication")
		Expect(err).To(Succeed())
		Expect(rep["location-labels"]).To(ConsistOf("failure-domain.beta.kubernetes.io/region", "failure-domain.beta.kubernetes.io/zone", "kubernetes.io/hostname"))
	})
})

func TestGenPullRequestID(t *testing.T) {

	gitCommitMsg = "Update meta.yaml (#1655)"
	id := genPullRequestID()
	if id != 1655 {
		t.Error(id)
	}

	gitCommitMsg = "Update meta.yaml"
	id = genPullRequestID()
	if id != 0 {
		t.Error(id)
	}
}
