Skip to content

Commit

Permalink
Merge pull request starlight-go#1 from awans/includes
Browse files Browse the repository at this point in the history
Added include to create
  • Loading branch information
chasehensel committed May 27, 2020
2 parents 7375d20 + 39ea7bd commit 6f5fa3e
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 7 deletions.
18 changes: 15 additions & 3 deletions internal/server/operations/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ type CreateRequestBody struct {
}

type CreateRequest struct {
// TODO add Include/Select
// TODO add Select
Operation CreateOperation
Include Include
}

type CreateResponse struct {
Expand All @@ -34,14 +35,24 @@ func (s CreateServer) Parse(ctx context.Context, req *http.Request) (interface{}
vars := mux.Vars(req)
modelName := vars["object"]
body, _ := ioutil.ReadAll(req.Body)
_ = jsoniter.Unmarshal(body, &crBody)
err := jsoniter.Unmarshal(body, &crBody)
if err != nil {
return nil, err
}

var request CreateRequest
op, err := p.ParseCreate(modelName, crBody.Data)
if err != nil {
return nil, err
}
inc, err := p.ParseInclude(modelName, crBody.Include)
if err != nil {
return nil, err
}

request = CreateRequest{
Operation: op,
Include: inc,
}
return request, nil
}
Expand All @@ -53,6 +64,7 @@ func (s CreateServer) Serve(ctx context.Context, req interface{}) (interface{},
if err != nil {
return nil, err
}
response := CreateResponse{Data: st}
responseData := params.Include.Resolve(tx, st)
response := CreateResponse{Data: responseData}
return response, nil
}
51 changes: 49 additions & 2 deletions internal/server/operations/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func TestCreateServerParseSimple(t *testing.T) {
`{"data":{
"firstName":"Andrew",
"lastName":"Wansley",
"age": 32,
"age": 32
}}`))
if err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -51,6 +51,53 @@ func TestCreateServerParseSimple(t *testing.T) {
assert.Equal(age, int64(32))
}

func TestCreateServerParseInclude(t *testing.T) {
appDB := db.New()
db.AddSampleModels(appDB)
assert := assert.New(t)
req, err := http.NewRequest("POST", "/user.create", strings.NewReader(`{
"data":{
"firstName":"Andrew",
"lastName":"Wansley",
"age": 32
},
"include":{
"profile":true
}
}`))
if err != nil {
t.Fatal(err)
}
req = mux.SetURLVars(req, map[string]string{"object": "user"})

qs := CreateServer{}
ctx := middleware.NewRWTxContext(context.Background(), appDB.NewRWTx())
parsed, err := qs.Parse(ctx, req)
if err != nil {
t.Error(err)
}
parsedReq := parsed.(CreateRequest)

assert.IsType(parsedReq, CreateRequest{})

op := parsedReq.Operation
rec := op.Record
inc := parsedReq.Include.Includes
assert.Equal(1, len(inc))

u := rec.Id()

assert.Zero(u)

firstName := rec.Get("firstName").(string)
assert.Equal(firstName, "Andrew")

age := rec.Get("Age").(int64)
assert.Equal(age, int64(32))

}


func TestCreateServerServe(t *testing.T) {
appDB := db.New()
db.AddSampleModels(appDB)
Expand All @@ -74,4 +121,4 @@ func TestCreateServerServe(t *testing.T) {
assert.Equal(t, "Andrew", objData["firstName"])
assert.Equal(t, "Wansley", objData["lastName"])
assert.Equal(t, 32.0, objData["age"])
}
}
2 changes: 1 addition & 1 deletion internal/server/operations/find_many.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ type FindManyRequestBody struct {
}

type FindManyRequest struct {
// TODO add Include/Select
// TODO add Select
Operation FindManyOperation
Include Include
}
Expand Down
2 changes: 1 addition & 1 deletion internal/server/operations/find_one.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ type FindOneRequestBody struct {
}

type FindOneRequest struct {
// TODO add Include/Select
// TODO add Select
Operation FindOneOperation
Include Include
}
Expand Down

0 comments on commit 6f5fa3e

Please sign in to comment.