package cfg

import (
	"sort"
	"strings"
	"testing"
)

func TestSortLocks(t *testing.T) {
	c, err := ConfigFromYaml([]byte(yml))
	if err != nil {
		t.Error("ConfigFromYaml failed to parse yaml for TestSortDependencies")
	}

	ls := make(Locks, len(c.Imports))
	for i := 0; i < len(c.Imports); i++ {
		ls[i] = &Lock{
			Name:    c.Imports[i].Name,
			Version: c.Imports[i].Reference,
		}
	}

	if ls[2].Name != "github.com/Masterminds/structable" {
		t.Error("Initial dependencies are out of order prior to sort")
	}

	sort.Sort(ls)

	if ls[0].Name != "github.com/kylelemons/go-gypsy" ||
		ls[1].Name != "github.com/Masterminds/convert" ||
		ls[2].Name != "github.com/Masterminds/cookoo" ||
		ls[3].Name != "github.com/Masterminds/structable" {
		t.Error("Sorting of dependencies failed")
	}
}

const inputSubpkgYaml = `
imports:
- name: github.com/gogo/protobuf
  version: 82d16f734d6d871204a3feb1a73cb220cc92574c
  subpackages:
  - plugin/equal
  - sortkeys
  - plugin/face
  - plugin/gostring
  - vanity
  - plugin/grpc
  - plugin/marshalto
  - plugin/populate
  - plugin/oneofcheck
  - plugin/size
  - plugin/stringer
  - plugin/defaultcheck
  - plugin/embedcheck
  - plugin/description
  - plugin/enumstringer
  - gogoproto
  - plugin/testgen
  - plugin/union
  - plugin/unmarshal
  - protoc-gen-gogo/generator
  - protoc-gen-gogo/plugin
  - vanity/command
  - protoc-gen-gogo/descriptor
  - proto
`
const expectSubpkgYaml = `
imports:
- name: github.com/gogo/protobuf
  version: 82d16f734d6d871204a3feb1a73cb220cc92574c
  subpackages:
  - gogoproto
  - plugin/defaultcheck
  - plugin/description
  - plugin/embedcheck
  - plugin/enumstringer
  - plugin/equal
  - plugin/face
  - plugin/gostring
  - plugin/grpc
  - plugin/marshalto
  - plugin/oneofcheck
  - plugin/populate
  - plugin/size
  - plugin/stringer
  - plugin/testgen
  - plugin/union
  - plugin/unmarshal
  - proto
  - protoc-gen-gogo/descriptor
  - protoc-gen-gogo/generator
  - protoc-gen-gogo/plugin
  - sortkeys
  - vanity
  - vanity/command
`

func TestSortSubpackages(t *testing.T) {
	lf, err := LockfileFromYaml([]byte(inputSubpkgYaml))
	if err != nil {
		t.Fatal(err)
	}

	out, err := lf.Marshal()
	if err != nil {
		t.Fatal(err)
	}

	if !strings.Contains(string(out), expectSubpkgYaml) {
		t.Errorf("Expected %q\nto contain\n%q")
	}
}
