def test_email_registration_existing_email(test_client, db_init): """ GIVEN one inserted user WHEN register is hit with existing email THEN - Redirection on signin - Expected message is flashed in email category - No user is inserted """ UserFactory.create(email="*****@*****.**") expected_flash = "Email already exists" response = test_client.post("/register", data={ "signin_email": "*****@*****.**", "signin_first_name": user["first_name"], "signin_last_name": user["last_name"], "signin_password": user["password"], "signin_password_confirm": user["password"], "signin_birth_data": user["birth_date"] }) assert response.location.endswith("/signin") with test_client.session_transaction() as session: assert "email" in dict(session["_flashes"]).keys() assert dict(session["_flashes"])["email"] is not None assert dict(session["_flashes"])["email"] == expected_flash assert User.query.count() == 1
def setUp(self): super(TestOpportunitiesAdminBase, self).setUp() try: mkdir(current_app.config.get('UPLOAD_DESTINATION')) except OSError: rmtree(current_app.config.get('UPLOAD_DESTINATION')) mkdir(current_app.config.get('UPLOAD_DESTINATION')) import_nigp(current_app.config.get('PROJECT_ROOT') + '/test/mock/nigp.csv') self.department1 = DepartmentFactory(name='test') AcceptedEmailDomainsFactory.create(domain='foo.com') self.admin = UserFactory.create( email='*****@*****.**', roles=[RoleFactory.create(name='admin')] ) self.staff = UserFactory.create( email='*****@*****.**', roles=[RoleFactory.create(name='staff')] ) self.document = RequiredBidDocumentFactory.create() self.vendor = VendorFactory.create(email='*****@*****.**', business_name='foo2') self.opportunity1 = OpportunityFactory.create( contact=self.admin, created_by=self.staff, title=u'tést unïcode title', description=u'tést unïcode déscription', is_public=True, is_archived=False, planned_publish=datetime.date.today() + datetime.timedelta(1), planned_submission_start=datetime.date.today() + datetime.timedelta(2), planned_submission_end=datetime.datetime.today() + datetime.timedelta(2), vendor_documents_needed=[self.document.id], categories=(Category.query.first(),) ).save() self.opportunity2 = OpportunityFactory.create( contact=self.admin, created_by=self.staff, is_public=True, is_archived=False, planned_publish=datetime.date.today(), planned_submission_start=datetime.date.today() + datetime.timedelta(2), planned_submission_end=datetime.datetime.today() + datetime.timedelta(2), categories=(Category.query.first(),), enable_qa=False, qa_start=None, qa_end=None ).save() self.opportunity3 = OpportunityFactory.create( contact=self.admin, created_by=self.staff, is_public=True, is_archived=False, planned_publish=datetime.date.today() - datetime.timedelta(2), planned_submission_start=datetime.date.today() - datetime.timedelta(2), planned_submission_end=datetime.datetime.today() - datetime.timedelta(1), categories=(Category.query.first(),) ).save() self.opportunity4 = OpportunityFactory.create( contact=self.admin, created_by=self.staff, is_public=True, is_archived=False, planned_publish=datetime.date.today() - datetime.timedelta(1), planned_submission_start=datetime.date.today(), planned_submission_end=datetime.datetime.today() + datetime.timedelta(2), title='TEST TITLE!', categories=(Category.query.first(),) ).save()
def test_user_update_profile(self): user = UserFactory.create( roles=[self.staff], department=self.new_dept ) db.session.commit() self.login_user(user) first_profile_visit = self.client.get('/users/profile') self.assertTrue('Welcome to Beacon' in first_profile_visit.data) bad_update = self.client.post('/users/profile', data=dict( department='THIS IS NOT A VALID DEPARTMENT' ), follow_redirects=True) self.assertTrue( 'THIS IS NOT A VALID DEPARTMENT' not in [i.department for i in User.query.all()] ) self.assertTrue('Not a valid choice' in bad_update.data) update = self.client.post('/users/profile', data=dict( first_name='foo', last_name='bar', department=str(self.department1.id) )) self.assertEquals(update.status_code, 302) self.assert_flashes('Updated your profile!', 'alert-success') repeat_visit = self.client.get('/users/profile') self.assertFalse('Welcome to Beacon' in repeat_visit.data)
def test_templates(self): # insert our opportunity, users admin_role = RoleFactory.create(name='admin') admin = UserFactory.create(role=admin_role) opportunity = OpportunityFactory.create( contact=admin, created_by=admin, is_public=True, planned_publish=datetime.date.today() - datetime.timedelta(1), planned_submission_start=datetime.date.today() + datetime.timedelta(2), planned_submission_end=datetime.datetime.today() + datetime.timedelta(2) ) for rule in current_app.url_map.iter_rules(): _endpoint = rule.endpoint.split('.') # filters out non-beacon endpoints if (len(_endpoint) > 1 and _endpoint[1] == 'static') or \ _endpoint[0] != ('opportunities', 'opportunities_admin'): continue else: if '<int:' in rule.rule: response = self.client.get(url_for(rule.endpoint, opportunity_id=opportunity.id)) else: response = self.client.get(rule.rule) self.assert200(response)
def setUp(self): super(TestBeaconJobs, self).setUp() self.yesterday = datetime.datetime.today() - datetime.timedelta(days=1) today = datetime.datetime.today() tomorrow = datetime.datetime.today() + datetime.timedelta(days=1) self.category = CategoryFactory.create() self.admin = UserFactory.create() self.opportunity = OpportunityFactory.create( is_public=True, planned_publish=today, planned_submission_start=today, planned_submission_end=tomorrow, categories=set([self.category]), created_by=self.admin, published_at=today ) self.opportunity2 = OpportunityFactory.create( is_public=True, planned_publish=self.yesterday, planned_submission_start=today, planned_submission_end=tomorrow, publish_notification_sent=True, categories=set([self.category]), created_by=self.admin, published_at=self.yesterday ) self.opportunity3 = OpportunityFactory.create( is_public=False, planned_publish=today, planned_submission_start=today, planned_submission_end=tomorrow, publish_notification_sent=False, categories=set([self.category]), created_by=self.admin, published_at=today ) self.opportunity4 = OpportunityFactory.create( is_public=True, planned_publish=self.yesterday, planned_submission_start=self.yesterday, planned_submission_end=today, publish_notification_sent=True, categories=set([self.category]), created_by=self.admin, published_at=self.yesterday ) VendorFactory.create(opportunities=set([self.opportunity])) VendorFactory.create(categories=set([self.category]))
def test_organization_is_associated_with_user( create_organization: CreateOrganization, session): user = UserFactory.create() organization = create_organization.do(user, VALID_ORGANIZATION_DATA) user = session.query(User).get(user.id) assert user.organization.id == organization.id
def test_cannot_create_organization_with_taken_name( create_organization: CreateOrganization): user = UserFactory.create() create_organization.do(user, VALID_ORGANIZATION_DATA) with pytest.raises(ConflictError): create_organization.do(user, VALID_ORGANIZATION_DATA)
def test_templates(self): # insert our opportunity, users admin_role = RoleFactory.create(name='admin') admin = UserFactory.create(role=admin_role) opportunity = OpportunityFactory.create( contact=admin, created_by=admin, is_public=True, planned_publish=datetime.date.today() - datetime.timedelta(1), planned_submission_start=datetime.date.today() + datetime.timedelta(2), planned_submission_end=datetime.datetime.today() + datetime.timedelta(2)) for rule in current_app.url_map.iter_rules(): _endpoint = rule.endpoint.split('.') # filters out non-beacon endpoints if (len(_endpoint) > 1 and _endpoint[1] == 'static') or \ _endpoint[0] != ('opportunities', 'opportunities_admin'): continue else: if '<int:' in rule.rule: response = self.client.get( url_for(rule.endpoint, opportunity_id=opportunity.id)) else: response = self.client.get(rule.rule) self.assert200(response)
def test_create_organization_with_long_username( create_organization: CreateOrganization): user = UserFactory.create() long_name = str(["a"] * 100) data = {**VALID_ORGANIZATION_DATA, "name": long_name} testutils.assert_validation_errors( ["name"], lambda: create_organization.do(user, data))
def setUp(self): super(TestUserAuth, self).setUp() self.email = '*****@*****.**' user = UserFactory.create(email=self.email) user.save() AcceptedEmailDomains.create(domain='foo.com') DepartmentFactory.create(name='New User').save() self.department1 = DepartmentFactory.create(name='Test').save()
def test_me_returns_user_when_successful(client, session): user = UserFactory.create(username="******") headers = {"Authorization": "Bearer {}".format(user.id)} response = client.get(url_for("me"), headers=headers) assert response.status_code == 200 assert response.json["user"]["id"] == user.id assert response.json["user"]["username"] == "meow"
def test_delete_button_dont_appear_on_other_users_page(test_client, db_init, insert_user, login_user): """ GIVEN one inserted and logged-in user WHEN browsing another's user page THEN delete button is not displayed """ second_user = UserFactory.create() db_init.session.commit() response = test_client.get(f"/user/{second_user.id}") assert "Delete post" not in response.data.decode("utf-8")
def test_create_organization_returns_organization_when_successful( client, session): user = UserFactory.create(username="******") headers = {"Authorization": "Bearer {}".format(user.id)} org_data = {"name": "My Organization"} response = client.post(url_for("create_organization"), headers=headers, json=org_data) assert response.status_code == 201 assert response.json["organization"]["id"] assert response.json["organization"]["name"] == "My Organization"
def test_like_model_inserts_data_correctly(test_client, db_init, insert_user): """ GIVEN one inserted post, two users WHEN Likes are inserted using model THEN - Likes are indeed inserted - Likes's attributes are correct - Relationship is bi-directionnal (likes can be retrieved from post) """ first_user = User.query.first() post = PostFactory(user=first_user, user_id=first_user.id) like = Like( user=first_user, user_id=first_user.id, post=post, post_id=post.id ) second_user = UserFactory.create() second_like = Like( user=second_user, user_id=second_user.id, post=post, post_id=post.id ) DB.session.add_all([like, second_like, second_user]) DB.session.commit() assert Like.query.count() == 2 first_like = Like.query.filter(Like.user_id == first_user.id).first() assert first_like is not None assert first_like.post == post assert first_like.post_id == post.id second_like = Like.query.filter(Like.user_id == second_user.id).first() assert second_like is not None assert second_like.post == post assert second_like.post_id == post.id assert len(post.likes) == 2 assert first_like in post.likes assert second_like in post.likes
def test_create_organization(create_organization: CreateOrganization): user = UserFactory.create() org = create_organization.do(user, VALID_ORGANIZATION_DATA) assert org.id assert org.name == VALID_ORGANIZATION_DATA["name"]
def test_create_hold(create_hold: CreateHold): user = UserFactory.create() event = EventFactory.create() hold = create_hold.do(user, {"event_id": event.id, "quantity": 3})
def test_signup(self): admin_role = RoleFactory.create(name='admin') superadmin_role = RoleFactory.create(name='superadmin') UserFactory.create(role=admin_role) UserFactory.create(email='*****@*****.**', role=superadmin_role) response = self.client.get('/signup') self.assert200(response) subcats = json.loads(self.get_context_variable('subcategories')) # assert three categories (plus the total category) self.assertEquals(len(subcats.keys()), 4) # assert five total subcatgories (plus 5 in the total field) self.assertEquals(len([item for sublist in subcats.values() for item in sublist]), 10) # assert email, business, categories needed no_email_post = self.client.post('/signup', data=dict( first_name='foo' )) self.assert200(no_email_post) self.assertTrue(no_email_post.data.count('alert-danger'), 3) # ensure that there are two required field notes self.assertTrue(no_email_post.data.count('This field is required'), 2) # assert valid email address invalid_email_post = self.client.post('/signup', data=dict( email='INVALID', business_name='test' )) self.assert200(invalid_email_post) self.assertTrue(invalid_email_post.data.count('alert-danger'), 1) self.assertTrue(invalid_email_post.data.count('Invalid email address.'), 1) # assert you need at least one category invalid_no_categories = self.client.post('/signup', data=dict( email='*****@*****.**', business_name='foo' )) self.assert200(invalid_no_categories) self.assertTrue(invalid_no_categories.data.count('alert-danger'), 1) self.assertTrue(invalid_no_categories.data.count('You must select at least one!'), 1) # assert valid categories with mail.record_messages() as outbox: # successful post with only one set of subcategories success_post = self.client.post('/signup', data={ 'email': '*****@*****.**', 'business_name': 'foo', 'subcategories-1': 'on', 'categories': 'Apparel', 'subscribed_to_newsletter': True }) with self.client.session_transaction() as session: assert 'email' in session assert 'business_name' in session self.assertEquals(session['email'], '*****@*****.**') self.assertEquals(session['business_name'], 'foo') self.assertEquals(success_post.status_code, 302) self.assertEquals(success_post.location, 'http://localhost/') # should send three emails # one to the vendor, one to the admins self.assertEquals(len(outbox), 2) self.assertEquals(Vendor.query.count(), 1) self.assertTrue(Vendor.query.first().subscribed_to_newsletter) self.assertEquals(len(Vendor.query.first().categories), 1) self.assert_flashes( 'Thank you for signing up! Check your email for more information', 'alert-success' ) # successful post with two sets of subcategories success_post_everything = self.client.post('/signup', data={ 'email': '*****@*****.**', 'business_name': 'foo', 'subcategories-1': 'on', 'subcategories-2': 'on', 'subcategories-3': 'on', 'subcategories-4': 'on', 'subcategories-5': 'on', 'categories': 'Apparel', 'subscribed_to_newsletter': True }) self.assertEquals(success_post_everything.status_code, 302) self.assertEquals(success_post_everything.location, 'http://localhost/') self.assertEquals(len(outbox), 4) self.assertEquals(Vendor.query.count(), 2) self.assertEquals(len(Vendor.query.filter(Vendor.email == '*****@*****.**').first().categories), 5) self.assert_flashes('Thank you for signing up! Check your email for more information', 'alert-success') # successful post with existing email should update the profile, not send message success_post_old_email = self.client.post('/signup', data={ 'email': '*****@*****.**', 'business_name': 'foo', 'subcategories-1': 'on', 'subcategories-2': 'on', 'subcategories-3': 'on', 'categories': 'Apparel', 'subscribed_to_newsletter': True }) self.assertEquals(success_post_old_email.status_code, 302) self.assertEquals(success_post_old_email.location, 'http://localhost/') self.assertEquals(len(outbox), 4) self.assertEquals(Vendor.query.count(), 2) self.assertEquals(len(Vendor.query.filter(Vendor.email == '*****@*****.**').first().categories), 5) self.assert_flashes( "You are already signed up! Your profile was updated with this new information", 'alert-info' ) admin_mail, vendor_mail = 0, 0 for _mail in outbox: if 'new vendor has signed up on beacon' in _mail.subject: admin_mail += 1 if 'Thank you for signing up' in _mail.subject: vendor_mail += 1 self.assertEquals(admin_mail, 2) self.assertEquals(vendor_mail, 2) with self.client.session_transaction() as session: assert 'email' in session assert 'business_name' in session self.assertEquals(session['email'], '*****@*****.**') self.assertEquals(session['business_name'], 'foo')
def test_signup(self): admin_role = RoleFactory.create(name="admin") superadmin_role = RoleFactory.create(name="superadmin") UserFactory.create(roles=[admin_role]) UserFactory.create(email="*****@*****.**", roles=[superadmin_role]) response = self.client.get("/signup") self.assert200(response) subcats = json.loads(self.get_context_variable("subcategories")) # assert three categories (plus the total category) self.assertEquals(len(subcats.keys()), 4) # assert five total subcatgories (plus 5 in the total field) self.assertEquals(len([item for sublist in subcats.values() for item in sublist]), 10) # assert email, business, categories needed no_email_post = self.client.post("/signup", data=dict(first_name="foo")) self.assert200(no_email_post) self.assertTrue(no_email_post.data.count("alert-danger"), 3) # ensure that there are two required field notes self.assertTrue(no_email_post.data.count("This field is required"), 2) # assert valid email address invalid_email_post = self.client.post("/signup", data=dict(email="INVALID", business_name="test")) self.assert200(invalid_email_post) self.assertTrue(invalid_email_post.data.count("alert-danger"), 1) self.assertTrue(invalid_email_post.data.count("Invalid email address."), 1) # assert you need at least one category invalid_no_categories = self.client.post("/signup", data=dict(email="*****@*****.**", business_name="foo")) self.assert200(invalid_no_categories) self.assertTrue(invalid_no_categories.data.count("alert-danger"), 1) self.assertTrue(invalid_no_categories.data.count("You must select at least one!"), 1) # assert valid categories with mail.record_messages() as outbox: # successful post with only one set of subcategories success_post = self.client.post( "/signup", data={ "email": "*****@*****.**", "business_name": "foo", "subcategories-1": "on", "categories": "Apparel", "subscribed_to_newsletter": True, }, ) with self.client.session_transaction() as session: assert "email" in session assert "business_name" in session self.assertEquals(session["email"], "*****@*****.**") self.assertEquals(session["business_name"], "foo") self.assertEquals(success_post.status_code, 302) self.assertEquals(success_post.location, "http://localhost/") # should send three emails # one to the vendor, one to the admins self.assertEquals(len(outbox), 2) self.assertEquals(Vendor.query.count(), 1) self.assertTrue(Vendor.query.first().subscribed_to_newsletter) self.assertEquals(len(Vendor.query.first().categories), 1) self.assert_flashes("Thank you for signing up! Check your email for more information", "alert-success") # successful post with two sets of subcategories success_post_everything = self.client.post( "/signup", data={ "email": "*****@*****.**", "business_name": "foo", "subcategories-1": "on", "subcategories-2": "on", "subcategories-3": "on", "subcategories-4": "on", "subcategories-5": "on", "categories": "Apparel", "subscribed_to_newsletter": True, }, ) self.assertEquals(success_post_everything.status_code, 302) self.assertEquals(success_post_everything.location, "http://localhost/") self.assertEquals(len(outbox), 4) self.assertEquals(Vendor.query.count(), 2) self.assertEquals(len(Vendor.query.filter(Vendor.email == "*****@*****.**").first().categories), 5) self.assert_flashes("Thank you for signing up! Check your email for more information", "alert-success") # successful post with existing email should update the profile, not send message success_post_old_email = self.client.post( "/signup", data={ "email": "*****@*****.**", "business_name": "foo", "subcategories-1": "on", "subcategories-2": "on", "subcategories-3": "on", "categories": "Apparel", "subscribed_to_newsletter": True, }, ) self.assertEquals(success_post_old_email.status_code, 302) self.assertEquals(success_post_old_email.location, "http://localhost/") self.assertEquals(len(outbox), 4) self.assertEquals(Vendor.query.count(), 2) self.assertEquals(len(Vendor.query.filter(Vendor.email == "*****@*****.**").first().categories), 5) self.assert_flashes( "You are already signed up! Your profile was updated with this new information", "alert-info" ) admin_mail, vendor_mail = 0, 0 for _mail in outbox: if "new vendor has signed up on beacon" in _mail.subject: admin_mail += 1 if "Thank you for signing up" in _mail.subject: vendor_mail += 1 self.assertEquals(admin_mail, 2) self.assertEquals(vendor_mail, 2) with self.client.session_transaction() as session: assert "email" in session assert "business_name" in session self.assertEquals(session["email"], "*****@*****.**") self.assertEquals(session["business_name"], "foo")
def test_signup(self): admin_role = RoleFactory.create(name='admin') superadmin_role = RoleFactory.create(name='superadmin') UserFactory.create(role=admin_role) UserFactory.create(email='*****@*****.**', role=superadmin_role) response = self.client.get('/signup') self.assert200(response) subcats = json.loads(self.get_context_variable('subcategories')) # assert three categories (plus the total category) self.assertEquals(len(subcats.keys()), 4) # assert five total subcatgories (plus 5 in the total field) self.assertEquals( len([item for sublist in subcats.values() for item in sublist]), 10) # assert email, business, categories needed no_email_post = self.client.post('/signup', data=dict(first_name='foo')) self.assert200(no_email_post) self.assertTrue(no_email_post.data.count('alert-danger'), 3) # ensure that there are two required field notes self.assertTrue(no_email_post.data.count('This field is required'), 2) # assert valid email address invalid_email_post = self.client.post('/signup', data=dict(email='INVALID', business_name='test')) self.assert200(invalid_email_post) self.assertTrue(invalid_email_post.data.count('alert-danger'), 1) self.assertTrue( invalid_email_post.data.count('Invalid email address.'), 1) # assert you need at least one category invalid_no_categories = self.client.post('/signup', data=dict( email='*****@*****.**', business_name='foo')) self.assert200(invalid_no_categories) self.assertTrue(invalid_no_categories.data.count('alert-danger'), 1) self.assertTrue( invalid_no_categories.data.count('You must select at least one!'), 1) # assert valid categories with mail.record_messages() as outbox: # successful post with only one set of subcategories success_post = self.client.post('/signup', data={ 'email': '*****@*****.**', 'business_name': 'foo', 'subcategories-1': 'on', 'categories': 'Apparel', 'subscribed_to_newsletter': True }) with self.client.session_transaction() as session: assert 'email' in session assert 'business_name' in session self.assertEquals(session['email'], '*****@*****.**') self.assertEquals(session['business_name'], 'foo') self.assertEquals(success_post.status_code, 302) self.assertEquals(success_post.location, 'http://localhost/') # should send three emails # one to the vendor, one to the admins self.assertEquals(len(outbox), 2) self.assertEquals(Vendor.query.count(), 1) self.assertTrue(Vendor.query.first().subscribed_to_newsletter) self.assertEquals(len(Vendor.query.first().categories), 1) self.assert_flashes( 'Thank you for signing up! Check your email for more information', 'alert-success') # successful post with two sets of subcategories success_post_everything = self.client.post( '/signup', data={ 'email': '*****@*****.**', 'business_name': 'foo', 'subcategories-1': 'on', 'subcategories-2': 'on', 'subcategories-3': 'on', 'subcategories-4': 'on', 'subcategories-5': 'on', 'categories': 'Apparel', 'subscribed_to_newsletter': True }) self.assertEquals(success_post_everything.status_code, 302) self.assertEquals(success_post_everything.location, 'http://localhost/') self.assertEquals(len(outbox), 4) self.assertEquals(Vendor.query.count(), 2) self.assertEquals( len( Vendor.query.filter( Vendor.email == '*****@*****.**').first().categories), 5) self.assert_flashes( 'Thank you for signing up! Check your email for more information', 'alert-success') # successful post with existing email should update the profile, not send message success_post_old_email = self.client.post( '/signup', data={ 'email': '*****@*****.**', 'business_name': 'foo', 'subcategories-1': 'on', 'subcategories-2': 'on', 'subcategories-3': 'on', 'categories': 'Apparel', 'subscribed_to_newsletter': True }) self.assertEquals(success_post_old_email.status_code, 302) self.assertEquals(success_post_old_email.location, 'http://localhost/') self.assertEquals(len(outbox), 4) self.assertEquals(Vendor.query.count(), 2) self.assertEquals( len( Vendor.query.filter( Vendor.email == '*****@*****.**').first().categories), 5) self.assert_flashes( "You are already signed up! Your profile was updated with this new information", 'alert-info') admin_mail, vendor_mail = 0, 0 for _mail in outbox: if 'new vendor has signed up on beacon' in _mail.subject: admin_mail += 1 if 'Thank you for signing up' in _mail.subject: vendor_mail += 1 self.assertEquals(admin_mail, 2) self.assertEquals(vendor_mail, 2) with self.client.session_transaction() as session: assert 'email' in session assert 'business_name' in session self.assertEquals(session['email'], '*****@*****.**') self.assertEquals(session['business_name'], 'foo')