github.com/mmatczuk/gohan@v0.0.0-20170206152520-30e45d9bdb69/cli/template_test.go (about) 1 // Copyright (C) 2015 NTT Innovation Institute, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 12 // implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 16 package cli 17 18 import ( 19 "github.com/cloudwan/gohan/schema" 20 . "github.com/onsi/ginkgo" 21 . "github.com/onsi/gomega" 22 ) 23 24 var _ = Describe("Templates", func() { 25 var ( 26 schemas []*schema.Schema 27 policies []*schema.Policy 28 ) 29 30 BeforeEach(func() { 31 manager := schema.GetManager() 32 schemaPath := "../tests/test_schema.json" 33 Expect(manager.LoadSchemaFromFile(schemaPath)).To(Succeed()) 34 schemas = manager.OrderedSchemas() 35 Expect(schemas).To(HaveLen(3)) 36 policies = manager.Policies() 37 }) 38 39 AfterEach(func() { 40 schema.ClearManager() 41 }) 42 43 Describe("Filtering schemas for specific policy", func() { 44 Context("With policy set to admin", func() { 45 It("should return only admin's schemas", func() { 46 47 filteredSchemas := filterSchemasForPolicy("admin", policies, schemas) 48 49 Expect(filteredSchemas).To(HaveLen(3)) 50 Expect(filteredSchemas[0].URL).To(Equal("/v2.0/nets")) 51 Expect(filteredSchemas[1].URL).To(Equal("/v2.0/networks")) 52 Expect(filteredSchemas[2].URL).To(Equal("/v2.0/network/:network/subnets")) 53 }) 54 }) 55 56 Context("With policy set to member", func() { 57 It("should return only member's schemas", func() { 58 59 filteredSchemas := filterSchemasForPolicy("Member", policies, schemas) 60 61 Expect(filteredSchemas).To(HaveLen(1)) 62 Expect(filteredSchemas[0].URL).To(Equal("/v2.0/networks")) 63 }) 64 }) 65 66 Context("With policy set to nobody", func() { 67 It("should return only nobody's schemas", func() { 68 69 filteredSchemas := filterSchemasForPolicy("Nobody", policies, schemas) 70 71 Expect(filteredSchemas).To(BeEmpty()) 72 }) 73 }) 74 }) 75 76 Describe("Filtering schemas for specific resource", func() { 77 Context("With resource set to a", func() { 78 It("should return only a schemas", func() { 79 80 filteredSchemas := filerSchemasByResource("a", schemas) 81 82 Expect(filteredSchemas).To(HaveLen(2)) 83 Expect(filteredSchemas[0].URL).To(Equal("/v2.0/nets")) 84 Expect(filteredSchemas[1].URL).To(Equal("/v2.0/networks")) 85 }) 86 }) 87 88 Context("With resource set to b", func() { 89 It("should return only b schemas", func() { 90 91 filteredSchemas := filerSchemasByResource("b", schemas) 92 93 Expect(filteredSchemas).To(HaveLen(1)) 94 Expect(filteredSchemas[0].URL).To(Equal("/v2.0/network/:network/subnets")) 95 }) 96 }) 97 98 Context("With resource set to c", func() { 99 It("should not return any schemas", func() { 100 101 filteredSchemas := filerSchemasByResource("c", schemas) 102 103 Expect(filteredSchemas).To(BeEmpty()) 104 }) 105 }) 106 107 Context("With schema containg 2 resources", func() { 108 It("should recognize correctly all of them", func() { 109 110 resources := getAllResourcesFromSchemas(schemas) 111 112 Expect(resources).To(HaveLen(2)) 113 Expect(resources).To(ContainElement("a")) 114 Expect(resources).To(ContainElement("b")) 115 }) 116 }) 117 118 }) 119 })