def testCreateDocumentNoDashboardVisibility(self): user = profile_utils.seedNDBUser(host_for=[self.program]) profile_utils.loginNDB(user) url = '/gsoc/document/edit/gsoc_program/%s/doc' % self.gsoc.key().name() response = self.get(url) self.assertResponseOK(response) self.assertGSoCTemplatesUsed(response) self.assertTemplateUsed(response, 'modules/gsoc/document/base.html') self.assertTemplateUsed(response, 'modules/gsoc/_form.html') # test POST override = { 'prefix': 'gsoc_program', 'scope': self.gsoc, 'link_id': 'doc', 'key_name': DocumentKeyNameProvider(), 'modified_by': user.key.to_old_key(), 'home_for': None, 'author': user.key.to_old_key(), 'is_featured': None, 'write_access': 'admin', 'read_access': 'public', 'dashboard_visibility': [], } properties = seeder_logic.seed_properties(Document, properties=override) response = self.post(url, properties) self.assertResponseRedirect(response, url) key_name = properties['key_name'] document = Document.get_by_key_name(key_name) self.assertEqual(document.key().name(), key_name)
def testAnOrgAdminCanUpdateOrgProfile(self): """Tests if an org admin can update the profile for its organization. """ self.timeline.orgSignup() from soc.modules.gsoc.models.organization import GSoCOrganization self.data.createOrgAdmin(self.org) url = '/gsoc/profile/organization/' + self.org.key().name() postdata = seeder_logic.seed_properties(GSoCOrganization) updates = { 'email': '*****@*****.**', 'irc_channel': 'irc://i.f.net/gsoc', 'pub_mailing_list': 'https://l.s.net', 'tags': 'foo, bar', 'gsoc_org_page_home': 'http://www.xyz.com', 'contact_postalcode': '247667', 'contact_country': 'India', 'dev_mailing_list': 'http://d.com', 'home': postdata['home'].key(), 'max_score': 5, } postdata.update(updates) self.assertNotEqual(updates['email'], self.org.email) response = self.post(url, postdata) self.assertResponseRedirect(response) expected_redirect_url = 'http://testserver' + url + '?validated' actual_redirect_url = response.get('location', None) self.assertEqual(expected_redirect_url, actual_redirect_url) updated_org = db.get(self.org.key()) self.assertEqual(updates['email'], updated_org.email)
def testCreateDocumentWithDashboardVisibility(self): url = "/gci/document/edit/gci_program/%s/doc" % self.gci.key().name() response = self.get(url) self.assertGCITemplatesUsed(response) self.assertTemplateUsed(response, "modules/gci/document/base.html") self.assertTemplateUsed(response, "modules/gci/_form.html") # test POST key_name = string_provider.DocumentKeyNameProvider() override = { "prefix": "gci_program", "scope": self.gci, "link_id": "doc", "key_name": key_name, "modified_by": self.user.key.to_old_key(), "home_for": None, "author": self.user.key.to_old_key(), "is_featured": None, "write_access": "admin", "read_access": "public", "dashboard_visibility": ["student", "mentor"], } properties = seeder_logic.seed_properties(Document, properties=override) response = self.post(url, properties) self.assertResponseRedirect(response, url) key_name = properties["key_name"] document = Document.get_by_key_name(key_name) self.assertEqual(document.scope.key(), self.gci.key()) self.assertEqual(document.link_id, "doc") self.assertEqual(document.key().name(), key_name) self.assertIn("student", document.dashboard_visibility) self.assertIn("mentor", document.dashboard_visibility)
def testCreateDocument(self): self.data.createHost() url = '/gsoc/document/edit/gsoc_program/%s/doc' % self.gsoc.key().name( ) response = self.get(url) self.assertGSoCTemplatesUsed(response) self.assertTemplateUsed(response, 'v2/modules/gsoc/document/base.html') self.assertTemplateUsed(response, 'v2/modules/gsoc/_form.html') # test POST override = { 'prefix': 'gsoc_program', 'scope': self.gsoc, 'link_id': 'doc', 'key_name': DocumentKeyNameProvider(), 'modified_by': self.data.user, 'home_for': None, 'author': self.data.user, 'is_featured': None, 'write_access': 'admin', 'read_access': 'public', } properties = seeder_logic.seed_properties(Document, properties=override) response = self.post(url, properties) self.assertResponseRedirect(response, url) key_name = properties['key_name'] document = Document.get_by_key_name(key_name) self.assertPropertiesEqual(properties, document)
def testCreateDocumentNoDashboardVisibility(self): user = profile_utils.seedNDBUser(host_for=[self.program]) profile_utils.loginNDB(user) url = '/gsoc/document/edit/gsoc_program/%s/doc' % self.gsoc.key().name( ) response = self.get(url) self.assertResponseOK(response) self.assertGSoCTemplatesUsed(response) self.assertTemplateUsed(response, 'modules/gsoc/document/base.html') self.assertTemplateUsed(response, 'modules/gsoc/_form.html') # test POST override = { 'prefix': 'gsoc_program', 'scope': self.gsoc, 'link_id': 'doc', 'key_name': DocumentKeyNameProvider(), 'modified_by': user.key.to_old_key(), 'home_for': None, 'author': user.key.to_old_key(), 'is_featured': None, 'write_access': 'admin', 'read_access': 'public', 'dashboard_visibility': [], } properties = seeder_logic.seed_properties(Document, properties=override) response = self.post(url, properties) self.assertResponseRedirect(response, url) key_name = properties['key_name'] document = Document.get_by_key_name(key_name) self.assertEqual(document.key().name(), key_name)
def setUp(self): from soc.modules.gci.models.profile import GCIProfile from soc.modules.gci.models.profile import GCIStudentInfo self.init() program_suffix = self.gci.key().name() self.url = '/gci/profile/%(program_suffix)s' % { 'program_suffix': program_suffix } self.validated_url = self.url + '?validated' self.student_url = '/gci/profile/%(role)s/%(program_suffix)s' % { 'role': 'student', 'program_suffix': program_suffix } self.birth_date = str(date.today() - timedelta(365*15)) props = {} # we do not want to seed the data in the datastore, we just # want to get the properties generated for seeding. The post # test will actually do the entity creation, so we reuse the # seed_properties method from the seeder to get the most common # values for Profile and StudentInfo props.update(seeder_logic.seed_properties(GCIProfile)) props.update(seeder_logic.seed_properties(GCIStudentInfo)) props.update({ 'student_info': None, 'status': 'active', 'is_org_admin': False, 'is_mentor': False, 'org_admin_for': [], 'mentor_for': [], 'scope': self.gci, 'birth_date': self.birth_date, 'res_country': 'Netherlands', 'ship_country': 'Netherlands', }) self.default_props = props # we have other tests that verify the age_check system self.client.cookies['age_check'] = self.birth_date
def setUp(self): from soc.modules.gci.models.profile import GCIProfile from soc.modules.gci.models.profile import GCIStudentInfo self.init() program_suffix = self.gci.key().name() self.url = '/gci/profile/%(program_suffix)s' % { 'program_suffix': program_suffix } self.validated_url = self.url + '?validated' self.student_url = '/gci/profile/%(role)s/%(program_suffix)s' % { 'role': 'student', 'program_suffix': program_suffix } self.birth_date = str(date.today() - timedelta(365 * 15)) props = {} # we do not want to seed the data in the datastore, we just # want to get the properties generated for seeding. The post # test will actually do the entity creation, so we reuse the # seed_properties method from the seeder to get the most common # values for Profile and StudentInfo props.update(seeder_logic.seed_properties(GCIProfile)) props.update(seeder_logic.seed_properties(GCIStudentInfo)) props.update({ 'student_info': None, 'status': 'active', 'is_org_admin': False, 'is_mentor': False, 'org_admin_for': [], 'mentor_for': [], 'scope': self.gci, 'birth_date': self.birth_date, 'res_country': 'Netherlands', 'ship_country': 'Netherlands', }) self.default_props = props # we have other tests that verify the age_check system self.client.cookies['age_check'] = self.birth_date
def testCreateDocument(self): self.data.createHost() url = '/gsoc/document/edit/gsoc_program/%s/doc' % self.gsoc.key().name() response = self.get(url) self.assertGSoCTemplatesUsed(response) self.assertTemplateUsed(response, 'v2/modules/gsoc/document/base.html') self.assertTemplateUsed(response, 'v2/modules/gsoc/_form.html') # test POST override = { 'prefix': 'gsoc_program', 'scope': self.gsoc, 'link_id': 'doc', 'key_name': DocumentKeyNameProvider(), 'modified_by': self.data.user, 'home_for': None, 'author': self.data.user, 'is_featured': None, 'write_access': 'admin', 'read_access': 'public', } properties = seeder_logic.seed_properties(Document, properties=override) response = self.post(url, properties) self.assertResponseRedirect(response, url) key_name = properties['key_name'] document = Document.get_by_key_name(key_name) self.assertPropertiesEqual(properties, document)
def seedProperties(self, model, properties): """Returns seeded properties for the specified model. """ from soc.modules.seeder.logic.seeder import logic as seeder_logic return seeder_logic.seed_properties(model, properties, recurse=False)
def testCreateProfile(self): from soc.modules.gsoc.models.profile import GSoCProfile from soc.modules.gsoc.models.profile import GSoCStudentInfo self.timeline.studentSignup() self.data.createUser() suffix = "%(program)s" % { 'program': self.gsoc.key().name(), } role_suffix = "%(role)s/%(suffix)s" % { 'role': 'student', 'suffix': suffix, } url = '/gsoc/profile/' + suffix role_url = '/gsoc/profile/' + role_suffix # we do not want to seed the data in the datastore, we just # want to get the properties generated for seeding. The post # test will actually do the entity creation, so we reuse the # seed_properties method from the seeder to get the most common # values for Profile and StudentInfo postdata = seeder_logic.seed_properties(GSoCProfile) props = seeder_logic.seed_properties(GSoCStudentInfo, properties={ 'tax_form': None, 'enrollment_form': None, }) props.pop('tax_form') props.pop('enrollment_form') postdata.update(props) postdata.update({ 'link_id': self.data.user.link_id, 'student_info': None, 'user': self.data.user, 'parent': self.data.user, 'scope': self.gsoc, 'status': 'active', 'email': self.data.user.account.email(), 'mentor_for': [], 'org_admin_for': [], 'is_org_admin': False, 'is_mentor': False, }) response = self.post(role_url, postdata) self.assertResponseRedirect(response, url + '?validated') # hacky profile = GSoCProfile.all().get() profile.delete() postdata.update({ 'email': 'somerandominvalid@emailid', }) response = self.post(role_url, postdata) # yes! this is the protocol for form posts. We get an OK response # with the response containing the form's GET request page whenever # the form has an error and could not be posted. This is the architecture # chosen in order to save the form error state's while rendering the # error fields. self.assertResponseOK(response) error_dict = response.context['error'] self.assertTrue('email' in error_dict)