/usr/lib/python2.7/dist-packages/schooltool/lyceum/journal/ftests/ajax.txt is in python-schooltool.lyceum.journal 2.6.3-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | Functional doctest for SchoolTool Journal
=========================================
Let's log in with the manager account:
>>> from schooltool.lyceum.journal.ftests import printGradebookTable
>>> manager = Browser('manager', 'schooltool')
Set up a basic school year:
>>> manager.getLink('Manage').click()
>>> manager.getLink('School Years').click()
>>> manager.getLink('New School Year').click()
>>> manager.getControl('Title').value = '2005'
>>> manager.getControl('First day').value = '2005-09-01'
>>> manager.getControl('Last day').value = '2006-07-31'
>>> manager.getControl('Add').click()
Add some teachers:
>>> from schooltool.basicperson.browser.ftests.setup import addPerson
>>> addPerson('Pete', 'Teacher', username='pete', password='pwd', groups=['teachers'])
And some students:
>>> addPerson('Frum', 'Student', username='frum', password='pwd', groups=['students'])
>>> addPerson('Grum', 'Student', username='grum', password='pwd', groups=['students'])
Add a term:
>>> manager.getLink('Add a new term').click()
>>> manager.getControl('Title').value = '2005 Fall 1'
>>> manager.getControl('Start date').value = '2005-09-01'
>>> manager.getControl('End date').value = '2005-10-31'
>>> manager.getControl('Next').click()
>>> manager.getControl('Saturday').click()
>>> manager.getControl('Sunday').click()
>>> manager.getControl('Add term').click()
Timetable schema:
>>> manager.getLink('2005').click()
>>> manager.getLink('School Timetables').click()
>>> manager.getLink('New Timetable').click()
>>> manager.getControl('Next').click()
>>> manager.getControl('Days of the week').click()
>>> manager.getControl('Same time each day').click()
>>> manager.getControl(name='field.times').value = '9:00-10:00\n10:30-11:30'
>>> manager.getControl('Next').click()
>>> manager.getControl('Have names').click()
>>> manager.getControl(name='field.periods').value = 'A\nB'
>>> manager.getControl('Next').click()
>>> manager.getControl('Same').click()
>>> manager.getControl('Next').click()
>>> manager.getControl('No').click()
A section:
>>> from schooltool.app.browser.ftests.setup import addSection
>>> from schooltool.app.browser.ftests.setup import addCourse
>>> addCourse("History", "2005")
>>> addSection("History", "2005", "2005 Fall 1",
... title="History (1a)",
... instructors=['Pete'],
... members=['Grum', 'Frum'])
Let's schedule the section:
>>> manager.getLink('2005').click()
>>> manager.getLink('2005 Fall 1').click()
>>> manager.getLink('Sections').click()
>>> manager.getLink(url='sections/1').click()
>>> manager.getLink('Schedule').click()
>>> manager.getLink('Add Timetable').click()
>>> manager.getControl('Add').click()
>>> manager.getControl(name='period.1-.Period-').value = True
>>> manager.getControl(name='period.1-.Period-2-').value = True
>>> manager.getControl(name='period.2-.Period-').value = True
>>> manager.getControl('Save').click()
Let's log in with the teacher account:
>>> teacher = Browser()
>>> teacher.handleErrors = False
>>> teacher.open('http://localhost/')
>>> teacher.getLink('Log In').click()
>>> teacher.getControl('Username').value = 'pete'
>>> teacher.getControl('Password').value = 'pwd'
>>> teacher.getControl('Log in').click()
>>> teacher.open('http://localhost/persons/frum/calendar/2005-09-06')
>>> teacher.getLink('Journal', index=1).click()
>>> printGradebookTable(teacher.contents)
+-----+------------+-----------+---------+------+------+------+------+------+------+------+------+------+------+------+---------+----------+---------+---------+
| Nr. | First Name | Last Name | 06 | 06 B | 07 A | 13 A | 13 B | 14 A | 20 A | 20 B | 21 A | 27 A | 27 B | 28 A | Average | Absences | Tardies | Excused |
+-----+------------+-----------+---------+------+------+------+------+------+------+------+------+------+------+------+---------+----------+---------+---------+
| 1 | Frum | Student | [_____] | | | | | | | | | | | | | | | |
| 2 | Grum | Student | [_____] | | | | | | | | | | | | | | | |
+-----+------------+-----------+---------+------+------+------+------+------+------+------+------+------+------+------+---------+----------+---------+---------+
Let's add some grades:
>>> old_url = teacher.url
>>> cells = analyze.queryHTML('//table[@class="data"]//input[@type="text"]/@name', teacher.contents)
>>> event_id = cells[0].split(".")[1]
>>> grade_url = 'http://localhost/schoolyears/2005/2005-fall-1/sections/1/journal/ajax.xml?event_id=%s&person_id=%s&grade=%s'
>>> teacher.open(grade_url % (event_id, 'frum', 9))
>>> teacher.open(grade_url % (event_id, 'grum', 3))
>>> teacher.open(old_url)
>>> printGradebookTable(teacher.contents)
+-----+------------+-----------+---------+------+------+------+------+------+------+------+------+------+------+------+---------+----------+---------+---------+
| Nr. | First Name | Last Name | 06 | 06 B | 07 A | 13 A | 13 B | 14 A | 20 A | 20 B | 21 A | 27 A | 27 B | 28 A | Average | Absences | Tardies | Excused |
+-----+------------+-----------+---------+------+------+------+------+------+------+------+------+------+------+------+---------+----------+---------+---------+
| 1 | Frum | Student | [9____] | | | | | | | | | | | | 9.000 | | | |
| 2 | Grum | Student | [3____] | | | | | | | | | | | | 3.000 | | | |
+-----+------------+-----------+---------+------+------+------+------+------+------+------+------+------+------+------+---------+----------+---------+---------+
What if Grum tries to circumvent the security and use the ajax url
directly to set his grades:
>>> grum = Browser()
>>> grum.handleErrors = False
>>> grum.open('http://localhost/')
>>> grum.getLink('Log In').click()
>>> grum.getControl('Username').value = 'grum'
>>> grum.getControl('Password').value = 'pwd'
>>> grum.getControl('Log in').click()
>>> grum.open(grade_url % (event_id, 'grum', 10))
Traceback (most recent call last):
...
Unauthorized: (<zope.browserpage.metaconfigure.SectionJournalAjaxView object at ...>,
'browserDefault', 'schooltool.edit')
|