package state

import (
	"path"
	"testing"

	"github.com/stretchr/testify/require"
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/status"
)

var grpcError = status.Errorf(codes.NotFound, "not found")

func TestVolumes(t *testing.T) {
	var volumeName = "foo"
	var volumePath = "/bar"
	tmp := t.TempDir()
	statefileName := path.Join(tmp, "state.json")

	s, err := New(statefileName)
	require.NoError(t, err, "construct state")
	require.Empty(t, s.GetVolumes(), "initial volumes")

	_, err = s.GetVolumeByName(volumeName)
	require.Equal(t, codes.NotFound, status.Convert(err).Code(), "GetVolumeByName of non-existent volume")
	require.Contains(t, status.Convert(err).Message(), volumeName)

	err = s.UpdateVolume(Volume{Name: volumeName, Path: volumePath})
	require.NoError(t, err, "add volume")

	s, err = New(statefileName)
	require.NoError(t, err, "reconstruct state")
	_, err = s.GetVolumeByName(volumeName)
	require.NoError(t, err, "get existing volume by Name")

	err = s.DeleteVolume(volumeName)
	require.NoError(t, err, "delete existing volume")

	err = s.DeleteVolume(volumeName)
	require.NoError(t, err, "delete non-existent volume")

	require.Empty(t, s.GetVolumes(), "final volumes")
}
