package sheets

import (
	"reflect"
	"testing"

	"github.com/davecgh/go-spew/spew"

	"github.com/cheat/cheat/internal/sheet"
)

// TestConsolidate asserts that cheatsheets are properly consolidated
func TestConsolidate(t *testing.T) {

	// mock cheatsheets available on multiple cheatpaths
	cheatpaths := []map[string]sheet.Sheet{

		// mock community cheatsheets
		map[string]sheet.Sheet{
			"foo": sheet.Sheet{Title: "foo", Path: "community/foo"},
			"bar": sheet.Sheet{Title: "bar", Path: "community/bar"},
		},

		// mock local cheatsheets
		map[string]sheet.Sheet{
			"bar": sheet.Sheet{Title: "bar", Path: "local/bar"},
			"baz": sheet.Sheet{Title: "baz", Path: "local/baz"},
		},
	}

	// consolidate the cheatsheets
	consolidated := Consolidate(cheatpaths)

	// specify the expected output
	want := map[string]sheet.Sheet{
		"foo": sheet.Sheet{Title: "foo", Path: "community/foo"},
		"bar": sheet.Sheet{Title: "bar", Path: "local/bar"},
		"baz": sheet.Sheet{Title: "baz", Path: "local/baz"},
	}

	// assert that the cheatsheets properly consolidated
	if !reflect.DeepEqual(consolidated, want) {
		t.Errorf(
			"failed to consolidate cheatpaths: want:\n%s, got:\n%s",
			spew.Sdump(want),
			spew.Sdump(consolidated),
		)
	}

}