package main

import (
	"net/http"
	"net/http/httptest"
	"strings"
	"testing"
	"time"
)

// izinKaldirIstegi: verilen token ile /izin-kaldir isleyicisine POST atar; kodu dondurur.
func izinKaldirIstegi(t *testing.T, token, anahtar string) int {
	t.Helper()
	h := korumali(izinKaldirHandler)
	req := httptest.NewRequest(http.MethodPost, "/izin-kaldir", strings.NewReader(`{"anahtar":"`+anahtar+`"}`))
	req.Header.Set("X-Bridge-Token", token)
	req.Header.Set("Content-Type", "application/json")
	rec := httptest.NewRecorder()
	h(rec, req)
	return rec.Code
}

// TestIzinKaldirProfilIzole: /izin-kaldir yalnizca isteğin kendi hesabindaki site yetkisini geri alir.
// Diger etkin hesabin ayni site icin yetkisi etkilenmez.
func TestIzinKaldirProfilIzole(t *testing.T) {
	t.Setenv("APPDATA", t.TempDir())
	profilTokenKur(t, "ahmet", "t-ahmet")
	profilTokenKur(t, "ayse", "t-ayse")
	etkinTestKur(t, "ahmet", "ayse")

	for _, p := range []string{"ahmet", "ayse"} {
		if err := izinleriKaydetProfil(p, Izinler{EverythingAra: true}); err != nil {
			t.Fatal(err)
		}
	}
	siteAhmet := tokenOzeti("t-ahmet")
	siteAyse := tokenOzeti("t-ayse")
	if err := yetkiVerProfil("ahmet", "everythingAra", siteAhmet, time.Hour); err != nil {
		t.Fatal(err)
	}
	if err := yetkiVerProfil("ayse", "everythingAra", siteAyse, time.Hour); err != nil {
		t.Fatal(err)
	}

	if c := izinKaldirIstegi(t, "t-ayse", "everythingAra"); c != http.StatusOK {
		t.Fatalf("ayse /izin-kaldir 200 bekleniyordu, %d", c)
	}
	if yetkiGecerliMiProfil("ayse", "everythingAra", siteAyse) {
		t.Errorf("ayse'nin yetkisi geri alinmaliydi")
	}
	if !yetkiGecerliMiProfil("ahmet", "everythingAra", siteAhmet) {
		t.Errorf("ahmet'in yetkisi etkilenmemeliydi")
	}
}
