rename struct, add test for relationships

This commit is contained in:
Sam Woodard 2015-07-06 11:57:20 -07:00
parent d1af74e681
commit 68210ff3ec
3 changed files with 56 additions and 32 deletions

View File

@ -1,7 +1,9 @@
package jsonapi package jsonapi
type JsonApiNodeWrapper struct { type JsonApiPayload struct {
Data *JsonApiNode `json:"data"` Data *JsonApiNode `json:"data"`
Included []*JsonApiNode `json:"included,omitempty"`
Links *map[string]string `json:"links,omitempty"`
} }
type JsonApiNode struct { type JsonApiNode struct {

View File

@ -7,18 +7,13 @@ import (
"strings" "strings"
) )
type JsonApiResponse struct { func CreateJsonApiResponse(model interface{}) (*JsonApiPayload, error) {
Data *JsonApiNode `json:"data"`
Included []*JsonApiNode `json:"included,omitempty"`
}
func CreateJsonApiResponse(model interface{}) (*JsonApiResponse, error) {
rootNode, included, err := visitModelNode(model) rootNode, included, err := visitModelNode(model)
if err != nil { if err != nil {
return nil, err return nil, err
} }
resp := &JsonApiResponse{Data: rootNode} resp := &JsonApiPayload{Data: rootNode}
uniqueIncluded := make(map[string]*JsonApiNode) uniqueIncluded := make(map[string]*JsonApiNode)

View File

@ -24,23 +24,6 @@ func TestHasPrimaryAnnotation(t *testing.T) {
testModel := &Blog{ testModel := &Blog{
Id: 5, Id: 5,
Title: "Title 1", Title: "Title 1",
Posts: []*Post{
&Post{
Id: 1,
Title: "Foo",
Body: "Bar",
},
&Post{
Id: 2,
Title: "Fuubar",
Body: "Bas",
},
},
CurrentPost: &Post{
Id: 1,
Title: "Foo",
Body: "Bar",
},
} }
resp, err := CreateJsonApiResponse(testModel) resp, err := CreateJsonApiResponse(testModel)
@ -48,11 +31,6 @@ func TestHasPrimaryAnnotation(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
out := bytes.NewBuffer(nil)
json.NewEncoder(out).Encode(resp)
fmt.Printf("%s\n", out.Bytes())
response := resp.Data response := resp.Data
if response.Type != "blogs" { if response.Type != "blogs" {
@ -85,6 +63,55 @@ func TestSupportsAttributes(t *testing.T) {
t.Fatalf("Attributes hash not populated using tags correctly") t.Fatalf("Attributes hash not populated using tags correctly")
} }
} }
func TestRelations(t *testing.T) {
testModel := &Blog{
Id: 5,
Title: "Title 1",
Posts: []*Post{
&Post{
Id: 1,
Title: "Foo",
Body: "Bar",
},
&Post{
Id: 2,
Title: "Fuubar",
Body: "Bas",
},
},
CurrentPost: &Post{
Id: 1,
Title: "Foo",
Body: "Bar",
},
}
resp, err := CreateJsonApiResponse(testModel)
if err != nil {
t.Fatal(err)
}
out := bytes.NewBuffer(nil)
json.NewEncoder(out).Encode(resp)
fmt.Printf("%s\n", out.Bytes())
relations := resp.Data.Relationships
if relations == nil {
t.Fatalf("Relationships were not materialized")
}
if relations["posts"] == nil {
t.Fatalf("Posts relationship was not materialized")
}
if relations["current_post"] == nil {
t.Fatalf("Current post relationship was not materialized")
}
}
func TestNoRelations(t *testing.T) { func TestNoRelations(t *testing.T) {
testModel := &Blog{Id: 1, Title: "Title 1"} testModel := &Blog{Id: 1, Title: "Title 1"}
@ -99,7 +126,7 @@ func TestNoRelations(t *testing.T) {
fmt.Printf("%s\n", jsonBuffer.Bytes()) fmt.Printf("%s\n", jsonBuffer.Bytes())
decodedResponse := new(JsonApiResponse) decodedResponse := new(JsonApiPayload)
json.NewDecoder(jsonBuffer).Decode(decodedResponse) json.NewDecoder(jsonBuffer).Decode(decodedResponse)