package cfg

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

func TestSortLocks(t *testing.T) {
	c, legacy, 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] = &lLock1{
			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", string(out), expectSubpkgYaml)
	}
}
