package routes_test import ( "bytes" "context" "encoding/json" "gitea.deepak.science/deepak/gogmagog/models" "gitea.deepak.science/deepak/gogmagog/routes" "github.com/stretchr/testify/assert" "net/http" "net/http/httptest" "strings" "testing" ) func TestPostSinglePlan(t *testing.T) { // set up assert := assert.New(t) m := getEmptyModel() router := routes.NewCurrentPlanRouter(m) plan := &models.Plan{} m.AddPlan(plan, 3) pp := &models.CurrentPlan{PlanID: 1} data, _ := json.Marshal(pp) req, _ := http.NewRequestWithContext(sampleContext, "POST", "/", bytes.NewBuffer(data)) req.Header.Set("Content-Type", "application/json") rr := httptest.NewRecorder() // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusCreated, status) } func TestPostCurrentPlanUnauth(t *testing.T) { // set up assert := assert.New(t) m := getEmptyModel() plan := &models.Plan{} m.AddPlan(plan, 3) pp := &models.CurrentPlan{PlanID: 1} data, _ := json.Marshal(pp) req, _ := http.NewRequestWithContext(context.Background(), "POST", "/", bytes.NewBuffer(data)) req.Header.Set("Content-Type", "application/json") rr := httptest.NewRecorder() router := routes.NewCurrentPlanRouter(m) // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusUnauthorized, status) } func TestExtraFieldJSONCurrentPlan(t *testing.T) { // set up assert := assert.New(t) m := getEmptyModel() plan := &models.Plan{} m.AddPlan(plan, 3) data := []byte(`{ "plan_id": 5, "sabotage": "omg" }`) req, _ := http.NewRequestWithContext(sampleContext, "POST", "/", bytes.NewBuffer(data)) req.Header.Set("Content-Type", "application/json") rr := httptest.NewRecorder() router := routes.NewCurrentPlanRouter(m) // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusBadRequest, status) expected := `Bad Request` assert.Equal(expected, strings.TrimSpace(rr.Body.String())) } func TestEmptyBodyJSONCurrentPlan(t *testing.T) { // set up assert := assert.New(t) m := getEmptyModel() plan := &models.Plan{} m.AddPlan(plan, 3) data := []byte(``) req, _ := http.NewRequestWithContext(sampleContext, "POST", "/", bytes.NewBuffer(data)) req.Header.Set("Content-Type", "application/json") rr := httptest.NewRecorder() router := routes.NewCurrentPlanRouter(m) // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusBadRequest, status) expected := `Bad Request` assert.Equal(expected, strings.TrimSpace(rr.Body.String())) } func TestTwoBodyCurrentPlan(t *testing.T) { // set up assert := assert.New(t) m := getEmptyModel() plan := &models.Plan{} m.AddPlan(plan, 3) data := []byte(`{ "plan_id": 5 }, { "plan_id": 7 }`) req, _ := http.NewRequestWithContext(sampleContext, "POST", "/", bytes.NewBuffer(data)) req.Header.Set("Content-Type", "application/json") rr := httptest.NewRecorder() router := routes.NewCurrentPlanRouter(m) // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusBadRequest, status) expected := `Bad Request` assert.Equal(expected, strings.TrimSpace(rr.Body.String())) } func TestErrorCreateCurrentPlan(t *testing.T) { // set up assert := assert.New(t) m := getErrorModel("error model") plan := &models.Plan{} m.AddPlan(plan, 3) data := []byte(`{ "plan_id": 5 }`) req, _ := http.NewRequestWithContext(sampleContext, "POST", "/", bytes.NewBuffer(data)) req.Header.Set("Content-Type", "application/json") rr := httptest.NewRecorder() router := routes.NewCurrentPlanRouter(m) // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusInternalServerError, status) expected := `Internal Server Error` assert.Equal(expected, strings.TrimSpace(rr.Body.String())) } func TestErrorOnRetrieveCreateCurrentPlan(t *testing.T) { // set up assert := assert.New(t) m := getErrorOnGetModel("error model") plan := &models.Plan{} m.AddPlan(plan, 3) data := []byte(`{ "plan_id": 5 }`) req, _ := http.NewRequestWithContext(sampleContext, "POST", "/", bytes.NewBuffer(data)) req.Header.Set("Content-Type", "application/json") rr := httptest.NewRecorder() router := routes.NewCurrentPlanRouter(m) // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusInternalServerError, status) expected := `Internal Server Error` assert.Equal(expected, strings.TrimSpace(rr.Body.String())) } func TestErrorWriterCreateCurrentPlan(t *testing.T) { // set up assert := assert.New(t) m := getEmptyModel() plan := &models.Plan{} m.AddPlan(plan, 3) data := []byte(`{ "plan_id": 5 }`) req, _ := http.NewRequestWithContext(sampleContext, "POST", "/", bytes.NewBuffer(data)) req.Header.Set("Content-Type", "application/json") rr := NewBadWriter() router := routes.NewCurrentPlanRouter(m) // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusInternalServerError, status) }