package utils_test

import (
	"wechat-conf/utils"
	"strings"
	"testing"
	"time"
)

func TestStrSliceIndexOf(t *testing.T) {
	cases := []map[string]interface{}{
		map[string]interface{}{
			"case":     []string{"a", "b", "c"},
			"expected": int64(1),
		},
		map[string]interface{}{
			"case":     []string{"aa", "bb", "cc"},
			"expected": int64(-1),
		},
	}

	for _, cs := range cases {
		td := cs["case"].([]string)
		ex := cs["expected"].(int64)

		res := utils.StrSliceIndexOf(td, "b")

		if ex != res {
			t.Fatalf("TestStrSliceIndexOf case fail : %v", res)
		}
	}
}

func TestGUIID2IntString(t *testing.T) {
	cases := []map[string]string{
		map[string]string{
			"case":     "3b2da085-8881-4029-9a3d-6d33caf870d0",
			"expected": "553-217-207-305-861",
		},
	}

	for _, cs := range cases {
		res := utils.GUIID2IntString(cs["case"])
		if strings.Join(res, "-") != cs["expected"] {
			t.Fatalf("TestGUIID2IntString fail")
		}
	}

}

func TestEncodeBase64TrimTail(t *testing.T) {
	cases := []map[string]string{
		map[string]string{
			"case":     "1",
			"expected": "MQ",
		},
		map[string]string{
			"case":     "111",
			"expected": "MTEx",
		},
	}

	for _, cs := range cases {
		res := utils.EncodeBase64TrimTail(cs["case"])
		if res != cs["expected"] {
			t.Fatalf("TestEncodeBase64TrimTail fail")
		}
	}
}

func TestDecodeBase64NoTail(t *testing.T) {
	cases := []map[string]string{
		map[string]string{
			"case":     "MQ",
			"expected": "1",
		},
		map[string]string{
			"case":     "MTEx",
			"expected": "111",
		},
	}

	for _, cs := range cases {
		res := utils.DecodeBase64NoTail(cs["case"])
		if res != cs["expected"] {
			t.Fatalf("TestDecodeBase64NoTail fail : %s", cs["case"])
		}
	}
}

func TestGetFiveSeconds(t *testing.T) {
	cases := []map[string]string{
		map[string]string{
			"case":     "2018-10-07 13:21:40",
			"expected": "20181007132140",
		},
		map[string]string{
			"case":     "2018-10-07 13:21:42",
			"expected": "20181007132140",
		},
		map[string]string{
			"case":     "2018-10-07 13:21:45",
			"expected": "20181007132145",
		},
		map[string]string{
			"case":     "2018-10-07 13:21:48",
			"expected": "20181007132145",
		},
	}

	for _, cs := range cases {
		dt, _ := time.Parse("2006-01-02 15:04:05", cs["case"])
		res := utils.GetFiveSeconds(dt)
		if res != cs["expected"] {
			t.Fatalf("TestGetFiveSeconds fail : %s", cs["case"])
		}
	}
}