package dashboard

import (
	"testing"
)

func TestGetMonthsFromTimestamp(t *testing.T) {
	tests := []struct {
		name    string
		startTs int64
		endTs   int64
		result  []string
	}{
		{
			name:    "same month",
			startTs: 1614556800,
			endTs:   1614556900,
			result:  []string{"2021/3"},
		},
		{
			name:    "cross two months",
			startTs: 1691501518,
			endTs:   1694093518,
			result:  []string{"2023/8", "2023/9"},
		},
	}
	for _, test := range tests {
		t.Run(test.name, func(t *testing.T) {
			result := getMonthsFromTimestamp(test.startTs, test.endTs, "2006/1")
			if len(result) != len(test.result) {
				t.Errorf("result length error, expect: %d, actual: %d", len(test.result), len(result))
			}
			for i, v := range result {
				if v != test.result[i] {
					t.Errorf("result error, expect: %s, actual: %s", test.result[i], v)
				}
			}
		})
	}
}

func TestGetBeginAndEndTsFromMonth(t *testing.T) {
	tests := []struct {
		name   string
		month  string
		result struct {
			beginTs int64
			endTs   int64
		}
	}{
		{
			name:  "2021/3",
			month: "2021/3",
			result: struct {
				beginTs int64
				endTs   int64
			}{1614556800, 1617235199},
		},
		{
			name:  "2024/8",
			month: "2024/8",
			result: struct {
				beginTs int64
				endTs   int64
			}{1722470400, 1725148799},
		},
	}
	for _, test := range tests {
		t.Run(test.name, func(t *testing.T) {
			beginTs, endTs, err := getBeginAndEndTsFromMonth(test.month, "2006/1")
			if err != nil {
				t.Errorf("error: %v", err)
				return
			}
			if beginTs != test.result.beginTs {
				t.Errorf("beginTs error, expect: %d, actual: %d", test.result.beginTs, beginTs)
			}
			if endTs != test.result.endTs {
				t.Errorf("endTs error, expect: %d, actual: %d", test.result.endTs, endTs)
			}
		})
	}
}
