package workspace

import (
	"context"
	"os"
	"testing"

	"github.com/google/go-cmp/cmp"
)

func TestCheckNixPath(t *testing.T) {
	for _, te := range []struct {
		in   string
		okay bool
	}{
		{"foo", true},
		{"foo.bar.baz", true},
		{"foo.bar.baz.", false},
		{"foo.bar.baz..", false},
		{".foo.bar.baz", false},
		{"..foo.bar.baz", false},
		{"foo..bar.baz", false},
		{".", false},
		{"", false},

		{"ops.machines.\"test.example.com\".config", true},
		{"ops.machines.\"test.example.com.config", false},
		{"ops.machines.\"test.example.com\"bar.config", false},
		{"ops.machines.bar\"test.example.com\".config", false},
		{"\"test.example.com\"bar", false},
		{"test.example.com\"", false},

		{"foo--.__bar.b-a-z---", true},
		{"foo.0bar", false},
		{"foo.-bar", false},

		{"test\\.test", false},
		{"test test", false},
	} {
		err := checkNixPath(te.in)
		if te.okay && err != nil {
			t.Errorf("%q: expected okay, got %v", te.in, err)
		}
		if !te.okay && err == nil {
			t.Errorf("%q: expected error", te.in)
		}
	}
}

// TestEvalHscloud nix exercises EvalHscloudNix against
// //go/workspace/exports.nix.
func TestEvalHscloudNix(t *testing.T) {
	if _, err := os.Stat("/nix/store"); err != nil {
		t.Skip("no /nix/store")
	}
	ctx, ctxC := context.WithCancel(context.Background())
	defer ctxC()

	{
		var got []string
		if err := EvalHscloudNix(ctx, &got, "go.workspace.exports.someArray"); err != nil {
			t.Errorf("Accessing someArray failed: %v", err)
		} else {
			want := []string{"hello", "there"}
			if diff := cmp.Diff(want, got); diff != "" {
				t.Errorf("someArray diff:\n%s", diff)
			}
		}
	}

	{
		type barS struct {
			Baz int64 `json:"baz"`
		}
		type gotS struct {
			Foo string `json:"foo"`
			Bar barS   `json:"bar"`
		}
		var got gotS
		if err := EvalHscloudNix(ctx, &got, "go.workspace.exports.someAttrset"); err != nil {
			t.Errorf("Accessing someAttrset failed: %v", err)
		} else {
			want := gotS{
				Foo: "foo",
				Bar: barS{
					Baz: 42,
				},
			}
			if diff := cmp.Diff(want, got); diff != "" {
				t.Errorf("someAttrset diff:\n%s", diff)
			}
		}
	}
}
