package main

import (
	"testing"
	"time"
)

// TestYetkiProfilIzolasyonu: site yetkisi yalnizca verildigi profilde gecerlidir; bir profilden
// geri almak diger profilin yetkisini silmez.
func TestYetkiProfilIzolasyonu(t *testing.T) {
	t.Setenv("APPDATA", t.TempDir())
	yetkiBellekSifirla()
	for _, p := range []string{"ahmet", "ayse"} {
		if _, err := profilKlasoru(p); err != nil {
			t.Fatal(err)
		}
	}

	if err := yetkiVerProfil("ahmet", "everything", "site-1", time.Hour); err != nil {
		t.Fatal(err)
	}
	if err := yetkiVerProfil("ayse", "everything", "site-1", time.Hour); err != nil {
		t.Fatal(err)
	}
	if yetkiGecerliMiProfil("ahmet", "everything", "site-2") {
		t.Errorf("baska siteye verilmis yetki gecerli olmamali")
	}

	if err := yetkiGeriAlProfil("ahmet", "everything", ""); err != nil {
		t.Fatal(err)
	}
	if yetkiGecerliMiProfil("ahmet", "everything", "site-1") {
		t.Errorf("ahmet'in yetkisi geri alindi, gecerli olmamali")
	}
	if !yetkiGecerliMiProfil("ayse", "everything", "site-1") {
		t.Errorf("ayse'nin yetkisi ahmet'in geri alisindan etkilenmemeli")
	}
}

// TestIkiHesapAyniAnda: hesaplar ayni anda etkin; her hesabin yetkisi yalnizca kendi profilinde gecerlidir.
func TestIkiHesapAyniAnda(t *testing.T) {
	t.Setenv("APPDATA", t.TempDir())
	yetkiBellekSifirla()
	for _, a := range []string{"ahmet", "ayse"} {
		if _, err := profilKlasoru(a); err != nil {
			t.Fatal(err)
		}
	}
	if err := yetkiVerProfil("ahmet", "everything", "site-1", time.Hour); err != nil {
		t.Fatal(err)
	}
	if !yetkiGecerliMiProfil("ahmet", "everything", "site-1") {
		t.Errorf("ahmet kendi yetkisini kullanabilmeli")
	}
	if yetkiGecerliMiProfil("ayse", "everything", "site-1") {
		t.Errorf("ayse'de ahmet'in yetkisi gecerli olmamali")
	}
	if err := yetkiVerProfil("ayse", "everything", "site-2", time.Hour); err != nil {
		t.Fatal(err)
	}
	if !yetkiGecerliMiProfil("ayse", "everything", "site-2") {
		t.Errorf("ayse kendi yetkisini kullanabilmeli")
	}
	if !yetkiGecerliMiProfil("ahmet", "everything", "site-1") {
		t.Errorf("ayse'nin yetki vermesi ahmet'in yetkisini degistirmemeli")
	}
	if yetkiGecerliMiProfil("ahmet", "everything", "site-2") {
		t.Errorf("ayse'nin site-2 yetkisi ahmet'te gecmemeli")
	}
}
