github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/cf/api/resources/service_instances_test.go (about)

     1  package resources_test
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  
     7  	. "code.cloudfoundry.org/cli/cf/api/resources"
     8  
     9  	. "github.com/onsi/ginkgo"
    10  	. "github.com/onsi/gomega"
    11  )
    12  
    13  var _ = Describe("ServiceInstanceResource", func() {
    14  	var resource, resourceWithNullLastOp ServiceInstanceResource
    15  
    16  	BeforeEach(func() {
    17  		err := json.Unmarshal([]byte(`
    18      {
    19        "metadata": {
    20          "guid": "fake-guid",
    21          "url": "/v2/service_instances/fake-guid",
    22          "created_at": "2015-01-13T18:52:08+00:00",
    23          "updated_at": null
    24        },
    25        "entity": {
    26          "name": "fake service name",
    27          "credentials": {
    28          },
    29          "service_plan_guid": "fake-service-plan-guid",
    30          "space_guid": "fake-space-guid",
    31          "dashboard_url": "https://fake/dashboard/url",
    32          "type": "managed_service_instance",
    33          "space_url": "/v2/spaces/fake-space-guid",
    34          "service_plan_url": "/v2/service_plans/fake-service-plan-guid",
    35          "service_bindings_url": "/v2/service_instances/fake-guid/service_bindings",
    36          "last_operation": {
    37            "type": "create",
    38            "state": "in progress",
    39            "description": "fake state description",
    40            "created_at": "fake created at",
    41            "updated_at": "fake updated at"
    42          },
    43  				"tags": [ "tag1", "tag2" ],
    44          "service_plan": {
    45            "metadata": {
    46              "guid": "fake-service-plan-guid"
    47            },
    48            "entity": {
    49              "name": "fake-service-plan-name",
    50              "free": true,
    51              "description": "fake-description",
    52              "public": true,
    53              "active": true,
    54              "service_guid": "fake-service-guid"
    55            }
    56          },
    57          "service_bindings": [{
    58            "metadata": {
    59              "guid": "fake-service-binding-guid",
    60              "url": "http://fake/url"
    61            },
    62            "entity": {
    63              "app_guid": "fake-app-guid"
    64            }
    65          }]
    66        }
    67      }`), &resource)
    68  
    69  		Expect(err).ToNot(HaveOccurred())
    70  
    71  		err = json.Unmarshal([]byte(`
    72      {
    73        "metadata": {
    74          "guid": "fake-guid",
    75          "url": "/v2/service_instances/fake-guid",
    76          "created_at": "2015-01-13T18:52:08+00:00",
    77          "updated_at": null
    78        },
    79        "entity": {
    80          "name": "fake service name",
    81          "credentials": {
    82          },
    83          "service_plan_guid": "fake-service-plan-guid",
    84          "space_guid": "fake-space-guid",
    85          "dashboard_url": "https://fake/dashboard/url",
    86          "type": "managed_service_instance",
    87          "space_url": "/v2/spaces/fake-space-guid",
    88          "service_plan_url": "/v2/service_plans/fake-service-plan-guid",
    89          "service_bindings_url": "/v2/service_instances/fake-guid/service_bindings",
    90          "last_operation": null,
    91  				"tags": [ "tag1", "tag2" ],
    92          "service_plan": {
    93            "metadata": {
    94              "guid": "fake-service-plan-guid"
    95            },
    96            "entity": {
    97              "name": "fake-service-plan-name",
    98              "free": true,
    99              "description": "fake-description",
   100              "public": true,
   101              "active": true,
   102              "service_guid": "fake-service-guid"
   103            }
   104          },
   105          "service_bindings": [{
   106            "metadata": {
   107              "guid": "fake-service-binding-guid",
   108              "url": "http://fake/url"
   109            },
   110            "entity": {
   111              "app_guid": "fake-app-guid"
   112            }
   113          }]
   114        }
   115      }`), &resourceWithNullLastOp)
   116  
   117  		Expect(err).ToNot(HaveOccurred())
   118  	})
   119  
   120  	Context("Async brokers", func() {
   121  		var instanceString string
   122  
   123  		BeforeEach(func() {
   124  			instanceString = `
   125  						{
   126  							%s,
   127  							"entity": {
   128  								"name": "fake service name",
   129  								"credentials": {
   130  								},
   131  								"service_plan_guid": "fake-service-plan-guid",
   132  								"space_guid": "fake-space-guid",
   133  								"dashboard_url": "https://fake/dashboard/url",
   134  								"type": "managed_service_instance",
   135  								"space_url": "/v2/spaces/fake-space-guid",
   136  								"service_plan_url": "/v2/service_plans/fake-service-plan-guid",
   137  								"service_bindings_url": "/v2/service_instances/fake-guid/service_bindings",
   138  								"last_operation": {
   139  									"type": "create",
   140  									"state": "in progress",
   141  									"description": "fake state description",
   142  									"updated_at": "fake updated at"
   143  								},
   144  								"service_plan": {
   145  									"metadata": {
   146  										"guid": "fake-service-plan-guid"
   147  									},
   148  									"entity": {
   149  										"name": "fake-service-plan-name",
   150  										"free": true,
   151  										"description": "fake-description",
   152  										"public": true,
   153  										"active": true,
   154  										"service_guid": "fake-service-guid"
   155  									}
   156  								},
   157  								"service_bindings": [{
   158  									"metadata": {
   159  										"guid": "fake-service-binding-guid",
   160  										"url": "http://fake/url"
   161  									},
   162  									"entity": {
   163  										"app_guid": "fake-app-guid"
   164  									}
   165  								}]
   166  							}
   167  						}`
   168  		})
   169  
   170  		Describe("#ToFields", func() {
   171  			It("unmarshalls the fields of a service instance resource", func() {
   172  				fields := resource.ToFields()
   173  
   174  				Expect(fields.GUID).To(Equal("fake-guid"))
   175  				Expect(fields.Name).To(Equal("fake service name"))
   176  				Expect(fields.Tags).To(Equal([]string{"tag1", "tag2"}))
   177  				Expect(fields.DashboardURL).To(Equal("https://fake/dashboard/url"))
   178  				Expect(fields.LastOperation.Type).To(Equal("create"))
   179  				Expect(fields.LastOperation.State).To(Equal("in progress"))
   180  				Expect(fields.LastOperation.Description).To(Equal("fake state description"))
   181  				Expect(fields.LastOperation.CreatedAt).To(Equal("fake created at"))
   182  				Expect(fields.LastOperation.UpdatedAt).To(Equal("fake updated at"))
   183  			})
   184  
   185  			Context("When created_at is null", func() {
   186  				It("unmarshalls the service instance resource model", func() {
   187  					var resourceWithNullCreatedAt ServiceInstanceResource
   188  					metadata := `"metadata": {
   189  								"guid": "fake-guid",
   190  								"url": "/v2/service_instances/fake-guid",
   191  								"created_at": null,
   192  								"updated_at": "2015-01-13T18:52:08+00:00"
   193  							}`
   194  					stringWithNullCreatedAt := fmt.Sprintf(instanceString, metadata)
   195  
   196  					err := json.Unmarshal([]byte(stringWithNullCreatedAt), &resourceWithNullCreatedAt)
   197  					Expect(err).ToNot(HaveOccurred())
   198  				})
   199  			})
   200  
   201  			Context("When created_at is missing", func() {
   202  				It("unmarshalls the service instance resource model", func() {
   203  					var resourceWithMissingCreatedAt ServiceInstanceResource
   204  
   205  					metadata := `"metadata": {
   206  								"guid": "fake-guid",
   207  								"url": "/v2/service_instances/fake-guid",
   208  								"updated_at": "2015-01-13T18:52:08+00:00"
   209  							}`
   210  					stringWithMissingCreatedAt := fmt.Sprintf(instanceString, metadata)
   211  
   212  					err := json.Unmarshal([]byte(stringWithMissingCreatedAt), &resourceWithMissingCreatedAt)
   213  					Expect(err).ToNot(HaveOccurred())
   214  				})
   215  			})
   216  		})
   217  
   218  		Describe("#ToModel", func() {
   219  			It("unmarshalls the service instance resource model", func() {
   220  				instance := resource.ToModel()
   221  
   222  				Expect(instance.ServiceInstanceFields.GUID).To(Equal("fake-guid"))
   223  				Expect(instance.ServiceInstanceFields.Name).To(Equal("fake service name"))
   224  				Expect(instance.ServiceInstanceFields.Tags).To(Equal([]string{"tag1", "tag2"}))
   225  				Expect(instance.ServiceInstanceFields.DashboardURL).To(Equal("https://fake/dashboard/url"))
   226  				Expect(instance.ServiceInstanceFields.LastOperation.Type).To(Equal("create"))
   227  				Expect(instance.ServiceInstanceFields.LastOperation.State).To(Equal("in progress"))
   228  				Expect(instance.ServiceInstanceFields.LastOperation.Description).To(Equal("fake state description"))
   229  				Expect(instance.ServiceInstanceFields.LastOperation.CreatedAt).To(Equal("fake created at"))
   230  				Expect(instance.ServiceInstanceFields.LastOperation.UpdatedAt).To(Equal("fake updated at"))
   231  
   232  				Expect(instance.ServicePlan.GUID).To(Equal("fake-service-plan-guid"))
   233  				Expect(instance.ServicePlan.Free).To(BeTrue())
   234  				Expect(instance.ServicePlan.Description).To(Equal("fake-description"))
   235  				Expect(instance.ServicePlan.Public).To(BeTrue())
   236  				Expect(instance.ServicePlan.Active).To(BeTrue())
   237  				Expect(instance.ServicePlan.ServiceOfferingGUID).To(Equal("fake-service-guid"))
   238  
   239  				Expect(instance.ServiceBindings[0].GUID).To(Equal("fake-service-binding-guid"))
   240  				Expect(instance.ServiceBindings[0].URL).To(Equal("http://fake/url"))
   241  				Expect(instance.ServiceBindings[0].AppGUID).To(Equal("fake-app-guid"))
   242  			})
   243  		})
   244  	})
   245  
   246  	Context("Old brokers (no last_operation)", func() {
   247  		Describe("#ToFields", func() {
   248  			It("unmarshalls the fields of a service instance resource", func() {
   249  				fields := resourceWithNullLastOp.ToFields()
   250  
   251  				Expect(fields.GUID).To(Equal("fake-guid"))
   252  				Expect(fields.Name).To(Equal("fake service name"))
   253  				Expect(fields.Tags).To(Equal([]string{"tag1", "tag2"}))
   254  				Expect(fields.DashboardURL).To(Equal("https://fake/dashboard/url"))
   255  				Expect(fields.LastOperation.Type).To(Equal(""))
   256  				Expect(fields.LastOperation.State).To(Equal(""))
   257  				Expect(fields.LastOperation.Description).To(Equal(""))
   258  			})
   259  		})
   260  
   261  		Describe("#ToModel", func() {
   262  			It("unmarshalls the service instance resource model", func() {
   263  				instance := resourceWithNullLastOp.ToModel()
   264  
   265  				Expect(instance.ServiceInstanceFields.GUID).To(Equal("fake-guid"))
   266  				Expect(instance.ServiceInstanceFields.Name).To(Equal("fake service name"))
   267  				Expect(instance.ServiceInstanceFields.Tags).To(Equal([]string{"tag1", "tag2"}))
   268  				Expect(instance.ServiceInstanceFields.DashboardURL).To(Equal("https://fake/dashboard/url"))
   269  
   270  				Expect(instance.ServiceInstanceFields.LastOperation.Type).To(Equal(""))
   271  				Expect(instance.ServiceInstanceFields.LastOperation.State).To(Equal(""))
   272  				Expect(instance.ServiceInstanceFields.LastOperation.Description).To(Equal(""))
   273  
   274  				Expect(instance.ServicePlan.GUID).To(Equal("fake-service-plan-guid"))
   275  				Expect(instance.ServicePlan.Free).To(BeTrue())
   276  				Expect(instance.ServicePlan.Description).To(Equal("fake-description"))
   277  				Expect(instance.ServicePlan.Public).To(BeTrue())
   278  				Expect(instance.ServicePlan.Active).To(BeTrue())
   279  				Expect(instance.ServicePlan.ServiceOfferingGUID).To(Equal("fake-service-guid"))
   280  
   281  				Expect(instance.ServiceBindings[0].GUID).To(Equal("fake-service-binding-guid"))
   282  				Expect(instance.ServiceBindings[0].URL).To(Equal("http://fake/url"))
   283  				Expect(instance.ServiceBindings[0].AppGUID).To(Equal("fake-app-guid"))
   284  			})
   285  		})
   286  	})
   287  })