def test_journal_add_view_indicators(self): from eportfolio.models.app import Application from eportfolio.views.journal import journal_add_view renderer = self.config.testing_add_template('templates/journal_add.pt') root = Application() project = self._add_project() student = self._add_student() project.students.append(student) indicator_set = self._add_indicator_set() indicator1 = self._add_indicator(title=u'First indicator', indicator_set=indicator_set) indicator2 = self._add_indicator(title=u'Second indicator', indicator_set=indicator_set) # Competences have to be added to project over objectives objective = self._add_objective(project=project) objective.competences.append(indicator_set.competence) # Student is logged in self.config.testing_securitypolicy(userid=student.email) request = testing.DummyRequest(root=root) journal_add_view(project, request) indicator_sets = renderer.indicator_sets self.assertEquals(1, len(indicator_sets)) self.assertEquals(indicator_set.title, indicator_sets[0]['title']) self.assertEquals(2, len(indicator_sets[0]['indicators'])) self.assertEquals(str(indicator1.id), indicator_sets[0]['indicators'][0]['id']) self.assertEquals(str(indicator2.id), indicator_sets[0]['indicators'][1]['id']) request = testing.DummyRequest(root=root) request.POST['text'] = u'My first journal entry!' request.POST['image'] = u'' request.POST['indicators'] = [ str(indicator1.id), ] request.POST['form.submitted'] = 1 journal_add_view(project, request) self.assertEquals(1, student.journal_entries.count()) self.assertEquals(1, project.journal_entries.count()) entry = student.journal_entries.first() self.assertEquals([indicator1], entry.indicators.all()) # Indicator can be tagged only once, thus it's not in the list anymore. request = testing.DummyRequest(root=root) journal_add_view(project, request) indicator_sets = renderer.indicator_sets self.assertEquals(1, len(indicator_sets[0]['indicators']))
def test_handle_submit(self): from seantisinvoice.views.invoice import InvoiceController from seantisinvoice import statusmessage # Register route for redirect in invoice form actions testing.registerRoute('/', 'invoices', factory=None) # Create an invoice invoice = self._add_invoice() request = testing.DummyRequest() request.matchdict = dict(invoice=str(invoice.id)) view = InvoiceController(None, request) data = view.form_defaults() self.assertEquals(u'Project', data['project_description']) # Change some of the invoice date data['project_description'] = u'My project' data['recurring_term'] = 30 data['item_list'][0]['service_title'] = u'My service' view.handle_submit(data) data = view.form_defaults() self.assertEquals(u'My project', data['project_description']) self.assertEquals(u'My service', data['item_list'][0]['service_title']) # Add an additional invoice item data['item_list'].append( dict(item_id='', service_title=u'Training', service_description=u'', amount=200.0)) view.handle_submit(data) data = view.form_defaults() self.assertEquals(u'Training', data['item_list'][1]['service_title']) # Reorder the items data['item_list'][0] = view.form_defaults()['item_list'][1] data['item_list'][1] = view.form_defaults()['item_list'][0] view.handle_submit(data) data = view.form_defaults() self.assertEquals(u'Training', data['item_list'][0]['service_title']) # And remove one of them del data['item_list'][0] view.handle_submit(data) data = view.form_defaults() self.assertEquals(1, len(data['item_list'])) self.assertEquals(u'My service', data['item_list'][0]['service_title']) # Submit without changing anything request = testing.DummyRequest() request.environ['qc.statusmessage'] = [] request.matchdict = dict(invoice=str(invoice.id)) view = InvoiceController(None, request) view.handle_submit(data) msgs = statusmessage.messages(request) self.assertEquals(1, len(msgs)) self.assertEquals(u"No changes saved.", msgs[0].msg)
def test_handle_submit(self): from seantisinvoice.views.customer import CustomerController from seantisinvoice import statusmessage # Register route for redirect in customer form actions testing.registerRoute('/customers', 'customers', factory=None) # Add a customer customer = self._add_customer() request = testing.DummyRequest() request.matchdict = dict(customer=str(customer.id)) view = CustomerController(None, request) # Check default values default_values = view.form_defaults() self.assertEquals(u'Customers Inc.', default_values['name']) # Change the data default_values['name'] = u'Seantis GmbH' default_values['contact_list'][0]['first_name'] = u'Leopold' view.handle_submit(default_values) default_values = view.form_defaults() self.assertEquals(u'Seantis GmbH', default_values['name']) self.assertEquals(u'Leopold', default_values['contact_list'][0]['first_name']) # Add an additional contact contact_date = dict(first_name=u'Stephen', last_name=u'Dedalus', title=u'Mr.', contact_id='') default_values['contact_list'].append(contact_date) view.handle_submit(default_values) default_values = view.form_defaults() self.assertEquals(u'Stephen', default_values['contact_list'][1]['first_name']) # Remove one of the contacts del default_values['contact_list'][0] view.handle_submit(default_values) default_values = view.form_defaults() self.assertEquals(1, len(default_values['contact_list'])) # Contacts are alphabetically ordered. self.assertEquals(u'Stephen', default_values['contact_list'][0]['first_name']) # Submit without changing anything request = testing.DummyRequest() request.environ['qc.statusmessage'] = [] request.matchdict = dict(customer=str(customer.id)) view = CustomerController(None, request) view.handle_submit(default_values) msgs = statusmessage.messages(request) self.assertEquals(1, len(msgs)) self.assertEquals(u"No changes saved.", msgs[0].msg)
def test_view_invoices(self): from seantisinvoice.views.invoice import view_invoices request = testing.DummyRequest() view = view_invoices(request) self.assertEqual(view['invoices'], []) invoice = self._add_invoice() view = view_invoices(request) self.assertEqual(view['invoices'], [invoice]) # Filtering recurring invoice2 = self._add_invoice() invoice2.recurring_date = datetime.date.today() request.params = dict(recurring='1') view = view_invoices(request) self.assertEqual(view['invoices'], [invoice2]) request.params = dict(recurring='0') view = view_invoices(request) self.assertEqual(view['invoices'], [invoice]) # Filtering due invoice.due_date = datetime.date.today() - datetime.timedelta(days=5) request.params = dict(due='1') view = view_invoices(request) self.assertEqual(view['invoices'], [invoice]) # Sorting invoice.date = datetime.date(2010, 1, 18) invoice2.date = datetime.date(2010, 1, 2) request.params = dict(sort='date') view = view_invoices(request) self.assertEqual(view['invoices'], [invoice2, invoice]) request.params = dict(sort='date', reverse='1') view = view_invoices(request) self.assertEqual(view['invoices'], [invoice, invoice2])
def test_form_fields(self): from seantisinvoice.views.customer import CustomerController from seantisinvoice.views.customer import CustomerSchema request = testing.DummyRequest() view = CustomerController(None, request) fields = view.form_fields() self.assertEquals(CustomerSchema.attrs, fields)
def test_my_view(self): from myproject.views import my_view context = testing.DummyModel() request = testing.DummyRequest() renderer = testing.registerDummyRenderer('templates/mytemplate.pt') response = my_view(context, request) self.assertEqual(renderer.project, 'myproject')
def test_handle_add(self): from seantisinvoice.models import Invoice from seantisinvoice.models import DBSession from seantisinvoice.views.invoice import InvoiceController # Register route for redirect in invoice form actions testing.registerRoute('/', 'invoices', factory=None) # Each invoice belongs to a customer, thus add one. customer = self._add_customer() request = testing.DummyRequest() view = InvoiceController(None, request) data = view.form_defaults() data['customer_contact_id'] = customer.contacts[0].id data['project_description'] = u'Project name' data['recurring_term'] = 30 data['date'] = datetime.date(2010, 1, 18) data['item_list'] = [ dict(item_id='', service_title=u'Testing', service_description=u'Work', amount=2000.0) ] view.handle_add(data) session = DBSession() invoice = session.query(Invoice).one() self.assertEquals(u'Project name', invoice.project_description) self.assertEquals(customer.contacts[0], invoice.contact) self.assertEquals(1, len(invoice.items)) self.assertEquals(u'Testing', invoice.items[0].service_title)
def test_application_view(self): from eportfolio.models.app import Application from eportfolio.views.application import application_view root = Application() # Redirect to login view if not authenticated request = testing.DummyRequest(root=root) response = application_view(root, request) self.assertEquals(302, response.code) self.assertEquals('http://example.com/login.html', response.headers['Location']) # Logged in student student = self._add_student() self.config.testing_securitypolicy(userid=student.email) response = application_view(root, request) self.assertEquals(302, response.status_int) url = 'http://example.com/users/%s/' % student.id self.assertEquals(url, response.headers['Location']) # Logged in teacher teacher = self._add_teacher() self.config.testing_securitypolicy(userid=teacher.email) response = application_view(root, request) self.assertEquals(302, response.status_int) self.assertEquals('http://example.com/dashboard.html', response.headers['Location'])
def test_form_fields(self): from seantisinvoice.views.reports import ReportsController from seantisinvoice.views.reports import ReportsSchema request = testing.DummyRequest() view = ReportsController(None, request) fields = view.form_fields() self.assertEquals(ReportsSchema.attrs, fields)
def test_call(self): from seantisinvoice.views.company import CompanyController request = testing.DummyRequest() view = CompanyController(None, request) result = view() self.failUnless('main' in result.keys()) self.failUnless('msgs' in result.keys())
def test_members_view(self): from eportfolio.models.app import Application from eportfolio.models.project import Project from eportfolio.views.members import members_view root = Application() project = Project() # No members assigned yet request = testing.DummyRequest(root=root) response = members_view(project, request) self.assertEquals([], response['all_students']) self.assertEquals([], response['all_teachers']) # Student in list of students that can be assigned student = self._add_student() response = members_view(project, request) self.assertEquals([student], response['all_students']) # Assign student to project request.POST['student_id'] = student.id request.POST['form.submitted'] = 1 response = members_view(project, request) self.assertEquals([student], project.students.all()) request = testing.DummyRequest(root=root) response = members_view(project, request) # Student cannot be assigned a second time self.assertEquals([], response['all_students']) self.assertEquals([student], response['students']) # Teacher in the list of teachers than can be assigned teacher = self._add_teacher() response = members_view(project, request) self.assertEquals([teacher], response['all_teachers']) # Assign teacher to project request.POST['teacher_id'] = teacher.id request.POST['form.submitted'] = 1 response = members_view(project, request) self.assertEquals([teacher], project.teachers.all()) request = testing.DummyRequest(root=root) response = members_view(project, request) # Teacher cannot be assigned a second time self.assertEquals([], response['all_teachers']) self.assertEquals([teacher], response['teachers'])
def test_view_login(self): from seantisinvoice.views.login import view_login request = testing.DummyRequest() response = view_login(request) self.failUnless('seantis::invoice' in response.app_iter[0]) request.params = dict(failed='1') response = view_login(request) self.failUnless('Login failed.' in response.app_iter[0])
def test_form_widgets(self): from seantisinvoice.views.invoice import InvoiceController customer = self._add_customer() contact = customer.contacts[0] request = testing.DummyRequest() view = InvoiceController(None, request) widgets = view.form_widgets(view.form_fields()) option = (customer.id, u'%s: %s %s' % (customer.name, contact.first_name, contact.last_name)) self.failUnless(option in widgets['customer_contact_id'].options)
def test_view_login_redirect(self): from seantisinvoice.views.login import view_login_redirect request = testing.DummyRequest() response = view_login_redirect(request) self.assertEquals(302, response.status_int) self.assertEquals(request.application_url + '/login?failed=1', response.location) # Register permissive security policy which allows all access testing.registerDummySecurityPolicy('admin') response = view_login_redirect(request) self.assertEquals(302, response.status_int) self.assertEquals(request.application_url, response.location)
def test_teacher_edit_view(self): from eportfolio.models.app import Application from eportfolio.views.teacher import teacher_edit_view root = Application() teacher = self._add_teacher() request = testing.DummyRequest(root=root) response = teacher_edit_view(root['users'][teacher.id], request) self.failUnless('Edit' in response.body) request = testing.DummyRequest(root=root) request.params['form.submitted'] = 1 request.params['first_name'] = u'Leopold' request.params['last_name'] = u'Bloom' request.params['email'] = u'*****@*****.**' request.params['portrait'] = u'' teacher_edit_view(root['users'][teacher.id], request) self.assertEquals(u'Leopold', teacher.first_name) self.assertEquals(u'Bloom', teacher.last_name) self.assertEquals(u'*****@*****.**', teacher.email)
def test_handle_cancel(self): from seantisinvoice.views.invoice import InvoiceController from seantisinvoice import statusmessage # Register route for redirect in customer form actions testing.registerRoute('/', 'invoices', factory=None) request = testing.DummyRequest() request.environ['qc.statusmessage'] = [] view = InvoiceController(None, request) view.handle_cancel() msgs = statusmessage.messages(request) self.assertEquals(1, len(msgs)) self.assertEquals(u"No changes saved.", msgs[0].msg)
def test_invoices(self): from seantisinvoice.views.reports import ReportsController request = testing.DummyRequest() view = ReportsController(None, request) self.assertEquals([], view.invoices()) invoice = self._add_invoice() invoice.date = datetime.date(2010, 3, 1) self.assertEquals([invoice], view.invoices()) invoice2 = self._add_invoice() invoice2.date = datetime.date(2010, 4, 25) view = ReportsController(None, request) self.assertEquals([invoice2, invoice], view.invoices())
def test_journal_add_view(self): from eportfolio.models.app import Application from eportfolio.views.journal import journal_add_view root = Application() project = self._add_project() student = self._add_student() project.students.append(student) # Student is logged in self.config.testing_securitypolicy(userid=student.email) request = testing.DummyRequest(root=root) request.POST['text'] = u'My first journal entry!' request.POST['image'] = u'' request.POST['form.submitted'] = 1 response = journal_add_view(project, request) self.assertEquals(1, project.journal_entries.count()) entry = project.journal_entries[0] self.assertEquals(u'My first journal entry!', entry.text) self.assertEquals(student, entry.user) # Check redirection self.assertEquals(302, response.status_int) url = 'http://example.com/users/%s/' % student.id self.assertEquals(url, response.headers['Location']) teacher = self._add_teacher() project.teachers.append(teacher) # Teacher is logged in self.config.testing_securitypolicy(userid=teacher.email) request = testing.DummyRequest(root=root) request.POST['text'] = u"Teacher's journal entry!" request.POST['image'] = u'' request.POST['form.submitted'] = 1 response = journal_add_view(project, request) self.assertEquals(1, teacher.journal_entries.count()) # Check redirection self.assertEquals(302, response.status_int) url = 'http://example.com/projects/%s/' % project.id self.assertEquals(url, response.headers['Location'])
def test_form_widgets(self): from seantisinvoice.views.reports import ReportsController from formish import DateParts request = testing.DummyRequest() view = ReportsController(None, request) widgets = view.form_widgets(view.form_fields()) self.assertEquals(DateParts, type(widgets['from_date'])) self.assertEquals(DateParts, type(widgets['to_date'])) self.assertEquals([], widgets['customer'].options) customer = self._add_customer() widgets = view.form_widgets(view.form_fields()) self.assertEquals([(customer.id, customer.name)], widgets['customer'].options)
def test_logged_in_view(self): from eportfolio.models.app import Application from eportfolio.views.login import logged_in_view root = Application() # Not logged in request = testing.DummyRequest(root=root) response = logged_in_view(root, request) self.assertEquals(302, response.status_int) url = 'http://example.com/login.html?login_failed=1' self.assertEquals(url, response.headers['Location']) # Menu's 'Home' entry is used to find the homepage from eportfolio.views.menu import GlobalMenu from eportfolio.views.menu import StudentHomeEntry self.config.registry.registerAdapter(GlobalMenu) self.config.registry.registerAdapter(StudentHomeEntry, name='home') # Logged in student student = self._add_student() self.config.testing_securitypolicy(userid=student.email) request = testing.DummyRequest(root=root) response = logged_in_view(root, request) self.assertEquals(302, response.status_int) url = 'http://example.com/users/%s/' % student.id self.assertEquals(url, response.headers['Location']) from eportfolio.views.menu import TeacherHomeEntry self.config.registry.registerAdapter(TeacherHomeEntry, name='home') # Logged in teacher teacher = self._add_teacher() self.config.testing_securitypolicy(userid=teacher.email) request = testing.DummyRequest(root=root) response = logged_in_view(root, request) self.assertEquals(302, response.status_int) url = 'http://example.com/dashboard.html' self.assertEquals(url, response.headers['Location'])
def test_my_view(self): from myproject.views import my_view context = testing.DummyModel() request = testing.DummyRequest() result = my_view(context, request) self.assertEqual(result.status, '200 OK') body = result.app_iter[0] self.failUnless('Welcome to myproject' in body) self.assertEqual(len(result.headerlist), 2) self.assertEqual(result.headerlist[0], ('content-type', 'text/html; charset=UTF-8')) self.assertEqual(result.headerlist[1], ('Content-Length', str(len(body))))
def test_call(self): from seantisinvoice.views.invoice import InvoiceController request = testing.DummyRequest() # No invoice with this id request.matchdict = dict(invoice='1') view = InvoiceController(None, request) result = view() self.assertEquals(404, result.status_int) # Add an invoice invoice = self._add_invoice() request.matchdict = dict(invoice=str(invoice.id)) view = InvoiceController(None, request) result = view() self.failUnless('main' in result.keys())
def test_call(self): from seantisinvoice.views.customer import CustomerController request = testing.DummyRequest() # No customer with this id request.matchdict = dict(customer='2') view = CustomerController(None, request) result = view() self.assertEquals(404, result.status_int) # Add a customer customer = self._add_customer() request.matchdict = dict(customer=str(customer.id)) view = CustomerController(None, request) result = view() self.failUnless('main' in result.keys())
def test_view_invoice_export(self): from seantisinvoice.views.invoice_export import view_invoice_pdf # Add an invoice company = self._set_company_profile() invoice = self._add_invoice() invoice.company = company request = testing.DummyRequest() request.matchdict = dict(invoice=str(invoice.id)) response = view_invoice_pdf(request) self.assertEquals('application/pdf', response.content_type) # Not existing invoice request.matchdict = dict(invoice='10') response = view_invoice_pdf(request) self.assertEquals(404, response.status_int)
def test_teacher_add_view(self): from eportfolio.models.app import Application from eportfolio.views.teacher import teacher_edit_view root = Application() request = testing.DummyRequest(root=root) response = teacher_edit_view(root['users'], request) self.failUnless('Add' in response.body) request = testing.DummyRequest(root=root) request.params['form.submitted'] = 1 request.params['first_name'] = u'Buck' request.params['last_name'] = u'Mulligan' request.params['email'] = u'*****@*****.**' request.params['password'] = u'' request.params['portrait'] = u'' # Empty password field triggers registration mail teacher_edit_view(root['users'], request) registration_mail = self.mailer.mails[-1] mail_address = '%s %s <%s>' % (u'Buck', u'Mulligan', u'*****@*****.**') self.assertEquals(mail_address, registration_mail['To'])
def test_call(self): from seantisinvoice.views.reports import ReportsController request = testing.DummyRequest() # No invoices yet view = ReportsController(None, request) result = view() self.assertEquals([], result['invoices']) # Add an invoice invoice = self._add_invoice() invoice.tax = 7.6 invoice.items[0].amount = 10000 view = ReportsController(None, request) result = view() self.assertEquals([invoice], result['invoices']) self.assertEquals(10760, result['total_amount']) self.assertEquals(760, result['total_tax'])
def test_competences_container(self): from eportfolio.models.app import Application from eportfolio.views.container import remove_item root = Application() # Add competence meta_competence = self._add_meta_competence() competence = self._add_competence(meta_competence=meta_competence) self.assertEquals(1, len(root['competences'])) # Remove competence request = testing.DummyRequest(root=root) request.POST['item'] = competence.id response = remove_item(root['competences'], request) self.assertEquals(200, response.status_int) self.assertEquals('success', response.body) self.assertEquals(0, len(root['competences']))
def test_projects_container(self): from eportfolio.models.app import Application from eportfolio.views.container import remove_item root = Application() # Try to remove not existing project request = testing.DummyRequest(root=root) request.POST['item'] = 'test' response = remove_item(root['projects'], request) self.assertEquals(400, response.status_int) # Add project project = self._add_project() self.assertEquals(1, len(root['projects'])) request.POST['item'] = project.id response = remove_item(root['projects'], request) self.assertEquals(200, response.status_int) self.assertEquals(0, len(root['projects']))
def test_statusmessage(self): from seantisinvoice import statusmessage request = testing.DummyRequest() request.environ['qc.statusmessage'] = [] msgs = statusmessage.messages(request) self.assertEquals([], msgs) statusmessage.show(request, u'Test message') msgs = statusmessage.messages(request) self.assertEquals(1, len(msgs)) self.assertEquals(u'Test message', msgs[0].msg) self.assertEquals(u'notice', msgs[0].msg_type) # Shown messages are removed msgs = statusmessage.messages(request) self.assertEquals([], msgs) statusmessage.show(request, u'First message') statusmessage.show(request, u'Second message', msg_type=u'error') msgs = statusmessage.messages(request) self.assertEquals(2, len(msgs)) self.assertEquals(u'Second message', msgs[0].msg) self.assertEquals(u'error', msgs[0].msg_type) self.assertEquals(u'First message', msgs[1].msg)
def test_form_defaults(self): from seantisinvoice.views.reports import ReportsController request = testing.DummyRequest() view = ReportsController(None, request) defaults = view.form_defaults() self.assertEquals(None, defaults['from_date']) self.assertEquals(None, defaults['to_date']) # Add an invoice invoice = self._add_invoice() invoice.date = datetime.date(2010, 3, 1) view = ReportsController(None, request) defaults = view.form_defaults() self.assertEquals(datetime.date(2010, 3, 1), defaults['from_date']) self.assertEquals(datetime.date(2010, 3, 1), defaults['to_date']) # Add a second invoice invoice2 = self._add_invoice() invoice2.date = datetime.date(2010, 4, 1) view = ReportsController(None, request) defaults = view.form_defaults() self.assertEquals(datetime.date(2010, 3, 1), defaults['from_date']) self.assertEquals(datetime.date(2010, 4, 1), defaults['to_date'])