package main

import (
	"os"
	"path"
	"path/filepath"
	"regexp"
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

func TestVulnerabilityDataStream(t *testing.T) {
	if os.Getenv("NETWORK_TEST") == "" {
		t.Skip("set environment variable NETWORK_TEST=1 to run")
	}

	runAppCheckErr(t, []string{"vulnerability-data-stream"}, "No directory provided")

	vulnPath := t.TempDir()
	expected := `[-] Downloading CPE database... Done
[-] Downloading CVE data streams... Done
[+] Data streams successfully downloaded!
`
	assert.Equal(t,
		expected,
		runAppForTest(t, []string{"vulnerability-data-stream", "--dir", vulnPath}),
	)
	assert.FileExists(t, path.Join(vulnPath, "cpe.sqlite"))

	var files []string
	require.NoError(t, filepath.Walk(vulnPath, func(path string, info os.FileInfo, err error) error {
		if match, err := regexp.MatchString("nvdcve.*\\.gz$", path); !match || err != nil {
			return nil
		}
		files = append(files, path)
		return nil
	}))
	assert.Greater(t, len(files), 0)
}
