package main

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

// kuruluIstegi: verilen token ile /eklenti/kurulu isleyicisine GET atar; kod ve govde dondurur.
func kuruluIstegi(t *testing.T, token string) (int, string) {
	t.Helper()
	h := korumali(eklentiKuruluHandler)
	req := httptest.NewRequest(http.MethodGet, "/eklenti/kurulu", nil)
	req.Header.Set("X-Bridge-Token", token)
	rec := httptest.NewRecorder()
	h(rec, req)
	return rec.Code, rec.Body.String()
}

// TestEklentiKuruluProfilIzole: /eklenti/kurulu her hesap icin yalnizca o hesabin kurulu eklentilerini
// dondurur. Bir hesabin eklentisi diger hesabin listesinde gorunmez.
func TestEklentiKuruluProfilIzole(t *testing.T) {
	kuruluSifirla(t)
	profilTokenKur(t, "ahmet", "t-ahmet")
	profilTokenKur(t, "ayse", "t-ayse")
	etkinTestKur(t, "ahmet", "ayse")

	if err := kuruluEkleProfil("ahmet", kuruluEklenti{Anahtar: "everything", Surum: "1.0.0", Etkin: true}); err != nil {
		t.Fatal(err)
	}
	if err := kuruluEkleProfil("ayse", kuruluEklenti{Anahtar: "catiaAc", Surum: "2.0.0", Etkin: true}); err != nil {
		t.Fatal(err)
	}

	c, govde := kuruluIstegi(t, "t-ahmet")
	if c != http.StatusOK || !strings.Contains(govde, "everything") || strings.Contains(govde, "catiaAc") {
		t.Errorf("ahmet listesi yanlis: kod %d govde %s", c, govde)
	}
	c, govde = kuruluIstegi(t, "t-ayse")
	if c != http.StatusOK || !strings.Contains(govde, "catiaAc") || strings.Contains(govde, "everything") {
		t.Errorf("ayse listesi yanlis: kod %d govde %s", c, govde)
	}
}
