From b8102b51642262856f2f59c547bf780abc0bbfee Mon Sep 17 00:00:00 2001 From: Jan Halfar Date: Wed, 9 Mar 2016 22:16:43 +0100 Subject: [PATCH] dryed out repo getNodes() --- repo/mock/mock.go | 21 ++++++++++++++++++++- repo/repo.go | 23 +++++++---------------- repo/repo_test.go | 15 +++++++++++++++ 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/repo/mock/mock.go b/repo/mock/mock.go index 71194f3..54b7736 100644 --- a/repo/mock/mock.go +++ b/repo/mock/mock.go @@ -9,12 +9,13 @@ import ( "testing" "time" + "github.com/foomo/contentserver/log" "github.com/foomo/contentserver/requests" ) // GetMockData mock data to run a repo func GetMockData(t testing.TB) (server *httptest.Server, varDir string) { - + log.SelectedLevel = log.LevelError _, filename, _, _ := runtime.Caller(0) mockDir := path.Dir(filename) @@ -30,6 +31,24 @@ func GetMockData(t testing.TB) (server *httptest.Server, varDir string) { return server, varDir } +// MakeNodesRequest a request to get some nodes +func MakeNodesRequest() *requests.Nodes { + return &requests.Nodes{ + Env: &requests.Env{ + Dimensions: []string{"dimension_foo"}, + }, + Nodes: map[string]*requests.Node{ + "test": &requests.Node{ + ID: "id-root", + Dimension: "dimension_foo", + MimeTypes: []string{}, + Expand: true, + DataFields: []string{"foo"}, + }, + }, + } +} + // MakeValidURIsRequest URIs reuqest func MakeValidURIsRequest() *requests.URIs { return &requests.URIs{ diff --git a/repo/repo.go b/repo/repo.go index 90b5c1c..c8e4a24 100644 --- a/repo/repo.go +++ b/repo/repo.go @@ -66,9 +66,13 @@ func (repo *Repo) GetURIs(dimension string, ids []string) map[string]string { // GetNodes get nodes func (repo *Repo) GetNodes(r *requests.Nodes) map[string]*content.Node { + return repo.getNodes(r.Nodes, r.Env.Groups) +} + +func (repo *Repo) getNodes(nodeRequests map[string]*requests.Node, groups []string) map[string]*content.Node { nodes := map[string]*content.Node{} path := []*content.Item{} - for nodeName, nodeRequest := range r.Nodes { + for nodeName, nodeRequest := range nodeRequests { log.Debug(" adding node " + nodeName + " " + nodeRequest.ID) dimensionNode, ok := repo.Directory[nodeRequest.Dimension] nodes[nodeName] = nil @@ -78,7 +82,7 @@ func (repo *Repo) GetNodes(r *requests.Nodes) map[string]*content.Node { } treeNode, ok := dimensionNode.Directory[nodeRequest.ID] if ok { - nodes[nodeName] = repo.getNode(treeNode, nodeRequest.Expand, nodeRequest.MimeTypes, path, 0, r.Env.Groups, nodeRequest.DataFields) + nodes[nodeName] = repo.getNode(treeNode, nodeRequest.Expand, nodeRequest.MimeTypes, path, 0, groups, nodeRequest.DataFields) } else { log.Warning("you are requesting an invalid tree node for " + nodeName + " : " + nodeRequest.ID) } @@ -135,20 +139,7 @@ func (repo *Repo) GetContent(r *requests.Content) (c *content.SiteContent, err e resolvedDimension = r.Env.Dimensions[0] } // add navigation trees - for treeName, treeRequest := range r.Nodes { - log.Debug(" adding tree " + treeName + " " + treeRequest.ID) - rootNode, ok := repo.Directory[resolvedDimension] - if !ok { - log.Warning("could not resolve rootNode for resolved dimension " + resolvedDimension) - c.Nodes[treeName] = nil - continue - } - if treeNode, ok := rootNode.Directory[treeRequest.ID]; ok { - c.Nodes[treeName] = repo.getNode(treeNode, treeRequest.Expand, treeRequest.MimeTypes, c.Path, 0, r.Env.Groups, treeRequest.DataFields) - } else { - log.Warning("you are requesting an invalid tree node for " + treeName + " : " + treeRequest.ID) - } - } + c.Nodes = repo.getNodes(r.Nodes, r.Env.Groups) return c, nil } diff --git a/repo/repo_test.go b/repo/repo_test.go index 658cbfb..8477032 100644 --- a/repo/repo_test.go +++ b/repo/repo_test.go @@ -105,6 +105,21 @@ func getTestRepo(path string, t *testing.T) *Repo { return r } +func TestGetNodes(t *testing.T) { + r := getTestRepo("/repo-two-dimensions.json", t) + nodesRequest := mock.MakeNodesRequest() + nodes := r.GetNodes(nodesRequest) + testNode, ok := nodes["test"] + if !ok { + t.Fatal("wtf that should be a node") + } + testData, ok := testNode.Item.Data["foo"] + t.Log("testData", testData) + if !ok { + t.Fatal("failed to fetch test data") + } +} + func TestResolveContent(t *testing.T) { r := getTestRepo("/repo-two-dimensions.json", t)