Proyectos de Subversion Moodle

Rev

Rev 1 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
// This file is part of Moodle - http://moodle.org/
3
//
4
// Moodle is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// Moodle is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
namespace format_weeks;
18
 
19
/**
20
 * Unit tests for the event observers used by the weeks course format.
21
 *
22
 * @package format_weeks
23
 * @copyright 2017 Mark Nelson <markn@moodle.com>
24
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25
 */
26
class observer_test extends \advanced_testcase {
27
 
28
    /**
29
     * Test setup.
30
     */
31
    public function setUp(): void {
32
        $this->resetAfterTest();
33
    }
34
 
35
    /**
36
     * Tests when we update a course with automatic end date set.
37
     */
11 efrain 38
    public function test_course_updated_with_automatic_end_date(): void {
1 efrain 39
        global $DB;
40
 
41
        // Generate a course with some sections.
42
        $numsections = 6;
43
        $startdate = time();
44
        $course = $this->getDataGenerator()->create_course(array(
45
            'numsections' => $numsections,
46
            'format' => 'weeks',
47
            'startdate' => $startdate,
48
            'automaticenddate' => 1));
49
 
50
        // Ok, let's update the course start date.
51
        $newstartdate = $startdate + WEEKSECS;
52
        update_course((object)['id' => $course->id, 'startdate' => $newstartdate]);
53
 
54
        // Get the updated course end date.
55
        $enddate = $DB->get_field('course', 'enddate', array('id' => $course->id));
56
 
57
        $format = course_get_format($course->id);
58
        $this->assertEquals($numsections, $format->get_last_section_number());
59
        $this->assertEquals($newstartdate, $format->get_course()->startdate);
60
        $dates = $format->get_section_dates($numsections);
61
        $this->assertEquals($dates->end, $enddate);
62
    }
63
 
64
    /**
65
     * Tests when we update a course with automatic end date set but no actual change is made.
66
     */
11 efrain 67
    public function test_course_updated_with_automatic_end_date_no_change(): void {
1 efrain 68
        global $DB;
69
 
70
        // Generate a course with some sections.
71
        $course = $this->getDataGenerator()->create_course(array(
72
            'numsections' => 6,
73
            'format' => 'weeks',
74
            'startdate' => time(),
75
            'automaticenddate' => 1));
76
 
77
        // Get the end date from the DB as the results will have changed from $course above after observer processing.
78
        $createenddate = $DB->get_field('course', 'enddate', array('id' => $course->id));
79
 
80
        // Ok, let's update the course - but actually not change anything.
81
        update_course((object)['id' => $course->id]);
82
 
83
        // Get the updated course end date.
84
        $updateenddate = $DB->get_field('course', 'enddate', array('id' => $course->id));
85
 
86
        // Confirm nothing changed.
87
        $this->assertEquals($createenddate, $updateenddate);
88
    }
89
 
90
    /**
91
     * Tests when we update a course without automatic end date set.
92
     */
11 efrain 93
    public function test_course_updated_without_automatic_end_date(): void {
1 efrain 94
        global $DB;
95
 
96
        // Generate a course with some sections.
97
        $startdate = time();
98
        $enddate = $startdate + WEEKSECS;
99
        $course = $this->getDataGenerator()->create_course(array(
100
            'numsections' => 6,
101
            'format' => 'weeks',
102
            'startdate' => $startdate,
103
            'enddate' => $enddate,
104
            'automaticenddate' => 0));
105
 
106
        // Ok, let's update the course start date.
107
        $newstartdate = $startdate + WEEKSECS;
108
        update_course((object)['id' => $course->id, 'startdate' => $newstartdate]);
109
 
110
        // Get the updated course end date.
111
        $updateenddate = $DB->get_field('course', 'enddate', array('id' => $course->id));
112
 
113
        // Confirm nothing changed.
114
        $this->assertEquals($enddate, $updateenddate);
115
    }
116
 
117
    /**
118
     * Tests when we adding a course section with automatic end date set.
119
     */
11 efrain 120
    public function test_course_section_created_with_automatic_end_date(): void {
1 efrain 121
        global $DB;
122
 
123
        $numsections = 6;
124
        $course = $this->getDataGenerator()->create_course(array(
125
            'numsections' => $numsections,
126
            'format' => 'weeks',
127
            'startdate' => time(),
128
            'automaticenddate' => 1));
129
 
130
        // Add a section to the course.
131
        course_create_section($course->id);
132
 
133
        // Get the updated course end date.
134
        $enddate = $DB->get_field('course', 'enddate', array('id' => $course->id));
135
 
136
        $format = course_get_format($course->id);
137
        $dates = $format->get_section_dates($numsections + 1);
138
 
139
        // Confirm end date was updated.
140
        $this->assertEquals($enddate, $dates->end);
141
    }
142
 
143
    /**
144
     * Tests when we update a course without automatic end date set.
145
     */
11 efrain 146
    public function test_create_section_without_automatic_end_date(): void {
1 efrain 147
        global $DB;
148
 
149
        // Generate a course with some sections.
150
        $startdate = time();
151
        $enddate = $startdate + WEEKSECS;
152
        $course = $this->getDataGenerator()->create_course(array(
153
            'numsections' => 6,
154
            'format' => 'weeks',
155
            'startdate' => $startdate,
156
            'enddate' => $enddate,
157
            'automaticenddate' => 0));
158
 
159
        // Delete automatic end date from the database.
160
        $DB->delete_records('course_format_options', ['courseid' => $course->id, 'name' => 'automaticenddate']);
161
 
162
        // Create a new section.
163
        course_create_section($course->id, 0);
164
 
165
        // Get the updated course end date.
166
        $updateenddate = $DB->get_field('course', 'enddate', array('id' => $course->id));
167
 
168
        // Confirm enddate is automatic now - since automatic end date is not set it is assumed default (which is '1').
169
        $format = course_get_format($course->id);
170
        $this->assertEquals(7, $format->get_last_section_number());
171
        $dates = $format->get_section_dates(7);
172
        $this->assertEquals($dates->end, $updateenddate);
173
    }
174
 
175
    /**
176
     * Tests when we deleting a course section with automatic end date set.
177
     */
11 efrain 178
    public function test_course_section_deleted_with_automatic_end_date(): void {
1 efrain 179
        global $DB;
180
 
181
        // Generate a course with some sections.
182
        $numsections = 6;
183
        $course = $this->getDataGenerator()->create_course(array(
184
            'numsections' => $numsections,
185
            'format' => 'weeks',
186
            'startdate' => time(),
187
            'automaticenddate' => 1));
188
 
189
        // Add a section to the course.
190
        course_delete_section($course, $numsections);
191
 
192
        // Get the updated course end date.
193
        $enddate = $DB->get_field('course', 'enddate', array('id' => $course->id));
194
 
195
        $format = course_get_format($course->id);
196
        $dates = $format->get_section_dates($numsections - 1);
197
 
198
        // Confirm end date was updated.
199
        $this->assertEquals($enddate, $dates->end);
200
    }
201
}