[MM-47560]: In-product: Add support for new fields (back-end and front-end)
Этот коммит содержится в:
@@ -515,8 +515,9 @@ func TestGetCloudProducts(t *testing.T) {
|
|||||||
SKU: "sku",
|
SKU: "sku",
|
||||||
PriceID: "price_id",
|
PriceID: "price_id",
|
||||||
Family: "family",
|
Family: "family",
|
||||||
RecurringInterval: "recurring_interval",
|
RecurringInterval: "monthly",
|
||||||
BillingScheme: "billing_scheme",
|
BillingScheme: "billing_scheme",
|
||||||
|
CrossSellsTo: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ID: "prod_test2",
|
ID: "prod_test2",
|
||||||
@@ -526,8 +527,9 @@ func TestGetCloudProducts(t *testing.T) {
|
|||||||
SKU: "sku2",
|
SKU: "sku2",
|
||||||
PriceID: "price_id2",
|
PriceID: "price_id2",
|
||||||
Family: "family2",
|
Family: "family2",
|
||||||
RecurringInterval: "recurring_interval2",
|
RecurringInterval: "monthly",
|
||||||
BillingScheme: "billing_scheme2",
|
BillingScheme: "billing_scheme2",
|
||||||
|
CrossSellsTo: "prod_test3",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ID: "prod_test3",
|
ID: "prod_test3",
|
||||||
@@ -537,29 +539,36 @@ func TestGetCloudProducts(t *testing.T) {
|
|||||||
SKU: "sku3",
|
SKU: "sku3",
|
||||||
PriceID: "price_id3",
|
PriceID: "price_id3",
|
||||||
Family: "family3",
|
Family: "family3",
|
||||||
RecurringInterval: "recurring_interval3",
|
RecurringInterval: "yearly",
|
||||||
BillingScheme: "billing_scheme3",
|
BillingScheme: "billing_scheme3",
|
||||||
|
CrossSellsTo: "prod_test2",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
sanitizedProducts := []*model.Product{
|
sanitizedProducts := []*model.Product{
|
||||||
{
|
{
|
||||||
ID: "prod_test1",
|
ID: "prod_test1",
|
||||||
Name: "name",
|
Name: "name",
|
||||||
PricePerSeat: 10,
|
PricePerSeat: 10,
|
||||||
SKU: "sku",
|
SKU: "sku",
|
||||||
|
RecurringInterval: "monthly",
|
||||||
|
CrossSellsTo: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ID: "prod_test2",
|
ID: "prod_test2",
|
||||||
Name: "name2",
|
Name: "name2",
|
||||||
PricePerSeat: 100,
|
PricePerSeat: 100,
|
||||||
SKU: "sku2",
|
SKU: "sku2",
|
||||||
|
RecurringInterval: "monthly",
|
||||||
|
CrossSellsTo: "prod_test3",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ID: "prod_test3",
|
ID: "prod_test3",
|
||||||
Name: "name3",
|
Name: "name3",
|
||||||
PricePerSeat: 1000,
|
PricePerSeat: 1000,
|
||||||
SKU: "sku3",
|
SKU: "sku3",
|
||||||
|
RecurringInterval: "yearly",
|
||||||
|
CrossSellsTo: "prod_test2",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
t.Run("get products for admins", func(t *testing.T) {
|
t.Run("get products for admins", func(t *testing.T) {
|
||||||
@@ -615,8 +624,9 @@ func TestGetCloudProducts(t *testing.T) {
|
|||||||
require.Equal(t, returnedProducts[0].Description, "")
|
require.Equal(t, returnedProducts[0].Description, "")
|
||||||
require.Equal(t, returnedProducts[0].PriceID, "")
|
require.Equal(t, returnedProducts[0].PriceID, "")
|
||||||
require.Equal(t, returnedProducts[0].Family, model.SubscriptionFamily(""))
|
require.Equal(t, returnedProducts[0].Family, model.SubscriptionFamily(""))
|
||||||
require.Equal(t, returnedProducts[0].RecurringInterval, model.RecurringInterval(""))
|
require.Equal(t, returnedProducts[0].RecurringInterval, model.RecurringInterval("monthly"))
|
||||||
require.Equal(t, returnedProducts[0].BillingScheme, model.BillingScheme(""))
|
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].ID, "prod_test2")
|
||||||
require.Equal(t, returnedProducts[1].Name, "name2")
|
require.Equal(t, returnedProducts[1].Name, "name2")
|
||||||
@@ -625,8 +635,9 @@ func TestGetCloudProducts(t *testing.T) {
|
|||||||
require.Equal(t, returnedProducts[1].Description, "")
|
require.Equal(t, returnedProducts[1].Description, "")
|
||||||
require.Equal(t, returnedProducts[1].PriceID, "")
|
require.Equal(t, returnedProducts[1].PriceID, "")
|
||||||
require.Equal(t, returnedProducts[1].Family, model.SubscriptionFamily(""))
|
require.Equal(t, returnedProducts[1].Family, model.SubscriptionFamily(""))
|
||||||
require.Equal(t, returnedProducts[1].RecurringInterval, model.RecurringInterval(""))
|
require.Equal(t, returnedProducts[1].RecurringInterval, model.RecurringInterval("monthly"))
|
||||||
require.Equal(t, returnedProducts[1].BillingScheme, model.BillingScheme(""))
|
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].ID, "prod_test3")
|
||||||
require.Equal(t, returnedProducts[2].Name, "name3")
|
require.Equal(t, returnedProducts[2].Name, "name3")
|
||||||
@@ -635,7 +646,8 @@ func TestGetCloudProducts(t *testing.T) {
|
|||||||
require.Equal(t, returnedProducts[2].Description, "")
|
require.Equal(t, returnedProducts[2].Description, "")
|
||||||
require.Equal(t, returnedProducts[2].PriceID, "")
|
require.Equal(t, returnedProducts[2].PriceID, "")
|
||||||
require.Equal(t, returnedProducts[2].Family, model.SubscriptionFamily(""))
|
require.Equal(t, returnedProducts[2].Family, model.SubscriptionFamily(""))
|
||||||
require.Equal(t, returnedProducts[2].RecurringInterval, model.RecurringInterval(""))
|
require.Equal(t, returnedProducts[2].RecurringInterval, model.RecurringInterval("yearly"))
|
||||||
require.Equal(t, returnedProducts[2].BillingScheme, model.BillingScheme(""))
|
require.Equal(t, returnedProducts[2].BillingScheme, model.BillingScheme(""))
|
||||||
|
require.Equal(t, returnedProducts[2].CrossSellsTo, "prod_test2")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,13 +52,16 @@ type Product struct {
|
|||||||
Family SubscriptionFamily `json:"product_family"`
|
Family SubscriptionFamily `json:"product_family"`
|
||||||
RecurringInterval RecurringInterval `json:"recurring_interval"`
|
RecurringInterval RecurringInterval `json:"recurring_interval"`
|
||||||
BillingScheme BillingScheme `json:"billing_scheme"`
|
BillingScheme BillingScheme `json:"billing_scheme"`
|
||||||
|
CrossSellsTo string `json:"cross_sells_to"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserFacingProduct struct {
|
type UserFacingProduct struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
SKU string `json:"sku"`
|
SKU string `json:"sku"`
|
||||||
PricePerSeat float64 `json:"price_per_seat"`
|
PricePerSeat float64 `json:"price_per_seat"`
|
||||||
|
RecurringInterval RecurringInterval `json:"recurring_interval"`
|
||||||
|
CrossSellsTo string `json:"cross_sells_to"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddOn represents an addon to a product.
|
// AddOn represents an addon to a product.
|
||||||
|
|||||||
@@ -416,15 +416,13 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left" style="font-size:0px;padding:10px 25px;padding-top:0px;padding-right:118px;padding-left:60px;word-break:break-word;">
|
<td align="left" style="font-size:0px;padding:10px 25px;padding-top:0px;padding-right:118px;padding-left:60px;word-break:break-word;">
|
||||||
<div style="font-family:Open Sans, sans-serif;font-size:16px;font-weight:400;line-height:24px;text-align:left;color:#3F4350;">
|
<div style="font-family:Open Sans, sans-serif;font-size:16px;font-weight:400;line-height:24px;text-align:left;color:#3F4350;"><mj-raw>
|
||||||
<mj-raw>
|
|
||||||
<ul padding-left="118px" padding-right="118px">
|
<ul padding-left="118px" padding-right="118px">
|
||||||
{{ range .Props.BulletListItems}}
|
{{ range .Props.BulletListItems}}
|
||||||
<li text-align="left">{{.}}</li>
|
<li text-align="left">{{.}}</li>
|
||||||
{{end}}
|
{{end}}
|
||||||
</ul>
|
</ul>
|
||||||
</mj-raw>
|
</mj-raw></div>
|
||||||
</div>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user