// 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 frontend

import (
	"fmt"
	"testing"

	"github.com/google/go-cmp/cmp"
	"golang.org/x/vulndb/osv"
)

func TestVulns(t *testing.T) {
	e := osv.Entry{
		Package: osv.Package{Name: "bad.com"},
		Details: "bad",
		Affects: osv.Affects{
			Ranges: []osv.AffectsRange{{
				Type:  osv.TypeSemver,
				Fixed: "1.2.3",
			}},
		},
	}
	get := func(modulePath string) ([]*osv.Entry, error) {
		switch modulePath {
		case "good.com":
			return nil, nil
		case "bad.com":
			return []*osv.Entry{&e}, nil
		default:
			return nil, fmt.Errorf("unknown module %q", modulePath)
		}
	}

	got, err := Vulns("good.com", "v1.0.0", "good.com", get)
	if err != nil {
		t.Fatal(err)
	}
	if got != nil {
		t.Errorf("got %v, want nil", got)
	}
	got, err = Vulns("bad.com", "v1.0.0", "bad.com", get)
	if err != nil {
		t.Fatal(err)
	}
	want := []Vuln{{
		Details:      "bad",
		FixedVersion: "v1.2.3",
	}}
	if diff := cmp.Diff(want, got); diff != "" {
		t.Errorf("mismatch (-want, +got):\n%s", diff)
	}
}
