From 00ce1a7ec70bdb0696d4d6e0d934d64eb73dbfc7 Mon Sep 17 00:00:00 2001 From: Emmy Ni Date: Fri, 14 Oct 2022 14:58:14 -0400 Subject: [PATCH 1/8] add crossSellsTo field --- model/cloud.go | 1 + 1 file changed, 1 insertion(+) diff --git a/model/cloud.go b/model/cloud.go index a9e8a2a4cf..1c111d2630 100644 --- a/model/cloud.go +++ b/model/cloud.go @@ -52,6 +52,7 @@ type Product struct { Family SubscriptionFamily `json:"product_family"` RecurringInterval RecurringInterval `json:"recurring_interval"` BillingScheme BillingScheme `json:"billing_scheme"` + CrossSellsTo string `json:"cross_sells_to"` } type UserFacingProduct struct { From b662eefd9fe6357086be82bf4700834ff3f524cb Mon Sep 17 00:00:00 2001 From: Emmy Ni Date: Mon, 17 Oct 2022 11:11:50 -0400 Subject: [PATCH 2/8] make field optional --- model/cloud.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/cloud.go b/model/cloud.go index 1c111d2630..b708b191da 100644 --- a/model/cloud.go +++ b/model/cloud.go @@ -52,7 +52,7 @@ type Product struct { Family SubscriptionFamily `json:"product_family"` RecurringInterval RecurringInterval `json:"recurring_interval"` BillingScheme BillingScheme `json:"billing_scheme"` - CrossSellsTo string `json:"cross_sells_to"` + CrossSellsTo string `json:"cross_sells_to,omitempty"` } type UserFacingProduct struct { From ce8cfe7ffc3391bc60ad8ecb4c7cb6c98dc15810 Mon Sep 17 00:00:00 2001 From: Emmy Ni Date: Tue, 18 Oct 2022 09:11:28 -0400 Subject: [PATCH 3/8] make field not optional --- model/cloud.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/cloud.go b/model/cloud.go index b708b191da..1c111d2630 100644 --- a/model/cloud.go +++ b/model/cloud.go @@ -52,7 +52,7 @@ type Product struct { Family SubscriptionFamily `json:"product_family"` RecurringInterval RecurringInterval `json:"recurring_interval"` BillingScheme BillingScheme `json:"billing_scheme"` - CrossSellsTo string `json:"cross_sells_to,omitempty"` + CrossSellsTo string `json:"cross_sells_to"` } type UserFacingProduct struct { From 58a35862793c4dbbb408a0809b8de1393a74a091 Mon Sep 17 00:00:00 2001 From: Emmy Ni Date: Tue, 18 Oct 2022 11:56:23 -0400 Subject: [PATCH 4/8] add to UserFacingProduct --- model/cloud.go | 1 + 1 file changed, 1 insertion(+) diff --git a/model/cloud.go b/model/cloud.go index 1c111d2630..ef5401a80a 100644 --- a/model/cloud.go +++ b/model/cloud.go @@ -60,6 +60,7 @@ type UserFacingProduct struct { Name string `json:"name"` SKU string `json:"sku"` PricePerSeat float64 `json:"price_per_seat"` + CrossSellsTo string `json:"cross_sells_to"` } // AddOn represents an addon to a product. From 5bf39666d7bde61936bf2061cbc10e163d7c5947 Mon Sep 17 00:00:00 2001 From: Emmy Ni Date: Tue, 18 Oct 2022 12:30:30 -0400 Subject: [PATCH 5/8] add recurringInterval --- model/cloud.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/model/cloud.go b/model/cloud.go index ef5401a80a..a67040a947 100644 --- a/model/cloud.go +++ b/model/cloud.go @@ -56,11 +56,12 @@ type Product struct { } type UserFacingProduct struct { - ID string `json:"id"` - Name string `json:"name"` - SKU string `json:"sku"` - PricePerSeat float64 `json:"price_per_seat"` - CrossSellsTo string `json:"cross_sells_to"` + ID string `json:"id"` + Name string `json:"name"` + SKU string `json:"sku"` + PricePerSeat float64 `json:"price_per_seat"` + RecurringInterval RecurringInterval `json:"recurring_interval"` + CrossSellsTo string `json:"cross_sells_to"` } // AddOn represents an addon to a product. From e9b34ee03738ca6c02d39083d98faa26ac858d07 Mon Sep 17 00:00:00 2001 From: Emmy Ni Date: Fri, 21 Oct 2022 10:23:31 -0400 Subject: [PATCH 6/8] fix tests --- api4/cloud_test.go | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/api4/cloud_test.go b/api4/cloud_test.go index 999f1077e4..8dfa7747b8 100644 --- a/api4/cloud_test.go +++ b/api4/cloud_test.go @@ -456,6 +456,7 @@ func TestGetCloudProducts(t *testing.T) { Family: "family", RecurringInterval: "recurring_interval", BillingScheme: "billing_scheme", + CrossSellsTo: "", }, { ID: "prod_test2", @@ -467,6 +468,7 @@ func TestGetCloudProducts(t *testing.T) { Family: "family2", RecurringInterval: "recurring_interval2", BillingScheme: "billing_scheme2", + CrossSellsTo: "prod_test3", }, { ID: "prod_test3", @@ -478,27 +480,34 @@ func TestGetCloudProducts(t *testing.T) { Family: "family3", RecurringInterval: "recurring_interval3", BillingScheme: "billing_scheme3", + CrossSellsTo: "prod_test2", }, } sanitizedProducts := []*model.Product{ { - ID: "prod_test1", - Name: "name", - PricePerSeat: 10, - SKU: "sku", + ID: "prod_test1", + Name: "name", + PricePerSeat: 10, + SKU: "sku", + RecurringInterval: "recurring_interval", + CrossSellsTo: "", }, { - ID: "prod_test2", - Name: "name2", - PricePerSeat: 100, - SKU: "sku2", + ID: "prod_test2", + Name: "name2", + PricePerSeat: 100, + SKU: "sku2", + RecurringInterval: "recurring_interval2", + CrossSellsTo: "prod_test3", }, { - ID: "prod_test3", - Name: "name3", - PricePerSeat: 1000, - SKU: "sku3", + ID: "prod_test3", + Name: "name3", + PricePerSeat: 1000, + SKU: "sku3", + RecurringInterval: "recurring_interval3", + CrossSellsTo: "prod_test2", }, } t.Run("get products for admins", func(t *testing.T) { @@ -554,8 +563,9 @@ func TestGetCloudProducts(t *testing.T) { require.Equal(t, returnedProducts[0].Description, "") require.Equal(t, returnedProducts[0].PriceID, "") require.Equal(t, returnedProducts[0].Family, model.SubscriptionFamily("")) - require.Equal(t, returnedProducts[0].RecurringInterval, model.RecurringInterval("")) + require.Equal(t, returnedProducts[0].RecurringInterval, model.RecurringInterval("recurring_interval")) require.Equal(t, returnedProducts[0].BillingScheme, model.BillingScheme("")) + require.Equal(t, returnedProducts[0].CrossSellsTo, "") require.Equal(t, returnedProducts[1].ID, "prod_test2") require.Equal(t, returnedProducts[1].Name, "name2") @@ -564,8 +574,9 @@ func TestGetCloudProducts(t *testing.T) { require.Equal(t, returnedProducts[1].Description, "") require.Equal(t, returnedProducts[1].PriceID, "") require.Equal(t, returnedProducts[1].Family, model.SubscriptionFamily("")) - require.Equal(t, returnedProducts[1].RecurringInterval, model.RecurringInterval("")) + require.Equal(t, returnedProducts[1].RecurringInterval, model.RecurringInterval("recurring_interval2")) require.Equal(t, returnedProducts[1].BillingScheme, model.BillingScheme("")) + require.Equal(t, returnedProducts[1].CrossSellsTo, "prod_test3") require.Equal(t, returnedProducts[2].ID, "prod_test3") require.Equal(t, returnedProducts[2].Name, "name3") @@ -574,7 +585,8 @@ func TestGetCloudProducts(t *testing.T) { require.Equal(t, returnedProducts[2].Description, "") require.Equal(t, returnedProducts[2].PriceID, "") require.Equal(t, returnedProducts[2].Family, model.SubscriptionFamily("")) - require.Equal(t, returnedProducts[2].RecurringInterval, model.RecurringInterval("")) + require.Equal(t, returnedProducts[2].RecurringInterval, model.RecurringInterval("recurring_interval3")) require.Equal(t, returnedProducts[2].BillingScheme, model.BillingScheme("")) + require.Equal(t, returnedProducts[2].CrossSellsTo, "prod_test2") }) } From 2bed35ec1c38cffa8de7ce8219d287724a39b01b Mon Sep 17 00:00:00 2001 From: Emmy Ni Date: Fri, 21 Oct 2022 12:59:29 -0400 Subject: [PATCH 7/8] update recurring_interval values --- api4/cloud_test.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/api4/cloud_test.go b/api4/cloud_test.go index 8dfa7747b8..dd4f7d94ae 100644 --- a/api4/cloud_test.go +++ b/api4/cloud_test.go @@ -454,7 +454,7 @@ func TestGetCloudProducts(t *testing.T) { SKU: "sku", PriceID: "price_id", Family: "family", - RecurringInterval: "recurring_interval", + RecurringInterval: "monthly", BillingScheme: "billing_scheme", CrossSellsTo: "", }, @@ -466,7 +466,7 @@ func TestGetCloudProducts(t *testing.T) { SKU: "sku2", PriceID: "price_id2", Family: "family2", - RecurringInterval: "recurring_interval2", + RecurringInterval: "monthly", BillingScheme: "billing_scheme2", CrossSellsTo: "prod_test3", }, @@ -478,7 +478,7 @@ func TestGetCloudProducts(t *testing.T) { SKU: "sku3", PriceID: "price_id3", Family: "family3", - RecurringInterval: "recurring_interval3", + RecurringInterval: "yearly", BillingScheme: "billing_scheme3", CrossSellsTo: "prod_test2", }, @@ -490,7 +490,7 @@ func TestGetCloudProducts(t *testing.T) { Name: "name", PricePerSeat: 10, SKU: "sku", - RecurringInterval: "recurring_interval", + RecurringInterval: "monthly", CrossSellsTo: "", }, { @@ -498,7 +498,7 @@ func TestGetCloudProducts(t *testing.T) { Name: "name2", PricePerSeat: 100, SKU: "sku2", - RecurringInterval: "recurring_interval2", + RecurringInterval: "monthly", CrossSellsTo: "prod_test3", }, { @@ -506,7 +506,7 @@ func TestGetCloudProducts(t *testing.T) { Name: "name3", PricePerSeat: 1000, SKU: "sku3", - RecurringInterval: "recurring_interval3", + RecurringInterval: "yearly", CrossSellsTo: "prod_test2", }, } @@ -563,7 +563,7 @@ func TestGetCloudProducts(t *testing.T) { require.Equal(t, returnedProducts[0].Description, "") require.Equal(t, returnedProducts[0].PriceID, "") require.Equal(t, returnedProducts[0].Family, model.SubscriptionFamily("")) - require.Equal(t, returnedProducts[0].RecurringInterval, model.RecurringInterval("recurring_interval")) + require.Equal(t, returnedProducts[0].RecurringInterval, model.RecurringInterval("monthly")) require.Equal(t, returnedProducts[0].BillingScheme, model.BillingScheme("")) require.Equal(t, returnedProducts[0].CrossSellsTo, "") @@ -574,7 +574,7 @@ func TestGetCloudProducts(t *testing.T) { require.Equal(t, returnedProducts[1].Description, "") require.Equal(t, returnedProducts[1].PriceID, "") require.Equal(t, returnedProducts[1].Family, model.SubscriptionFamily("")) - require.Equal(t, returnedProducts[1].RecurringInterval, model.RecurringInterval("recurring_interval2")) + require.Equal(t, returnedProducts[1].RecurringInterval, model.RecurringInterval("monthly")) require.Equal(t, returnedProducts[1].BillingScheme, model.BillingScheme("")) require.Equal(t, returnedProducts[1].CrossSellsTo, "prod_test3") @@ -585,7 +585,7 @@ func TestGetCloudProducts(t *testing.T) { require.Equal(t, returnedProducts[2].Description, "") require.Equal(t, returnedProducts[2].PriceID, "") require.Equal(t, returnedProducts[2].Family, model.SubscriptionFamily("")) - require.Equal(t, returnedProducts[2].RecurringInterval, model.RecurringInterval("recurring_interval3")) + require.Equal(t, returnedProducts[2].RecurringInterval, model.RecurringInterval("yearly")) require.Equal(t, returnedProducts[2].BillingScheme, model.BillingScheme("")) require.Equal(t, returnedProducts[2].CrossSellsTo, "prod_test2") }) From 532a3c1f2276e436e7d543e38d0ee8def6d575de Mon Sep 17 00:00:00 2001 From: Emmy Ni Date: Fri, 21 Oct 2022 14:09:00 -0400 Subject: [PATCH 8/8] fix templates --- templates/cloud_30_day_arrears.html | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/templates/cloud_30_day_arrears.html b/templates/cloud_30_day_arrears.html index aae98b9df4..d31032a897 100644 --- a/templates/cloud_30_day_arrears.html +++ b/templates/cloud_30_day_arrears.html @@ -416,15 +416,13 @@ -
- +
    {{ range .Props.BulletListItems}}
  • {{.}}
  • {{end}}
-
-
+