Skip to content

Commit

Permalink
Merge branch 'hotfix/v4.31.0b-low-tier-plans' into 'release/v4.31.0'
Browse files Browse the repository at this point in the history
Hotfix for v4.31.0a -> v4.31.0b (Low Tier plans)

See merge request sdk/sdk!5530
  • Loading branch information
sergiohs84 committed May 17, 2024
2 parents 8bda121 + 0e077d6 commit 7a6e6bc
Show file tree
Hide file tree
Showing 6 changed files with 147 additions and 55 deletions.
3 changes: 3 additions & 0 deletions include/mega/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -850,6 +850,9 @@ typedef enum {
ACCOUNT_TYPE_PROII = 2,
ACCOUNT_TYPE_PROIII = 3,
ACCOUNT_TYPE_LITE = 4,
ACCOUNT_TYPE_STARTER = 11,
ACCOUNT_TYPE_BASIC = 12,
ACCOUNT_TYPE_ESSENTIAL = 13,
ACCOUNT_TYPE_BUSINESS = 100,
ACCOUNT_TYPE_PRO_FLEXI = 101
} AccountType;
Expand Down
12 changes: 12 additions & 0 deletions include/megaapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -13212,6 +13212,9 @@ class MegaApi
* - MegaAccountDetails::ACCOUNT_TYPE_PROII = 2
* - MegaAccountDetails::ACCOUNT_TYPE_PROIII = 3
* - MegaAccountDetails::ACCOUNT_TYPE_LITE = 4
* - MegaAccountDetails::ACCOUNT_TYPE_STARTER = 11
* - MegaAccountDetails::ACCOUNT_TYPE_BASIC = 12
* - MegaAccountDetails::ACCOUNT_TYPE_ESSENTIAL = 13
*
* @param listener MegaRequestListener to track this request
*/
Expand Down Expand Up @@ -22115,6 +22118,9 @@ class MegaAccountDetails
ACCOUNT_TYPE_PROII = 2,
ACCOUNT_TYPE_PROIII = 3,
ACCOUNT_TYPE_LITE = 4,
ACCOUNT_TYPE_STARTER = 11,
ACCOUNT_TYPE_BASIC = 12,
ACCOUNT_TYPE_ESSENTIAL = 13,
ACCOUNT_TYPE_BUSINESS = 100,
ACCOUNT_TYPE_PRO_FLEXI = 101 // also known as PRO 4
};
Expand All @@ -22136,6 +22142,9 @@ class MegaAccountDetails
* - MegaAccountDetails::ACCOUNT_TYPE_PROII = 2
* - MegaAccountDetails::ACCOUNT_TYPE_PROIII = 3
* - MegaAccountDetails::ACCOUNT_TYPE_LITE = 4
* - MegaAccountDetails::ACCOUNT_TYPE_STARTER = 11
* - MegaAccountDetails::ACCOUNT_TYPE_BASIC = 12
* - MegaAccountDetails::ACCOUNT_TYPE_ESSENTIAL = 13
* - MegaAccountDetails::ACCOUNT_TYPE_BUSINESS = 100
* - MegaAccountDetails::ACCOUNT_TYPE_PRO_FLEXI = 101
*/
Expand Down Expand Up @@ -22536,6 +22545,9 @@ class MegaPricing
* - MegaAccountDetails::ACCOUNT_TYPE_PROII = 2
* - MegaAccountDetails::ACCOUNT_TYPE_PROIII = 3
* - MegaAccountDetails::ACCOUNT_TYPE_LITE = 4
* - MegaAccountDetails::ACCOUNT_TYPE_STARTER = 11
* - MegaAccountDetails::ACCOUNT_TYPE_BASIC = 12
* - MegaAccountDetails::ACCOUNT_TYPE_ESSENTIAL = 13
* - MegaAccountDetails::ACCOUNT_TYPE_BUSINESS = 100
* - MegaAccountDetails::ACCOUNT_TYPE_PRO_FLEXI = 101
*/
Expand Down
30 changes: 20 additions & 10 deletions src/megaapi_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11835,19 +11835,29 @@ bool MegaApiImpl::isValidTypeNode(const Node *node, int type) const
}

// map to an ACCOUNT_* value to an int that can be compared:
// free -> lite -> proi -> proii -> proiii
// free -> starter -> basic -> essential -> lite -> proi -> proii -> proiii
// the ACCOUNT_* values are out of order
// int proLevel is a MegaAccountDetails::ACCOUNT_*
static inline int orderProLevel(int proLevel)
{
switch (proLevel)
{
case MegaAccountDetails::ACCOUNT_TYPE_FREE: // 0
return -1;
case MegaAccountDetails::ACCOUNT_TYPE_LITE: // 4
return 0;
default:
return proLevel; // 1..3
case MegaAccountDetails::ACCOUNT_TYPE_STARTER:
return 1;
case MegaAccountDetails::ACCOUNT_TYPE_BASIC:
return 2;
case MegaAccountDetails::ACCOUNT_TYPE_ESSENTIAL:
return 3;
case MegaAccountDetails::ACCOUNT_TYPE_LITE:
return 4;
case MegaAccountDetails::ACCOUNT_TYPE_PROI:
return 5;
case MegaAccountDetails::ACCOUNT_TYPE_PROII:
return 6;
case MegaAccountDetails::ACCOUNT_TYPE_PROIII:
return 7;
default:
return 0;
}
}

Expand All @@ -11864,9 +11874,9 @@ int MegaApiImpl::calcRecommendedProLevel(MegaPricing& pricing, MegaAccountDetail
uint64_t bestStorageBytes = UINT64_MAX;
for (int i = 0; i <= pricing.getNumProducts(); ++i)
{
// only upgrade to lite, pro1, pro2 and pro3
// only upgrade to starter, basic, essential, lite, pro1, pro2 and pro3
int planProLevel = pricing.getProLevel(i);
if (planProLevel < MegaAccountDetails::ACCOUNT_TYPE_PROI || planProLevel > MegaAccountDetails::ACCOUNT_TYPE_LITE)
if (planProLevel < MegaAccountDetails::ACCOUNT_TYPE_PROI || planProLevel > MegaAccountDetails::ACCOUNT_TYPE_ESSENTIAL)
continue;
// only monthly plans
int planMonths = pricing.getMonths(i);
Expand All @@ -11882,7 +11892,7 @@ int MegaApiImpl::calcRecommendedProLevel(MegaPricing& pricing, MegaAccountDetail
uint64_t planStorageBytes = (uint64_t)planStorageGb * (uint64_t)(1024 * 1024 * 1024);
if (usedStorageBytes > planStorageBytes)
continue;
// must be an upgrade free->lite->proi->proii->proiii
// must be an upgrade free->starter->basic->essential->lite->proi->proii->proiii
int orderedPlanProLevel = orderProLevel(planProLevel);
if (orderedCurrProLevel >= orderedPlanProLevel)
continue;
Expand Down
6 changes: 6 additions & 0 deletions src/useralerts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1063,6 +1063,12 @@ string UserAlert::Payment::getProPlanName()
return "Business"; // 19530
case ACCOUNT_TYPE_PRO_FLEXI:
return "Pro Flexi";
case ACCOUNT_TYPE_STARTER:
return "Starter";
case ACCOUNT_TYPE_BASIC:
return "Basic";
case ACCOUNT_TYPE_ESSENTIAL:
return "Essential";
case ACCOUNT_TYPE_FREE:
[[fallthrough]];
default:
Expand Down
14 changes: 7 additions & 7 deletions tests/integration/SdkTest_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14510,22 +14510,22 @@ TEST_F(SdkTest, GetRecommendedProLevel)

int level = -1;
int err = synchronousGetRecommendedProLevel(0, level);
ASSERT_EQ(err, API_OK) << "synchronousGetRecommendedProLevel() failed: " << err << ": " << MegaError::getErrorString(err);
ASSERT_EQ(err, API_OK) << "Get Recommended Pro Level failed: " << MegaError::getErrorString(err);
err = synchronousGetPricing(0);
ASSERT_EQ(err, API_OK) << "synchronousGetPricing() failed: " << err << ": " << MegaError::getErrorString(err);
ASSERT_EQ(err, API_OK) << "Get Pricing failed: " << MegaError::getErrorString(err);

bool liteAvailable = false;
bool starterAvailable = false;
for (int i = 0; i < mApi[0].mMegaPricing->getNumProducts(); ++i)
{
if (mApi[0].mMegaPricing->getProLevel(i) == MegaAccountDetails::ACCOUNT_TYPE_LITE)
if (mApi[0].mMegaPricing->getProLevel(i) == MegaAccountDetails::ACCOUNT_TYPE_STARTER)
{
LOG_debug << "GetRecommendedProLevel: ACCOUNT_TYPE_LITE is available.";
liteAvailable = true;
starterAvailable = true;
break;
}
}

ASSERT_EQ(level, liteAvailable ? MegaAccountDetails::ACCOUNT_TYPE_LITE : MegaAccountDetails::ACCOUNT_TYPE_PROI);
ASSERT_TRUE(starterAvailable) << "Starter plan not available !";
ASSERT_EQ(level, MegaAccountDetails::ACCOUNT_TYPE_STARTER);
}

/**
Expand Down
Loading

0 comments on commit 7a6e6bc

Please sign in to comment.