// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package history

import (
	"sort"
	"testing"
	"time"
)

func dateTime(d Date) time.Time {
	return time.Date(d.Year, time.Month(d.Month), d.Day, 0, 0, 0, 0, time.UTC)
}

func TestReleases(t *testing.T) {
	seen := make(map[Version]bool)
	lastMinor := make(map[Version]int)
	var last time.Time
	for _, r := range Releases {
		if seen[r.Version] {
			t.Errorf("version %v duplicated", r.Version)
			continue
		}
		seen[r.Version] = true
		rt := dateTime(r.Date)
		if !last.IsZero() && rt.After(last) {
			t.Errorf("version %v out of order: %v vs %v", r.Version, r.Date, last.Format("2006-01-02"))
		}
		last = rt
		major := r.Version
		major.Z = 0
		if z, ok := lastMinor[major]; ok && r.Version.Z != z-1 {
			old := major
			old.Z = z
			t.Errorf("jumped from %v to %v", old, r.Version)
		}
		lastMinor[major] = r.Version.Z
		if r.Security != nil {
			if p := r.Security.Packages; !sort.StringsAreSorted(p) {
				t.Errorf("version %v security fix packages out of order: %v vs %v", r.Version, p, sorted(p))
			}
		}
		if r.Bug != nil {
			if p := r.Bug.Packages; !sort.StringsAreSorted(p) {
				t.Errorf("version %v bug fix packages out of order: %v vs %v", r.Version, p, sorted(p))
			}
		}
	}
}

func sorted(s []string) []string {
	s = append([]string(nil), s...)
	sort.Strings(s)
	return s
}
