package api

import (
	"bytes"
	"encoding/json"
	"fmt"
	"mime/multipart"
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/pingcap/dbaas/central/config"
	"github.com/stretchr/testify/require"
)

func TestUploadFile(t *testing.T) {
	assert := require.New(t)
	config.Global().ServerConfig.EnableCDNBucket = false
	config.Global().ServerConfig.BackendDNS = "backend_domain"
	w := httptest.NewRecorder()
	buffer := &bytes.Buffer{}
	body := multipart.NewWriter(buffer)
	writer, err := body.CreateFormFile("file", "test.pdf")
	assert.NoError(err)
	_, err = writer.Write([]byte("abc"))
	assert.NoError(err)
	err = body.Close()
	assert.NoError(err)
	fmt.Printf("%s", buffer)
	req, _ := http.NewRequest("POST", "/api/v1/admin/upload", buffer)
	contentKey := "Content-Type"
	contentType := body.FormDataContentType()
	req.Header.Set(contentKey, contentType)
	router.ServeHTTP(w, req)
	assert.Equalf(200, w.Code, w.Body.String())
	result := &UploadFileResp{}
	err = json.Unmarshal(w.Body.Bytes(), result)
	assert.NoError(err)
	assert.Regexp(`https://backend_domain/api/v1/admin/uploaded/.*\.pdf`, result.FileLink)
	assert.Regexp(`.*\.pdf`, result.FilePath)
}

func TestDownloadFile(t *testing.T) {
	assert := require.New(t)
	config.Global().ServerConfig.EnableCDNBucket = false
	w := httptest.NewRecorder()

	req, _ := http.NewRequest("GET", "/api/v1/admin/uploaded/path/mock.pdf", nil)
	router.ServeHTTP(w, req)
	assert.Equalf(200, w.Code, w.Body.String())
	assert.Equal(w.Body.String(), "")
	assert.EqualValues(w.Result().ContentLength, 0)
}
