package api

import (
	"net/http"
	"testing"
)

func TestSignIn(t *testing.T) {
	tapi := newTestAPI(t)
	defer tapi.close()

	var member struct {
		Member
		Password string `json:"password"`
	}
	member.Num = 10
	member.Name = "foo"
	member.Role = "admin"
	member.Password = "password"
	resp := tapi.do("POST", "/member", member, nil)
	if resp.StatusCode != http.StatusCreated {
		t.Fatal("Can't create member:", resp.Status)
	}

	tapi.token = ""
	resp = tapi.do("GET", "/member", nil, nil)
	if resp.StatusCode != http.StatusUnauthorized {
		t.Error("Got members without auth")
	}

	var respMember struct {
		Token  string `json:"token"`
		Member Member `json:"member"`
	}
	jsonAuth := creds{
		Name:     member.Name,
		Password: member.Password,
	}
	resp = tapi.do("POST", "/signin", jsonAuth, &respMember)
	if resp.StatusCode != http.StatusOK {
		t.Fatal("Can't sign in:", resp.Status)
	}
	if respMember.Member.Name != member.Name {
		t.Fatal("Unexpected member:", respMember)
	}
	tapi.token = respMember.Token
	resp = tapi.do("GET", "/member", nil, nil)
	if resp.StatusCode != http.StatusOK {
		t.Fatal("Can't get members:", resp.Status)
	}
}