I think there's a small bug in the 'updateSubscription()' method of the 'subscriptions.js' mixin that's preventing messages thrown in 'IneligibleForPlan::because($message)' from being displayed to the user (I'm running Spark version 3.0.5).
The message that gets displayed when the IneligibleForPlan exception gets thrown is hard-coded to "We were unable to update your subscription. Please contact customer support".
I think the line:
this.planForm.errors.set({plan: ["We were unable to update your subscription. Please contact customer support."]});
Go ahead and make an issue in github. Make sure you follow the guidelines in the Spark repo. If you feel confident of a necessary change, make a pull request. Personally, the hard coded message doesn't bother me at all and you can easily change it yourself.
Ok, thanks, I'll submit it as an issue. In my opinion it's a really good and important feature to have - if you are going to refuse to downgrade a user's subscription you need to tell them why RIGHT NOW - refusing to downgrade them and giving them a generic "contact support" message is a really (unacceptably) bad user experience. I did change the code myself, but I'd rather have the Spark developers make the change so that all Spark users can benefit from it.
I cannot connect to the 5.x repo, but this appears to be fixed in 6.x. For 5.x you need to edit /vendor/laravel/spark/resources/assets/js/mixins/subscriptions.js
if (errors.response.status == 422) {
this.planForm.errors.set(errors.response.data.errors);
} else {
this.planForm.errors.set({plan: ["We were unable to update your subscription. Please contact customer support."]});
}