def test_account_type(self): self.assert200(self.client.get(url_for('users.account_type'))) Tier.create( name="Test tier", price=42, available=True, primary=False, ) self.assert200(self.client.get(url_for('users.account_type')))
def test_tier(self): t = Tier.create( name="Test tier", price=42, available=True, primary=False, ) self.assert200(self.client.get(url_for('users.tier', tier_id=t.id))) self.assert404(self.client.get(url_for('users.tier', tier_id=t.id + 1)))
def test_signup_commercial(self): resp = self.client.get(url_for('users.signup_commercial')) self.assertRedirects(resp, url_for('users.account_type')) unavailable_tier = Tier.create( name="Unavailable tier", price=42, available=False, ) resp = self.client.get(url_for('users.signup_commercial', tier_id=unavailable_tier.id)) self.assertRedirects(resp, url_for('users.account_type')) # With missing tier resp = self.client.get(url_for('users.signup_commercial', tier_id=unavailable_tier.id + 1)) self.assertRedirects(resp, url_for('users.account_type'))
def test_signup_commercial(self): resp = self.client.get(url_for('users.signup_commercial')) self.assertRedirects(resp, url_for('users.account_type')) unavailable_tier = Tier.create( name="Unavailable tier", price=42, available=False, ) resp = self.client.get( url_for('users.signup_commercial', tier_id=unavailable_tier.id)) self.assertRedirects(resp, url_for('users.account_type')) # With missing tier resp = self.client.get( url_for('users.signup_commercial', tier_id=unavailable_tier.id + 1)) self.assertRedirects(resp, url_for('users.account_type'))
def signup_commercial(): """Sign up endpoint for commercial users. Commercial users need to choose support tier before filling out the form. `tier_id` argument with ID of a tier of choice is required there. """ tier_id = request.args.get('tier_id') if not tier_id: flash.warn("You need to choose support tier before signing up!") return redirect(url_for('.account_type')) selected_tier = Tier.get(id=tier_id) if not selected_tier or not selected_tier.available: flash.error("You need to choose existing tier before signing up!") return redirect(url_for(".account_type")) mb_username = session.fetch_data(SESSION_KEY_MB_USERNAME) if not mb_username: session.persist_data(**{ SESSION_KEY_ACCOUNT_TYPE: ACCOUNT_TYPE_COMMERCIAL, SESSION_KEY_TIER_ID: selected_tier.id, }) return redirect(url_for(".signup")) mb_email = session.fetch_data(SESSION_KEY_MB_EMAIL) form = CommercialSignUpForm(default_email=mb_email) def custom_validation(f): if f.amount_pledged.data < selected_tier.price: flash.warning("Custom amount must be more than threshold amount" "for selected tier or equal to it!") return False # Complete address is required if payment method is invoicing if f.payment_method.data == PAYMENT_METHOD_INVOICING: if not (form.address_street.data and form.address_city.data and form.address_state.data and form.address_postcode.data and form.address_country.data): flash.warning("You need to fill in all address fields if your " "selected payment method is invoicing!") return False return True if form.validate_on_submit() and custom_validation(form): new_user = User.add( is_commercial=True, musicbrainz_id=mb_username, contact_name=form.contact_name.data, contact_email=form.contact_email.data, data_usage_desc=form.usage_desc.data, org_name=form.org_name.data, org_desc=form.org_desc.data, website_url=form.website_url.data, org_logo_url=form.logo_url.data, api_url=form.api_url.data, address_street=form.address_street.data, address_city=form.address_city.data, address_state=form.address_state.data, address_postcode=form.address_postcode.data, address_country=form.address_country.data, tier_id=tier_id, payment_method=form.payment_method.data, amount_pledged=form.amount_pledged.data, ) login_user(new_user) flash.success("Thanks for signing up! Your application will be reviewed " "soon. We will send you updates via email.") send_mail( subject="[MetaBrainz] Sign up confirmation", text="Dear %s,\n\nThank you for signing up!\n\nCurrently everyone is on " "a summer vacation until July 14. Your application will be reviewed " "as soon as we get back. We will send you updates via email. Sorry " "for the inconvenience." % new_user.contact_name, recipients=[new_user.contact_email], ) return redirect(url_for('.profile')) return render_template("users/signup-commercial.html", form=form, tier=selected_tier)
def tier(tier_id): t = Tier.get(id=tier_id) if not t or not t.available: raise NotFound("Can't find tier with a specified ID.") return render_template('users/tier.html', tier=t)
def account_type(): return render_template( 'users/account-type.html', tiers=Tier.get_available(sort=True), featured_users=User.get_featured() )
def supporters_list(): return render_template('users/supporters-list.html', tiers=Tier.get_available(sort=True, sort_desc=True))
def signup_commercial(): """Sign up endpoint for commercial users. Commercial users need to choose support tier before filling out the form. `tier_id` argument with ID of a tier of choice is required there. """ tier_id = request.args.get('tier_id') if not tier_id: flash.warn("You need to choose support tier before signing up!") return redirect(url_for('.account_type')) selected_tier = Tier.get(id=tier_id) if not selected_tier or not selected_tier.available: flash.error("You need to choose existing tier before signing up!") return redirect(url_for(".account_type")) mb_username = session.fetch_data(SESSION_KEY_MB_USERNAME) if not mb_username: session.persist_data(**{ SESSION_KEY_ACCOUNT_TYPE: ACCOUNT_TYPE_COMMERCIAL, SESSION_KEY_TIER_ID: selected_tier.id, }) return redirect(url_for(".signup")) mb_email = session.fetch_data(SESSION_KEY_MB_EMAIL) form = CommercialSignUpForm(default_email=mb_email) def custom_validation(f): if f.amount_pledged.data < selected_tier.price: flash.warning("Custom amount must be more than threshold amount" "for selected tier or equal to it!") return False return True if form.validate_on_submit() and custom_validation(form): # Checking if this user already exists new_user = User.get(musicbrainz_id=mb_username) if not new_user: new_user = User.add( is_commercial=True, musicbrainz_id=mb_username, contact_name=form.contact_name.data, contact_email=form.contact_email.data, data_usage_desc=form.usage_desc.data, org_name=form.org_name.data, org_desc=form.org_desc.data, website_url=form.website_url.data, org_logo_url=form.logo_url.data, api_url=form.api_url.data, address_street=form.address_street.data, address_city=form.address_city.data, address_state=form.address_state.data, address_postcode=form.address_postcode.data, address_country=form.address_country.data, tier_id=tier_id, amount_pledged=form.amount_pledged.data, ) flash.success("Thanks for signing up! Your application will be reviewed " "soon. We will send you updates via email.") send_mail( subject="[MetaBrainz] Sign up confirmation", text='Dear %s,\n\nThank you for signing up!\n\nYour application' ' will be reviewed soon. We will send you updates via email.' % new_user.contact_name, recipients=[new_user.contact_email], ) else: flash.info("You already have a MetaBrainz account!") login_user(new_user) return redirect(url_for('.profile')) return render_template("users/signup-commercial.html", form=form, tier=selected_tier, mb_username=mb_username)
def signup_commercial(): """Sign up endpoint for commercial users. Commercial users need to choose support tier before filling out the form. `tier_id` argument with ID of a tier of choice is required there. """ tier_id = request.args.get('tier_id') if not tier_id: flash.warn( gettext("You need to choose support tier before signing up!")) return redirect(url_for('.account_type')) selected_tier = Tier.get(id=tier_id) if not selected_tier or not selected_tier.available: flash.error( gettext("You need to choose existing tier before signing up!")) return redirect(url_for(".account_type")) mb_username = session.fetch_data(SESSION_KEY_MB_USERNAME) if not mb_username: session.persist_data( **{ SESSION_KEY_ACCOUNT_TYPE: ACCOUNT_TYPE_COMMERCIAL, SESSION_KEY_TIER_ID: selected_tier.id, }) return redirect(url_for(".signup")) mb_email = session.fetch_data(SESSION_KEY_MB_EMAIL) form = CommercialSignUpForm(default_email=mb_email) def custom_validation(f): if f.amount_pledged.data < selected_tier.price: flash.warning( gettext("Custom amount must be more than threshold amount" "for selected tier or equal to it!")) return False return True if form.validate_on_submit() and custom_validation(form): # Checking if this user already exists new_user = User.get(musicbrainz_id=mb_username) if not new_user: new_user = User.add( is_commercial=True, musicbrainz_id=mb_username, contact_name=form.contact_name.data, contact_email=form.contact_email.data, data_usage_desc=form.usage_desc.data, org_name=form.org_name.data, org_desc=form.org_desc.data, website_url=form.website_url.data, org_logo_url=form.logo_url.data, api_url=form.api_url.data, address_street=form.address_street.data, address_city=form.address_city.data, address_state=form.address_state.data, address_postcode=form.address_postcode.data, address_country=form.address_country.data, tier_id=tier_id, amount_pledged=form.amount_pledged.data, ) flash.success( gettext( "Thanks for signing up! Your application will be reviewed " "soon. We will send you updates via email.")) try: send_mail( subject="[MetaBrainz] Sign up confirmation", text= 'Dear %s,\n\nThank you for signing up!\n\nYour application' ' will be reviewed soon. We will send you updates via email.' % new_user.contact_name, recipients=[new_user.contact_email], ) except MailException as e: logging.error(e) flash.warn( gettext( "Failed to send welcome email to you. We are looking into it. " "Sorry for inconvenience!")) else: flash.info(gettext("You already have a MetaBrainz account!")) login_user(new_user) return redirect(url_for('.profile')) return render_template("users/signup-commercial.html", form=form, tier=selected_tier, mb_username=mb_username)
def tier(tier_id): t = Tier.get(id=tier_id) if not t or not t.available: raise NotFound(gettext("Can't find tier with a specified ID.")) return render_template('users/tier.html', tier=t)
def account_type(): return render_template('users/account-type.html', tiers=Tier.get_available(sort=True), featured_users=User.get_featured())