def test_out_of_quota(flask_client): user = User.create(email="[email protected]", password="******", name="Test User", activated=True) user.trial_end = None db.session.commit() # create api_key api_key = ApiKey.create(user.id, "for test") db.session.commit() # create MAX_NB_EMAIL_FREE_PLAN custom alias to run out of quota for _ in range(MAX_NB_EMAIL_FREE_PLAN): GenEmail.create_new(user.id, prefix="test") word = random_word() r = flask_client.post( url_for("api.new_custom_alias", hostname="www.test.com"), headers={"Authentication": api_key.code}, json={ "alias_prefix": "prefix", "alias_suffix": f".{word}@{EMAIL_DOMAIN}" }, ) assert r.status_code == 400 assert r.json == { "error": "You have reached the limitation of a free account with the maximum of 3 aliases, please upgrade your plan to create more aliases" }
def test_suggested_emails_for_user_who_cannot_create_new_alias(flask_client): # make sure user is not in trial user = User.create( email="[email protected]", password="******", name="Test User", activated=True, trial_end=None, ) db.session.commit() # make sure user runs out of quota to create new email for i in range(MAX_NB_EMAIL_FREE_PLAN): GenEmail.create_new(user_id=user.id, prefix="test") db.session.commit() suggested_email, other_emails = user.suggested_emails(website_name="test") # the suggested email is chosen from existing GenEmail assert GenEmail.get_by(email=suggested_email) # all other emails are generated emails for email in other_emails: assert GenEmail.get_by(email=email)
def test_out_of_quota(flask_client): user = User.create(email="[email protected]", password="******", name="Test User", activated=True) db.session.commit() # create api_key api_key = ApiKey.create(user.id, "for test") db.session.commit() # create 3 custom alias to run out of quota GenEmail.create_new(user.id, prefix="test") GenEmail.create_new(user.id, prefix="test") GenEmail.create_new(user.id, prefix="test") r = flask_client.post( url_for("api.new_custom_alias", hostname="www.test.com"), headers={"Authentication": api_key.code}, json={ "alias_prefix": "prefix", "alias_suffix": f".abcdef@{EMAIL_DOMAIN}" }, ) assert r.status_code == 400 assert r.json == { "error": "You have created 3 custom aliases, please upgrade to create more" }
def test_out_of_quota(flask_client): user = User.create(email="[email protected]", password="******", name="Test User", activated=True) db.session.commit() # create api_key api_key = ApiKey.create(user.id, "for test") db.session.commit() # create 3 random alias to run out of quota for _ in range(MAX_NB_EMAIL_FREE_PLAN): GenEmail.create_new(user.id, prefix="test1") GenEmail.create_new(user.id, prefix="test2") GenEmail.create_new(user.id, prefix="test3") r = flask_client.post( url_for("api.new_random_alias", hostname="www.test.com"), headers={"Authentication": api_key.code}, ) assert r.status_code == 400 assert ( r.json["error"] == "You have reached the limitation of a free account with the maximum of 3 aliases, please upgrade your plan to create more aliases" )
def test_different_scenarios(flask_client): user = User.create(email="[email protected]", password="******", name="Test User", activated=True) db.session.commit() # create api_key api_key = ApiKey.create(user.id, "for test") db.session.commit() # <<< without hostname >>> r = flask_client.get(url_for("api.options"), headers={"Authentication": api_key.code}) # { # "can_create_custom": True, # "custom": {"suffixes": ["*****@*****.**"], "suggestion": ""}, # "existing": ["*****@*****.**"], # } assert r.status_code == 200 assert r.json["can_create_custom"] assert len(r.json["existing"]) == 1 assert len(r.json["custom"]["suffixes"]) == 3 assert r.json["custom"]["suggestion"] == "" # no hostname => no suggestion # <<< with hostname >>> r = flask_client.get( url_for("api.options", hostname="www.test.com"), headers={"Authentication": api_key.code}, ) assert r.json["custom"]["suggestion"] == "test" # <<< with recommendation >>> alias = GenEmail.create_new(user.id, prefix="test") db.session.commit() AliasUsedOn.create(gen_email_id=alias.id, hostname="www.test.com") db.session.commit() r = flask_client.get( url_for("api.options", hostname="www.test.com"), headers={"Authentication": api_key.code}, ) assert r.json["recommendation"]["alias"] == alias.email assert r.json["recommendation"]["hostname"] == "www.test.com"
def test_different_scenarios_v2(flask_client): user = User.create(email="[email protected]", password="******", name="Test User", activated=True) db.session.commit() # create api_key api_key = ApiKey.create(user.id, "for test") db.session.commit() # <<< without hostname >>> r = flask_client.get(url_for("api.options_v2"), headers={"Authentication": api_key.code}) assert r.status_code == 200 # {'can_create': True, 'existing': ['*****@*****.**'], 'prefix_suggestion': '', 'suffixes': ['*****@*****.**']} assert r.json["can_create"] assert len(r.json["existing"]) == 1 assert r.json["suffixes"] assert r.json["prefix_suggestion"] == "" # no hostname => no suggestion # <<< with hostname >>> r = flask_client.get( url_for("api.options_v2", hostname="www.test.com"), headers={"Authentication": api_key.code}, ) assert r.json["prefix_suggestion"] == "test" # <<< with recommendation >>> alias = GenEmail.create_new(user.id, prefix="test") db.session.commit() AliasUsedOn.create(gen_email_id=alias.id, hostname="www.test.com") db.session.commit() r = flask_client.get( url_for("api.options_v2", hostname="www.test.com"), headers={"Authentication": api_key.code}, ) assert r.json["recommendation"]["alias"] == alias.email assert r.json["recommendation"]["hostname"] == "www.test.com"
def fake_data(): LOG.d("create fake data") # Remove db if exist if os.path.exists("db.sqlite"): LOG.d("remove existing db file") os.remove("db.sqlite") # Create all tables db.create_all() # Create a user user = User.create( email="*****@*****.**", name="John Wick", password="******", activated=True, is_admin=True, otp_secret="base32secret3232", ) db.session.commit() LifetimeCoupon.create(code="coupon", nb_used=10) db.session.commit() # Create a subscription for user Subscription.create( user_id=user.id, cancel_url="https://checkout.paddle.com/subscription/cancel?user=1234", update_url="https://checkout.paddle.com/subscription/update?user=1234", subscription_id="123", event_time=arrow.now(), next_bill_date=arrow.now().shift(days=10).date(), plan=PlanEnum.monthly, ) db.session.commit() api_key = ApiKey.create(user_id=user.id, name="Chrome") api_key.code = "code" GenEmail.create_new(user.id, "e1@") GenEmail.create_new(user.id, "e2@") GenEmail.create_new(user.id, "e3@") CustomDomain.create(user_id=user.id, domain="ab.cd", verified=True) CustomDomain.create(user_id=user.id, domain="very-long-domain.com.net.org", verified=True) db.session.commit() Directory.create(user_id=user.id, name="abcd") Directory.create(user_id=user.id, name="xyzt") db.session.commit() # Create a client client1 = Client.create_new(name="Demo", user_id=user.id) client1.oauth_client_id = "client-id" client1.oauth_client_secret = "client-secret" client1.published = True db.session.commit() RedirectUri.create(client_id=client1.id, uri="https://ab.com") client2 = Client.create_new(name="Demo 2", user_id=user.id) client2.oauth_client_id = "client-id2" client2.oauth_client_secret = "client-secret2" client2.published = True db.session.commit() db.session.commit()