first commit

This commit is contained in:
CHIEFSOFT\ameye
2024-09-30 18:11:26 -04:00
commit e592ca6823
27270 changed files with 5002257 additions and 0 deletions
@@ -0,0 +1,34 @@
@qbank @qbank_editquestion
Feature: Use the qbank plugin manager page for editquestion
In order to check the plugin behaviour with enable and disable
Background:
Given the following "courses" exist:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
And the following "activities" exist:
| activity | name | course | idnumber |
| quiz | Test quiz | C1 | quiz1 |
And the following "question categories" exist:
| contextlevel | reference | name |
| Course | C1 | Test questions |
And the following "questions" exist:
| questioncategory | qtype | name | questiontext |
| Test questions | truefalse | First question | Answer the first question |
| Test questions | truefalse | First question second | Answer the first question |
Scenario: Enable/disable edit question columns from the base view
Given I log in as "admin"
When I navigate to "Plugins > Question bank plugins > Manage question bank plugins" in site administration
And I should see "Edit question"
And I click on "Disable" "link" in the "Edit question" "table_row"
And I am on the "Test quiz" "mod_quiz > question bank" page
Then I should not see "Status"
And the "Edit question" action should not exist for the "First question" question in the question bank
And the "Duplicate" action should not exist for the "First question" question in the question bank
And I navigate to "Plugins > Question bank plugins > Manage question bank plugins" in site administration
And I click on "Enable" "link" in the "Edit question" "table_row"
And I am on the "Test quiz" "mod_quiz > question bank" page
Then I should see "Status"
And the "Edit question" action should exist for the "First question" question in the question bank
And the "Duplicate" action should exist for the "First question" question in the question bank
@@ -0,0 +1,35 @@
@qbank @qbank_editquestion
Feature: Use the qbank base view to test the status change using
the pop up
Background:
Given the following "courses" exist:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
And the following "activities" exist:
| activity | name | course | idnumber |
| quiz | Test quiz | C1 | quiz1 |
And the following "question categories" exist:
| contextlevel | reference | name |
| Course | C1 | Test questions |
And the following "questions" exist:
| questioncategory | qtype | name | questiontext |
| Test questions | truefalse | First question | Answer the first question |
| Test questions | truefalse | Second question | Answer the first question |
@javascript
Scenario: Question status dropdown should change the status of the question
Given I am on the "Test quiz" "mod_quiz > question bank" page logged in as "admin"
And I apply question bank filter "Category" with value "Test questions"
And I should see "Test questions"
And the field "question_status_dropdown" in the "First question" "table_row" matches value "Ready"
And the field "question_status_dropdown" in the "Second question" "table_row" matches value "Ready"
And I set the field "question_status_dropdown" to "Draft"
And I reload the page
And the field "question_status_dropdown" in the "First question" "table_row" matches value "Draft"
And the field "question_status_dropdown" in the "Second question" "table_row" matches value "Ready"
And I set the field "question_status_dropdown" in the "Second question" "table_row" to "Draft"
And I set the field "question_status_dropdown" in the "First question" "table_row" to "Ready"
And I reload the page
And the field "question_status_dropdown" in the "First question" "table_row" matches value "Ready"
And the field "question_status_dropdown" in the "Second question" "table_row" matches value "Draft"
@@ -0,0 +1,118 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace qbank_editquestion;
use core_question\local\bank\question_version_status;
use qbank_editquestion\external\update_question_version_status;
/**
* Submit status external api test.
*
* @package qbank_editquestion
* @copyright 2021 Catalyst IT Australia Pty Ltd
* @author Safat Shahin <safatshahin@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*
* @covers \core_question\local\bank\question_version_status
* @coversDefaultClass \qbank_editquestion\external\update_question_version_status
*/
class update_question_version_status_test extends \advanced_testcase {
/** @var \stdClass course record. */
protected $course;
/** @var mixed. */
protected $user;
/**
* Called before every test.
*/
public function setUp(): void {
global $USER;
parent::setUp();
$this->setAdminUser();
$this->course = $this->getDataGenerator()->create_course();
$this->user = $USER;
}
/**
* Test if the submit status webservice changes the status of the question.
*
* @covers ::execute
* @covers \qbank_editquestion\editquestion_helper::get_question_status_string
*/
public function test_submit_status_updates_the_question_status(): void {
global $DB;
$this->resetAfterTest();
$questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
$cat = $questiongenerator->create_question_category();
$numq = $questiongenerator->create_question('essay', null,
['category' => $cat->id, 'name' => 'This is the first version']);
$result = update_question_version_status::execute($numq->id, 'draft');
// Test if the version actually changed.
$currentstatus = $DB->get_record('question_versions', ['questionid' => $numq->id]);
$this->assertEquals(editquestion_helper::get_question_status_string($currentstatus->status), $result['statusname']);
}
/**
* Test submit status webservice only takes an existing parameter status.
*
* @covers ::execute
*/
public function test_submit_status_error(): void {
global $DB;
$this->resetAfterTest();
$questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
$cat = $questiongenerator->create_question_category();
$numq = $questiongenerator->create_question('essay', null,
['category' => $cat->id, 'name' => 'This is the first version']);
// Passing a wrong status to web service.
$result = update_question_version_status::execute($numq->id, 'frog');
// Tests web service returns error.
$this->assertEquals(false, $result['status']);
$this->assertEquals('', $result['statusname']);
$this->assertEquals(get_string('unrecognizedstatus', 'qbank_editquestion'), $result['error']);
// Test version did not change.
$currentstatus = $DB->get_record('question_versions', ['questionid' => $numq->id]);
$this->assertEquals(question_version_status::QUESTION_STATUS_READY, $currentstatus->status);
}
/**
* Test that updating the status does not create a new version.
*
* @covers ::execute
*/
public function test_submit_status_does_not_create_a_new_version(): void {
global $DB;
$this->resetAfterTest();
// Find out the start count in 'question_versions' table.
$versioncount = $DB->count_records('question_versions');
$questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
$cat = $questiongenerator->create_question_category();
$numq = $questiongenerator->create_question('essay', null,
['category' => $cat->id, 'name' => 'This is the first version']);
$countcurrentrecords = $DB->count_records('question_versions');
// New version count should be equal to start + 1.
$this->assertEquals($versioncount + 1, $countcurrentrecords);
$result = update_question_version_status::execute($numq->id, 'draft');
$countafterupdate = $DB->count_records('question_versions');
$this->assertEquals($countcurrentrecords, $countafterupdate);
}
}