This file is indexed.

/usr/lib/python2.7/dist-packages/schooltool/lyceum/journal/ftests/consecutive_periods.txt is in python-schooltool.lyceum.journal 2.6.4-0ubuntu2.

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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
Functional doctest for Section Journal with Consecutive Periods as One
======================================================================

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'])

A class:

    >>> manager.getLink('2005').click()
    >>> manager.getLink('Groups').click()
    >>> manager.getLink('New Group').click()
    >>> manager.getControl('Title').value = "2a"
    >>> manager.getControl('Add').click()

And some students:

    >>> addPerson('Frum', 'Student', username='frum', password='pwd', groups=['students', '2a'])
    >>> addPerson('Grum', 'Student', username='grum', password='pwd', groups=['students', '2a'])

Add a term:

    >>> manager.getLink('2005').click()
    >>> 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 couple of sections:

    >>> 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'])

    >>> addSection("History", "2005", "2005 Fall 1",
    ...            title="History (1a)",
    ...            instructors=['Pete'],
    ...            members=['Grum', 'Frum'])

Let's schedule the sections:

    >>> 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('pete', 'pwd')

Since we haven't marked the timetable for treating consecutive periods as one
period, we will note that all periods will show up in the section journal,
including Tuesday B which comes right after Tuesday A.  This is the default
behavior:

    >>> teacher.open('http://localhost/persons/frum/calendar/2005-09-06')
    >>> teacher.getLink('Journal', index=1).click()
    >>> teacher.getLink('Frum').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 change the section schedule to have that flag set to True:

    >>> 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('edit periods').click()
    >>> collapse_periods = manager.getControl(
    ...     name='form.widgets.consecutive_periods_as_one:list')
    >>> collapse_periods.value = ['true']
    >>> manager.getControl('Save').click()

Now when we look at the section journal, we note that Tuesday B is gone:

    >>> teacher.open('http://localhost/persons/frum/calendar/2005-09-06')
    >>> teacher.getLink('Journal', index=1).click()
    >>> teacher.getLink('Frum').click()
    >>> printGradebookTable(teacher.contents)
    +-----+------------+-----------+---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+---------+---------+
    | Nr. | First Name | Last Name | 06      | 07 A    | 13 A    | 14 A    | 20 A    | 21 A    | 27 A    | 28 A    | Average | Absences | Tardies | Excused |
    +-----+------------+-----------+---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+---------+---------+
    | 1   | Frum       | Student   | [_____] | [_____] | [_____] | [_____] | [_____] | [_____] | [_____] | [_____] |         |          |         |         |
    | 2   | Grum       | Student   | [_____] |         |         |         |         |         |         |         |         |          |         |         |
    +-----+------------+-----------+---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+---------+---------+

When we mark Frum as if he has skipped some lessons, we see that the view
accepts the data and returns it to us:

    >>> cells = analyze.queryHTML('//table[@class="data"]//input[@type="text"]/@name', teacher.contents)
    >>> for i in range(8):
    ...     teacher.getControl(name=cells[i]).value = 'a'
    >>> teacher.getControl('Update').click()
    >>> printGradebookTable(teacher.contents)
    +-----+------------+-----------+---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+---------+---------+
    | Nr. | First Name | Last Name | 06      | 07 A    | 13 A    | 14 A    | 20 A    | 21 A    | 27 A    | 28 A    | Average | Absences | Tardies | Excused |
    +-----+------------+-----------+---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+---------+---------+
    | 1   | Frum       | Student   | [a____] | [a____] | [a____] | [a____] | [a____] | [a____] | [a____] | [a____] |         | 8        |         | 8 / 0   |
    | 2   | Grum       | Student   | [_____] |         |         |         |         |         |         |         |         |          |         |         |
    +-----+------------+-----------+---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+---------+---------+