added more unit tests, changed input for template data to byte array & fixed another issue with insert sql script not autoincrement

This commit is contained in:
Eoin McAfee 2021-05-20 16:02:38 +01:00
parent 2d84d48c3a
commit b63facdc62
9 changed files with 77 additions and 29 deletions

View file

@ -22,8 +22,6 @@ import (
var (
errTemplateNameInvalid = errors.New("No Template Name Provided")
errTemplateDataInvalid = errors.New("No Template Data Provided")
//errTemplateCreatedInvalid = errors.New("Invalid Template Created Value")
//errTemplateUpdatedInvalid = errors.New("Invalid Template Updated Value")
)
type (
@ -36,7 +34,7 @@ type (
Template struct {
Id int64 `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Data string `json:"data,omitempty"`
Data []byte `json:"data,omitempty"`
Created int64 `json:"created,omitempty"`
Updated int64 `json:"updated,omitempty"`
}
@ -70,10 +68,6 @@ func (s *Template) Validate() error {
return errTemplateNameInvalid
case len(s.Data) == 0:
return errTemplateDataInvalid
//case s.Created == 0:
// return errTemplateCreatedInvalid
//case s.Updated == 0:
// return errTemplateUpdatedInvalid
default:
return nil
}

View file

@ -14,10 +14,8 @@ import (
)
type templateInput struct {
Name string `json:"name"`
Data string `json:"data"`
Created int64 `json:"created"`
Updated int64 `json:"updated"`
Name string `json:"name"`
Data []byte `json:"data"`
}
// HandleCreate returns an http.HandlerFunc that processes http
@ -32,10 +30,8 @@ func HandleCreate(secrets core.TemplateStore) http.HandlerFunc {
}
t := &core.Template{
Name: in.Name,
Data: in.Data,
Created: in.Created,
Updated: in.Updated,
Name: in.Name,
Data: in.Data,
}
err = t.Validate()

View file

@ -51,7 +51,7 @@ func TestHandleCreate_ValidationErrorName(t *testing.T) {
c := new(chi.Context)
in := new(bytes.Buffer)
json.NewEncoder(in).Encode(&core.Template{Name: "", Data: "my_data"})
json.NewEncoder(in).Encode(&core.Template{Name: "", Data: []byte("my_data")})
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", in)
@ -77,7 +77,7 @@ func TestHandleCreate_ValidationErrorData(t *testing.T) {
c := new(chi.Context)
in := new(bytes.Buffer)
json.NewEncoder(in).Encode(&core.Template{Name: "my_template", Data: ""})
json.NewEncoder(in).Encode(&core.Template{Name: "my_template", Data: nil})
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", in)

View file

@ -6,12 +6,24 @@
package template
import "github.com/drone/drone/core"
import (
"context"
"encoding/json"
"github.com/drone/drone/core"
"github.com/drone/drone/handler/api/errors"
"github.com/drone/drone/mock"
"github.com/go-chi/chi"
"github.com/golang/mock/gomock"
"github.com/google/go-cmp/cmp"
"net/http"
"net/http/httptest"
"testing"
)
var (
dummyTemplate = &core.Template{
Name: "my_template",
Data: "my_data",
Data: []byte("my_data"),
Created: 1,
Updated: 2,
}
@ -19,3 +31,51 @@ var (
dummyTemplate,
}
)
func TestHandleList(t *testing.T) {
controller := gomock.NewController(t)
defer controller.Finish()
templates := mock.NewMockTemplateStore(controller)
templates.EXPECT().ListAll(gomock.Any()).Return(dummyTemplateList, nil)
c := new(chi.Context)
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", nil)
r = r.WithContext(
context.WithValue(context.Background(), chi.RouteCtxKey, c),
)
HandleList(templates).ServeHTTP(w, r)
if got, want := w.Code, http.StatusOK; want != got {
t.Errorf("Want response code %d, got %d", want, got)
}
}
func TestHandleList_TemplateListErr(t *testing.T) {
controller := gomock.NewController(t)
defer controller.Finish()
templates := mock.NewMockTemplateStore(controller)
templates.EXPECT().ListAll(gomock.Any()).Return(nil, errors.ErrNotFound)
c := new(chi.Context)
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", nil)
r = r.WithContext(
context.WithValue(context.Background(), chi.RouteCtxKey, c),
)
HandleList(templates).ServeHTTP(w, r)
if got, want := w.Code, http.StatusNotFound; want != got {
t.Errorf("Want response code %d, got %d", want, got)
}
got, want := new(errors.Error), errors.ErrNotFound
json.NewDecoder(w.Body).Decode(got)
if diff := cmp.Diff(got, want); len(diff) != 0 {
t.Errorf(diff)
}
}

View file

@ -13,7 +13,7 @@ import (
)
type templateUpdate struct {
Data *string `json:"data"`
Data *[]byte `json:"data"`
Updated *int64 `json:"Updated"`
}

View file

@ -121,7 +121,7 @@ func TestHandleUpdate_UpdateError(t *testing.T) {
c.URLParams.Add("name", "my_template")
in := new(bytes.Buffer)
json.NewEncoder(in).Encode(&core.Template{Data: "my_data"})
json.NewEncoder(in).Encode(&core.Template{Data: []byte("my_data")})
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", in)

View file

@ -1,7 +1,7 @@
-- name: create-table-template
CREATE TABLE IF NOT EXISTS template (
template_id INTEGER PRIMARY KEY AUTOINCREMENT
template_id INTEGER PRIMARY KEY AUTOINCREMENT
,template_name TEXT UNIQUE
,template_data BLOB
,template_created INTEGER

View file

@ -8,7 +8,6 @@ package template
import (
"context"
"github.com/drone/drone/core"
"github.com/drone/drone/store/shared/db"
)
@ -168,14 +167,12 @@ ORDER BY template_name
const stmtInsert = `
INSERT INTO template (
template_id
,template_name
template_name
,template_data
,template_created
,template_updated
) VALUES (
:template_id
,:template_name
:template_name
,:template_data
,:template_created
,:template_updated

View file

@ -7,6 +7,7 @@
package template
import (
"bytes"
"context"
"database/sql"
"github.com/drone/drone/core"
@ -36,7 +37,7 @@ func testTemplateCreate(store *templateStore) func(t *testing.T) {
item := &core.Template{
Id: 1,
Name: "my_template",
Data: "some_template_data",
Data: []byte("some_template_data"),
Created: 1,
Updated: 2,
}
@ -83,7 +84,7 @@ func testTemplate(item *core.Template) func(t *testing.T) {
if got, want := item.Name, "my_template"; got != want {
t.Errorf("Want template name %q, got %q", want, got)
}
if got, want := item.Data, "some_template_data"; got != want {
if got, want := item.Data, []byte("some_template_data"); bytes.Compare(got, want) != 0 {
t.Errorf("Want template data %q, got %q", want, got)
}
}