All checks were successful
gitea-deepak/gogmagog/pipeline/head This commit looks good
289 lines
7.7 KiB
Go
289 lines
7.7 KiB
Go
package routes_test
|
|
|
|
import (
|
|
"gitea.deepak.science/deepak/gogmagog/models"
|
|
"gitea.deepak.science/deepak/gogmagog/routes"
|
|
"github.com/stretchr/testify/assert"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestEmptyActions(t *testing.T) {
|
|
// set up
|
|
assert := assert.New(t)
|
|
m := getEmptyModel()
|
|
router := routes.NewRouter(m)
|
|
req, _ := http.NewRequest("GET", "/actions", nil)
|
|
|
|
rr := httptest.NewRecorder()
|
|
|
|
// function under test
|
|
router.ServeHTTP(rr, req)
|
|
|
|
// check results
|
|
status := rr.Code
|
|
assert.Equal(http.StatusOK, status)
|
|
expected := `[]`
|
|
|
|
assert.JSONEq(expected, rr.Body.String())
|
|
contentType := rr.Header().Get("Content-Type")
|
|
assert.Equal("application/json", contentType)
|
|
}
|
|
|
|
func TestOneAction(t *testing.T) {
|
|
// set up
|
|
assert := assert.New(t)
|
|
createdDate, _ := time.Parse("2006-01-02", "2021-01-01")
|
|
updatedDate, _ := time.Parse("2006-01-02", "2021-01-02")
|
|
completedDate, _ := time.Parse("2006-01-02", "2021-01-03")
|
|
a1 := &models.Action{ActionID: 3, ActionDescription: "testing", CompletedChunks: 1, CompletedOn: &completedDate, CreatedAt: &createdDate, UpdatedAt: &updatedDate, EstimatedChunks: 3, PlanID: 0}
|
|
m := getModel([]*models.Plan{}, []*models.Action{a1})
|
|
router := routes.NewRouter(m)
|
|
req, _ := http.NewRequest("GET", "/actions", nil)
|
|
|
|
rr := httptest.NewRecorder()
|
|
|
|
// function under test
|
|
router.ServeHTTP(rr, req)
|
|
|
|
// check results
|
|
status := rr.Code
|
|
assert.Equal(http.StatusOK, status)
|
|
// We pass in the date as a time.time so it makes sense that it comes back with a midnight timestamp.
|
|
expected := `[
|
|
{
|
|
"action_id": 3,
|
|
"action_description": "testing",
|
|
"estimated_chunks": 3,
|
|
"completed_chunks": 1,
|
|
"completed_on": "2021-01-03T00:00:00Z",
|
|
"updated_at": "2021-01-02T00:00:00Z",
|
|
"created_at": "2021-01-01T00:00:00Z",
|
|
"plan_id": 0
|
|
}
|
|
]`
|
|
assert.JSONEq(expected, rr.Body.String())
|
|
contentType := rr.Header().Get("Content-Type")
|
|
assert.Equal("application/json", contentType)
|
|
}
|
|
|
|
func TestErrorAction(t *testing.T) {
|
|
// set up
|
|
assert := assert.New(t)
|
|
|
|
m := getErrorModel("Model always errors")
|
|
|
|
router := routes.NewRouter(m)
|
|
req, _ := http.NewRequest("GET", "/actions", nil)
|
|
|
|
rr := httptest.NewRecorder()
|
|
|
|
// function under test
|
|
router.ServeHTTP(rr, req)
|
|
|
|
// check results
|
|
status := rr.Code
|
|
assert.Equal(http.StatusInternalServerError, status)
|
|
// We pass in the date as a time.time so it makes sense that it comes back with a midnight timestamp.
|
|
expected := `Internal Server Error`
|
|
assert.Equal(expected, strings.TrimSpace(rr.Body.String()))
|
|
}
|
|
|
|
func TestEmptyActionErrorWriter(t *testing.T) {
|
|
// set up
|
|
assert := assert.New(t)
|
|
|
|
m := getEmptyModel()
|
|
|
|
router := routes.NewRouter(m)
|
|
req, _ := http.NewRequest("GET", "/actions", nil)
|
|
|
|
rr := NewBadWriter()
|
|
|
|
// function under test
|
|
router.ServeHTTP(rr, req)
|
|
|
|
// check results
|
|
status := rr.Code
|
|
assert.Equal(http.StatusInternalServerError, status)
|
|
|
|
}
|
|
|
|
func TestOneActionByID(t *testing.T) {
|
|
// set up
|
|
assert := assert.New(t)
|
|
createdDate, _ := time.Parse("2006-01-02", "2021-01-01")
|
|
updatedDate, _ := time.Parse("2006-01-02", "2021-01-02")
|
|
a := &models.Action{ActionID: 6, ActionDescription: "howdy", CompletedOn: nil, CreatedAt: &createdDate, UpdatedAt: &updatedDate, CompletedChunks: 0, EstimatedChunks: 54, PlanID: 3}
|
|
m := getModel([]*models.Plan{}, []*models.Action{a})
|
|
router := routes.NewRouter(m)
|
|
req, _ := http.NewRequest("GET", "/actions/6", nil)
|
|
|
|
rr := httptest.NewRecorder()
|
|
|
|
// function under test
|
|
router.ServeHTTP(rr, req)
|
|
|
|
// check results
|
|
status := rr.Code
|
|
assert.Equal(http.StatusOK, status)
|
|
// We pass in the date as a time.time so it makes sense that it comes back with a midnight timestamp.
|
|
expected := `{
|
|
"action_id": 6,
|
|
"action_description": "howdy",
|
|
"estimated_chunks": 54,
|
|
"completed_chunks": 0,
|
|
"updated_at": "2021-01-02T00:00:00Z",
|
|
"created_at": "2021-01-01T00:00:00Z",
|
|
"plan_id": 3
|
|
}`
|
|
assert.JSONEq(expected, rr.Body.String())
|
|
contentType := rr.Header().Get("Content-Type")
|
|
assert.Equal("application/json", contentType)
|
|
}
|
|
|
|
func TestErrorActionByID(t *testing.T) {
|
|
// set up
|
|
assert := assert.New(t)
|
|
|
|
m := getErrorModel("Model always errors")
|
|
|
|
router := routes.NewRouter(m)
|
|
req, _ := http.NewRequest("GET", "/actions/5", nil)
|
|
|
|
rr := httptest.NewRecorder()
|
|
|
|
// function under test
|
|
router.ServeHTTP(rr, req)
|
|
|
|
// check results
|
|
status := rr.Code
|
|
assert.Equal(http.StatusInternalServerError, status)
|
|
// We pass in the date as a time.time so it makes sense that it comes back with a midnight timestamp.
|
|
expected := `Internal Server Error`
|
|
assert.Equal(expected, strings.TrimSpace(rr.Body.String()))
|
|
}
|
|
|
|
func TestEmptyActionErrorWriterByID(t *testing.T) {
|
|
// set up
|
|
assert := assert.New(t)
|
|
|
|
a := &models.Action{ActionID: 6}
|
|
m := getModel([]*models.Plan{}, []*models.Action{a})
|
|
|
|
router := routes.NewRouter(m)
|
|
req, _ := http.NewRequest("GET", "/actions/6", nil)
|
|
|
|
rr := NewBadWriter()
|
|
|
|
// function under test
|
|
router.ServeHTTP(rr, req)
|
|
|
|
// check results
|
|
status := rr.Code
|
|
assert.Equal(http.StatusInternalServerError, status)
|
|
|
|
}
|
|
|
|
func TestNotFoundActionByIDText(t *testing.T) {
|
|
// set up
|
|
assert := assert.New(t)
|
|
|
|
m := getEmptyModel()
|
|
|
|
router := routes.NewRouter(m)
|
|
req, _ := http.NewRequest("GET", "/actions/wo", nil)
|
|
|
|
rr := httptest.NewRecorder()
|
|
|
|
// function under test
|
|
router.ServeHTTP(rr, req)
|
|
|
|
// check results
|
|
status := rr.Code
|
|
assert.Equal(http.StatusNotFound, status)
|
|
|
|
}
|
|
func TestNotFoundActionByIDEmpty(t *testing.T) {
|
|
// set up
|
|
assert := assert.New(t)
|
|
|
|
m := getEmptyModel()
|
|
|
|
router := routes.NewRouter(m)
|
|
req, _ := http.NewRequest("GET", "/actions/1", nil)
|
|
|
|
rr := httptest.NewRecorder()
|
|
|
|
// function under test
|
|
router.ServeHTTP(rr, req)
|
|
|
|
// check results
|
|
status := rr.Code
|
|
assert.Equal(http.StatusNotFound, status)
|
|
|
|
}
|
|
|
|
func TestActionsByPlanID(t *testing.T) {
|
|
// set up
|
|
assert := assert.New(t)
|
|
createdDate, _ := time.Parse("2006-01-02", "2021-01-01")
|
|
updatedDate, _ := time.Parse("2006-01-02", "2021-01-02")
|
|
a := &models.Action{ActionID: 6, ActionDescription: "howdy", CompletedOn: nil, CreatedAt: &createdDate, UpdatedAt: &updatedDate, CompletedChunks: 0, EstimatedChunks: 54, PlanID: 3}
|
|
m := getModel([]*models.Plan{}, []*models.Action{a})
|
|
router := routes.NewRouter(m)
|
|
req, _ := http.NewRequest("GET", "/actions?plan_id=6", nil)
|
|
|
|
rr := httptest.NewRecorder()
|
|
|
|
// function under test
|
|
router.ServeHTTP(rr, req)
|
|
|
|
// check results
|
|
status := rr.Code
|
|
assert.Equal(http.StatusOK, status)
|
|
// We pass in the date as a time.time so it makes sense that it comes back with a midnight timestamp.
|
|
expected := `[
|
|
{
|
|
"action_id": 6,
|
|
"action_description": "howdy",
|
|
"estimated_chunks": 54,
|
|
"completed_chunks": 0,
|
|
"updated_at": "2021-01-02T00:00:00Z",
|
|
"created_at": "2021-01-01T00:00:00Z",
|
|
"plan_id": 3
|
|
}
|
|
]`
|
|
assert.JSONEq(expected, rr.Body.String())
|
|
contentType := rr.Header().Get("Content-Type")
|
|
assert.Equal("application/json", contentType)
|
|
}
|
|
|
|
func TestActionsByPlanIDInvalidID(t *testing.T) {
|
|
// set up
|
|
assert := assert.New(t)
|
|
createdDate, _ := time.Parse("2006-01-02", "2021-01-01")
|
|
updatedDate, _ := time.Parse("2006-01-02", "2021-01-02")
|
|
a := &models.Action{ActionID: 6, ActionDescription: "howdy", CompletedOn: nil, CreatedAt: &createdDate, UpdatedAt: &updatedDate, CompletedChunks: 0, EstimatedChunks: 54, PlanID: 3}
|
|
m := getModel([]*models.Plan{}, []*models.Action{a})
|
|
router := routes.NewRouter(m)
|
|
req, _ := http.NewRequest("GET", "/actions?plan_id=aoeu", nil)
|
|
|
|
rr := httptest.NewRecorder()
|
|
|
|
// function under test
|
|
router.ServeHTTP(rr, req)
|
|
|
|
// check results
|
|
status := rr.Code
|
|
assert.Equal(http.StatusOK, status)
|
|
// We pass in the date as a time.time so it makes sense that it comes back with a midnight timestamp.
|
|
expected := `[]`
|
|
assert.JSONEq(expected, rr.Body.String())
|
|
contentType := rr.Header().Get("Content-Type")
|
|
assert.Equal("application/json", contentType)
|
|
}
|