// Copyright 2015 The Vanadium 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 buildinfo

import (
	"reflect"
	"testing"
	"time"

	"v.io/jiri/project"
	"v.io/x/lib/metadata"
)

var (
	allTests = []struct {
		BuildInfo T
		MetaData  *metadata.T
	}{
		{
			BuildInfo: T{
				Manifest: project.Manifest{SnapshotPath: "foo"},
				Platform: "platform",
				Pristine: true,
				Time:     time.Date(2015, time.May, 3, 3, 15, 0, 0, time.UTC),
				User:     "user",
			},
			MetaData: metadata.FromMap(map[string]string{
				"build.Manifest": `<manifest snapshotpath="foo">
</manifest>`,
				"build.Platform": "platform",
				"build.Pristine": "true",
				"build.Time":     "2015-05-03T03:15:00Z",
				"build.User":     "user",
			}),
		},
		{
			BuildInfo: T{
				Manifest: project.Manifest{SnapshotPath: "bar"},
				Platform: "amd64unknown-linux-unknown",
				Pristine: false,
				Time:     time.Unix(0, 0).UTC(),
				User:     "Vanadium Vamoose",
			},
			MetaData: metadata.FromMap(map[string]string{
				"build.Manifest": `<manifest snapshotpath="bar">
</manifest>`,
				"build.Platform": "amd64unknown-linux-unknown",
				"build.Pristine": "false",
				"build.Time":     "1970-01-01T00:00:00Z",
				"build.User":     "Vanadium Vamoose",
			}),
		},
	}
)

func TestToMetaData(t *testing.T) {
	for _, test := range allTests {
		md, err := test.BuildInfo.ToMetaData()
		if err != nil {
			t.Errorf("%#v ToMetaData failed: %v", test.BuildInfo, err)
		}
		if got, want := md, test.MetaData; !reflect.DeepEqual(got, want) {
			t.Errorf("got %#v, want %#v", got, want)
		}
	}
}

func TestFromMetaData(t *testing.T) {
	for _, test := range allTests {
		bi, err := FromMetaData(test.MetaData)
		if err != nil {
			t.Errorf("%#v FromMetaData failed: %v", test.MetaData, err)
		}
		if got, want := bi, test.BuildInfo; !reflect.DeepEqual(got, want) {
			t.Errorf("got %#v, want %#v", got, want)
		}
	}
}
