package liveshare

import (
	"context"
	"testing"
)

func TestBadOptions(t *testing.T) {
	goodOptions := Options{
		SessionID:     "sess-id",
		SessionToken:  "sess-token",
		RelaySAS:      "sas",
		RelayEndpoint: "endpoint",
	}

	opts := goodOptions
	opts.SessionID = ""
	checkBadOptions(t, opts)

	opts = goodOptions
	opts.SessionToken = ""
	checkBadOptions(t, opts)

	opts = goodOptions
	opts.RelaySAS = ""
	checkBadOptions(t, opts)

	opts = goodOptions
	opts.RelayEndpoint = ""
	checkBadOptions(t, opts)

	opts = Options{}
	checkBadOptions(t, opts)
}

func checkBadOptions(t *testing.T, opts Options) {
	if _, err := Connect(context.Background(), opts); err == nil {
		t.Errorf("Connect(%+v): no error", opts)
	}
}

func TestOptionsURI(t *testing.T) {
	opts := Options{
		ClientName:    "liveshare-client",
		SessionID:     "sess-id",
		SessionToken:  "sess-token",
		RelaySAS:      "sas",
		RelayEndpoint: "sb://endpoint/.net/liveshare",
	}
	uri, err := opts.uri("connect")
	if err != nil {
		t.Fatal(err)
	}
	if uri != "wss://endpoint/.net:443/$hc/liveshare?sb-hc-action=connect&sb-hc-token=sas" {
		t.Errorf("uri is not correct, got: '%v'", uri)
	}
}
