Skip to content

Add error handling for add-on assignment

What does this MR do and why?

Adds error handling for add-on assignment on Usage Quotas page.

Related to #420010

Screenshots or screen recordings

Scenario Screenshot
Error when fetching Code Suggestions add-on details
ScreenshotScreenshot_2023-08-08_at_4.02.25_PM
Error when assigning add-on
ScreenshotScreenshot_2023-08-09_at_10.56.24_AM
Error when un-assigning add-on
ScreenshotScreenshot_2023-08-09_at_10.57.14_AM
No seats available to assign add-on
ScreenshotScreenshot_2023-08-08_at_4.10.06_PM

How to set up and validate locally

Add-on setup

  1. Customers Dot needs to be setup in order to view the billing page for a group

  2. Start GDK in SaaS mode GITLAB_SIMULATE_SAAS=1 gdk start

  3. Create a Group

  4. Enable enable_hamilton_in_usage_quotas_ui FF (globally, or for your group)

  5. Buy a Subscription for your group from Settings > Billing

  6. Visit /groups/<your-namespace-name>/-/usage_quotas#seats-quota-tab

  7. Purchase add-on for namespace

    # Get the desired namespace
    namespace = Namespace.last
    # Create an add-on
    add_on = GitlabSubscriptions::AddOn.find_or_create_by!(name: "code_suggestions") {|e| e.description = "Test"}
    # Purchase add-ons for the namespace
    add_on_purchase = GitlabSubscriptions::AddOnPurchase.create!(
      add_on: add_on, namespace: namespace, expires_on: 1.month.from_now, quantity: 2, purchase_xid: 'A-S0001'
    )
  8. Add this snippet here to enable add-on assignment. This enables the add-on assignment for the first 2 users in the list (as per assignable value).

    • Note: Make sure there are at least 2 users in the group if using the below snippet to update the first 2 members data.
     state.members[0].add_ons = { assigned: [], assignable: [{ name: 'CODE_SUGGESTIONS' }] };
     state.members[1].add_ons = { assigned: [], assignable: [{ name: 'CODE_SUGGESTIONS' }] };

Error testing

Error when fetching Code Suggestions add-on details

  1. Comment this line and refresh the Usage Quotas page

Error when assigning add-on

  1. Comment this line and attempt to assign add-on to a non-guest user

Error when un-assigning add-on

  1. Assign add-on to a non-guest user
  2. Update the add_on info for that member to have an assigned add-on state.members[0].add_ons = { assigned: [{ name: 'CODE_SUGGESTIONS' }], assignable: [{ name: 'CODE_SUGGESTIONS' }] };
  3. Comment this line

No seats available to assign add-on

Attempt to assign add-on to more users than the purchased add-on quantity. This would need having more number of users in the user list (in the group) than the purchased quantity.

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Vamsi Vempati

Merge request reports