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_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_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_new_user_success(self, urlopen): # insert all of our roles RoleFactory.create(name='superadmin') RoleFactory.create(name='admin') RoleFactory.create(name='staff') # assert we have only one user self.assertEquals(User.query.count(), 1) mock_open = Mock() mock_open.read.side_effect = [ '{"status": "okay", "email": "*****@*****.**"}' ] urlopen.return_value = mock_open post = self.client.post('/users/auth?next=/explore/', data=dict( assertion='test' )) # assert we add a new user and redirect to the register page self.assertEquals(User.query.count(), 2) self.assertEquals(post.status_code, 200) self.assertEquals(post.data, '/users/profile') # assert we get the new user message register = self.client.get('/users/profile') self.assertTrue('Welcome to the Pittsbugh Purchasing Suite!' in register.data) self.assert_template_used('users/profile.html') # assert that you cannot update with junk information 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 the user successfully update = self.client.post('/users/profile', data=dict( first_name='foo', last_name='bar', department=str(self.department1.id) )) # assert we successfully update self.assertEquals(update.status_code, 302) self.assertEquals(update.location, 'http://localhost/users/profile') self.assert_flashes('Updated your profile!', 'alert-success') # make sure the new user message is gone updated = self.client.get('/users/profile') self.assertTrue('Welcome to the Pittsbugh Purchasing Suite!' not in updated.data) self.assert_template_used('users/profile.html')
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 setUp(self): super(TestUsers, self).setUp() self.staff = RoleFactory.create(name='staff') AcceptedEmailDomainsFactory.create(domain='foo.com') self.new_dept = DepartmentFactory.create(name='New User').save() self.department1 = DepartmentFactory.create(name='Test').save()
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")