package rbac

import (
	"testing"

	"github.com/onsi/gomega"
)

func TestRequest(t *testing.T) {
	resourceMap := map[string]string{
		`get:/clinic/api/v1/orgs/(\d+)/clusters`:     "orgs/{org_id}/cluster/read",
		`get:/api/v1/orgs/(\d+)/clusters/\d+/events`: "orgs/{org_id}/cluster/read",
		`get:/fault/api/orgs/(\d+)/clusters/\d+`:     "orgs/{org_id}/fault-drill-feature/read",
		`get:/myapp`:                                 "orgs/1/my_user_profile/get",
	}

	g := gomega.NewWithT(t)
	m, err := validateAndFormatResourceMap(resourceMap)
	g.Expect(err).To(gomega.Succeed())

	rUri, err := NewResourceUri(m)
	g.Expect(err).To(gomega.Succeed())

	uri, err := rUri.Get("/clinic/api/v1/orgs/123/clusters", "get")
	g.Expect(err).To(gomega.Succeed())

	g.Expect(uri).To(gomega.Equal("orgs/123/cluster/read"))

	uri, err = rUri.Get("/clinic/api/v1/orgs/123/users", "get")
	g.Expect(err).To(gomega.Succeed())
	g.Expect(uri).To(gomega.Equal(""))

	uri, err = rUri.Get("/api/v1/orgs/123/clusters/456/events", "get")
	g.Expect(err).To(gomega.Succeed())
	g.Expect(uri).To(gomega.Equal("orgs/123/cluster/read"))

	uri, err = rUri.Get("/fault/api/orgs/123/clusters/456", "get")
	g.Expect(err).To(gomega.Succeed())
	g.Expect(uri).To(gomega.Equal("orgs/123/fault-drill-feature/read"))

	resolved, err := rUri.GetResolved("/api/v1/orgs/123/clusters/456/events", "get")
	g.Expect(err).To(gomega.Succeed())
	g.Expect(resolved.reqUri).To(gomega.Equal("orgs/123/cluster/read"))
	g.Expect(resolved.resourceUri).To(gomega.Equal("orgs/{org_id}/cluster/read"))
	g.Expect(resolved.params).To(gomega.Equal(map[string]string{
		"org_id": "123",
	}))
}
