package main

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

func TestBrowseHandler(t *testing.T) {
	req, err := http.NewRequest("GET", "/files/browse", nil)
	if err != nil {
		t.Fatal(err)
	}
	q := req.URL.Query()
	q.Add("path", ".")
	req.URL.RawQuery = q.Encode()

	rr := httptest.NewRecorder()
	handler := http.HandlerFunc(browseHandler)
	handler.ServeHTTP(rr, req)
	if status := rr.Code; status != http.StatusOK {
		t.Errorf("handler returned wrong status code: got %v want %v",
			status, http.StatusOK)
	}
}

func TestReadHandlerWIthVakidOffset(t *testing.T) {
	req, err := http.NewRequest("GET", "/files/read", nil)
	if err != nil {
		t.Fatal(err)
	}
	q := req.URL.Query()
	q.Add("path", "/Users/revchandra/Desktop/go/dce.err")
	q.Add("offset", "0")
	q.Add("length", "1000")
	q.Add("jsonp", "jQuery17107124409226948478_1614562818140&_=1614562818159")
	req.URL.RawQuery = q.Encode()

	rr := httptest.NewRecorder()
	handler := http.HandlerFunc(readHandler)
	handler.ServeHTTP(rr, req)
	if status := rr.Code; status != http.StatusOK {
		t.Errorf("handler returned wrong status code: got %v want %v",
			status, http.StatusOK)
	}
}

func TestReadHandlerWithOffsetOverflow(t *testing.T) {
	req, err := http.NewRequest("GET", "/files/read", nil)
	if err != nil {
		t.Fatal(err)
	}
	q := req.URL.Query()
	q.Add("path", ".")
	q.Add("offset", "4174")
	q.Add("length", "1000")
	q.Add("jsonp", "jQuery17107124409226948478_1614562818140&_=1614562818159")
	req.URL.RawQuery = q.Encode()

	rr := httptest.NewRecorder()
	handler := http.HandlerFunc(readHandler)
	handler.ServeHTTP(rr, req)
	if status := rr.Code; status != http.StatusOK {
		t.Errorf("handler returned wrong status code: got %v want %v",
			status, http.StatusOK)
	}

}

func TestReadHandlerWithInvalidOffset(t *testing.T) {
	req, err := http.NewRequest("GET", "/files/read", nil)
	if err != nil {
		t.Fatal(err)
	}
	q := req.URL.Query()
	q.Add("path", ".")
	q.Add("offset", "-1")
	q.Add("length", "-1")
	q.Add("jsonp", "jQuery17107124409226948478_1614562818140&_=1614562818159")
	req.URL.RawQuery = q.Encode()

	rr := httptest.NewRecorder()
	handler := http.HandlerFunc(readHandler)
	handler.ServeHTTP(rr, req)
	if status := rr.Code; status != http.StatusOK {
		t.Errorf("handler returned wrong status code: got %v want %v",
			status, http.StatusOK)
	}

}
func TestDownloadHandler(t *testing.T) {
	req, err := http.NewRequest("GET", "/files/download", nil)
	if err != nil {
		t.Fatal(err)
	}
	q := req.URL.Query()
	q.Add("path", ".")

	req.URL.RawQuery = q.Encode()

	rr := httptest.NewRecorder()
	handler := http.HandlerFunc(downloadhandler)
	handler.ServeHTTP(rr, req)
	if status := rr.Code; status != http.StatusOK {
		t.Errorf("handler returned wrong status code: got %v want %v",
			status, http.StatusOK)
	}
}

func TestDownloadHandlerWithInvalidPath(t *testing.T) {
	req, err := http.NewRequest("GET", "/files/download", nil)
	if err != nil {
		t.Fatal(err)
	}
	q := req.URL.Query()
	q.Add("path", ".")

	req.URL.RawQuery = q.Encode()

	rr := httptest.NewRecorder()
	handler := http.HandlerFunc(downloadhandler)
	handler.ServeHTTP(rr, req)
	if status := rr.Code; status != http.StatusOK {
		t.Errorf("handler returned wrong status code: got %v want %v",
			status, http.StatusOK)
	}
}