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  })