package persistence

import (
	"strings"
	"testing"
)

type connectedAppRuntimeVisibilityPolicyStub map[string]bool

func (p connectedAppRuntimeVisibilityPolicyStub) AllowsConnectedApp(ownerPack, _ string) bool {
	return p[strings.ToLower(strings.TrimSpace(ownerPack))]
}

type exactConnectedAppRuntimeVisibilityPolicyStub map[string]bool

func (p exactConnectedAppRuntimeVisibilityPolicyStub) AllowsConnectedApp(ownerPack, connectedAppID string) bool {
	return p[strings.ToLower(strings.TrimSpace(ownerPack))+"\x00"+strings.TrimSpace(connectedAppID)]
}

func TestSystemRepositoryConnectedAppVisibilityUsesExactClientIdentity(t *testing.T) {
	repo := NewSystemRepository(nil)
	repo.SetConnectedAppRuntimeVisibilityPolicy(exactConnectedAppRuntimeVisibilityPolicyStub{
		"crm-pack\x00client-a": true,
	})
	ownerPack := "CRM-Pack"
	if !repo.connectedAppRuntimeVisible(&ownerPack, "client-a") {
		t.Fatal("exact active Connected App was hidden")
	}
	if repo.connectedAppRuntimeVisible(&ownerPack, "client-b") {
		t.Fatal("a different Connected App from the same owner pack was visible")
	}
}
