| Línea 17... | Línea 17... | 
          
            | 17 | declare(strict_types=1);
 | 17 | declare(strict_types=1);
 | 
          
            | Línea 18... | Línea 18... | 
          
            | 18 |  
 | 18 |  
 | 
          
            | Línea 19... | Línea 19... | 
          
            | 19 | namespace core_reportbuilder\local\helpers;
 | 19 | namespace core_reportbuilder\local\helpers;
 | 
          
            | - |   | 20 |  
 | 
          
            | 20 |  
 | 21 | use advanced_testcase;
 | 
          
            | 21 | use advanced_testcase;
 | - |   | 
          
            | 22 | use core_reportbuilder_generator;
 | 22 | use core\context\system;
 | 
          
            | 23 | use invalid_parameter_exception;
 | 23 | use core_reportbuilder_generator;
 | 
          
            | 24 | use core_reportbuilder\datasource;
 | 24 | use core_reportbuilder\{datasource, system_report_factory};
 | 
          
            | 25 | use core_reportbuilder\local\models\column;
 | 25 | use core_reportbuilder\local\models\{audience, column, filter, schedule};
 | 
          
            | 26 | use core_reportbuilder\local\models\filter;
 | 26 | use core_reportbuilder\local\systemreports\report_access_list;
 | 
          
            | - |   | 27 | use core_tag_tag;
 | 
          
            | Línea 27... | Línea 28... | 
          
            | 27 | use core_tag_tag;
 | 28 | use core_user\reportbuilder\datasource\users;
 | 
          
            | 28 | use core_user\reportbuilder\datasource\users;
 | 29 | use invalid_parameter_exception;
 | 
          
            | 29 |  
 | 30 |  
 | 
          
            | 30 | /**
 | 31 | /**
 | 
          
            | 31 |  * Unit tests for the report helper class
 | 32 |  * Unit tests for the report helper class
 | 
          
            | 32 |  *
 | 33 |  *
 | 
          
            | 33 |  * @package     core_reportbuilder
 | 34 |  * @package     core_reportbuilder
 | 
          
            | 34 |  * @covers      \core_reportbuilder\local\helpers\report
 | 35 |  * @covers      \core_reportbuilder\local\helpers\report
 | 
          
            | 35 |  * @copyright   2021 Paul Holden <paulh@moodle.com>
 | 36 |  * @copyright   2021 Paul Holden <paulh@moodle.com>
 | 
          
            | Línea 36... | Línea 37... | 
          
            | 36 |  * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 | 37 |  * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 | 
          
            | 37 |  */
 | 38 |  */
 | 
          
            | 38 | class report_test extends advanced_testcase {
 | 39 | final class report_test extends advanced_testcase {
 | 
          
            | 39 |  
 | 40 |  
 | 
          
            | Línea 50... | Línea 51... | 
          
            | 50 |             'tags' => ['cat', 'dog'],
 | 51 |             'tags' => ['cat', 'dog'],
 | 
          
            | 51 |         ]);
 | 52 |         ]);
 | 
          
            | Línea 52... | Línea 53... | 
          
            | 52 |  
 | 53 |  
 | 
          
            | 53 |         $this->assertEquals('My report with tags', $report->get('name'));
 | 54 |         $this->assertEquals('My report with tags', $report->get('name'));
 | 
          
            | 54 |         $this->assertEquals(datasource::TYPE_CUSTOM_REPORT, $report->get('type'));
 | 55 |         $this->assertEquals(datasource::TYPE_CUSTOM_REPORT, $report->get('type'));
 | 
          
            | - |   | 56 |         $this->assertEqualsCanonicalizing(
 | 
          
            | 55 |         $this->assertEqualsCanonicalizing(['cat', 'dog'],
 | 57 |             ['cat', 'dog'],
 | 
          
            | - |   | 58 |             array_values(core_tag_tag::get_item_tags_array('core_reportbuilder', 'reportbuilder_report', $report->get('id'))),
 | 
          
            | Línea 56... | Línea 59... | 
          
            | 56 |             core_tag_tag::get_item_tags_array('core_reportbuilder', 'reportbuilder_report', $report->get('id')));
 | 59 |         );
 | 
          
            | 57 |  
 | 60 |  
 | 
          
            | 58 |         $report = report::create_report((object) [
 | 61 |         $report = report::create_report((object) [
 | 
          
            | 59 |             'name' => 'My report without tags',
 | 62 |             'name' => 'My report without tags',
 | 
          
            | Línea 95... | Línea 98... | 
          
            | 95 |             'tags' => ['cat', 'dog'],
 | 98 |             'tags' => ['cat', 'dog'],
 | 
          
            | 96 |         ]);
 | 99 |         ]);
 | 
          
            | Línea 97... | Línea 100... | 
          
            | 97 |  
 | 100 |  
 | 
          
            | 98 |         $this->assertEquals('My renamed report adding tags', $reportupdated->get('name'));
 | 101 |         $this->assertEquals('My renamed report adding tags', $reportupdated->get('name'));
 | 
          
            | 99 |         $this->assertTrue($reportupdated->get('uniquerows'));
 | 102 |         $this->assertTrue($reportupdated->get('uniquerows'));
 | 
          
            | - |   | 103 |         $this->assertEqualsCanonicalizing(
 | 
          
            | 100 |         $this->assertEqualsCanonicalizing(['cat', 'dog'],
 | 104 |             ['cat', 'dog'],
 | 
          
            | - |   | 105 |             array_values(core_tag_tag::get_item_tags_array('core_reportbuilder', 'reportbuilder_report', $reportupdated->get('id'))),
 | 
          
            | - |   | 106 |         );
 | 
          
            | - |   | 107 |     }
 | 
          
            | - |   | 108 |  
 | 
          
            | - |   | 109 |     /**
 | 
          
            | - |   | 110 |      * Test duplicate report
 | 
          
            | - |   | 111 |      */
 | 
          
            | - |   | 112 |     public function test_duplicate_report(): void {
 | 
          
            | - |   | 113 |         $this->resetAfterTest();
 | 
          
            | - |   | 114 |         $this->setAdminUser();
 | 
          
            | - |   | 115 |  
 | 
          
            | - |   | 116 |         /** @var core_reportbuilder_generator $generator */
 | 
          
            | - |   | 117 |         $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
 | 
          
            | - |   | 118 |  
 | 
          
            | - |   | 119 |         // Create custom report containing single column, condition and filter..
 | 
          
            | - |   | 120 |         $report = $generator->create_report(['name' => 'Report 1', 'source' => users::class, 'default' => 0]);
 | 
          
            | - |   | 121 |         $column = $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:lastname']);
 | 
          
            | - |   | 122 |         $condition = $generator->create_condition(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname']);
 | 
          
            | - |   | 123 |         $filter = $generator->create_filter(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:email']);
 | 
          
            | - |   | 124 |  
 | 
          
            | - |   | 125 |         // Add an audience and schedule.
 | 
          
            | - |   | 126 |         $audience = $generator->create_audience(['reportid' => $report->get('id'), 'configdata' => []]);
 | 
          
            | - |   | 127 |         $schedule = $generator->create_schedule([
 | 
          
            | - |   | 128 |             'reportid' => $report->get('id'),
 | 
          
            | - |   | 129 |             'name' => 'My schedule',
 | 
          
            | - |   | 130 |             'audiences' => json_encode([
 | 
          
            | - |   | 131 |                 $audience->get_persistent()->get('id'),
 | 
          
            | - |   | 132 |             ]),
 | 
          
            | - |   | 133 |         ]);
 | 
          
            | - |   | 134 |  
 | 
          
            | - |   | 135 |         // Duplicate report with audiences and schedules.
 | 
          
            | - |   | 136 |         $newreport = report::duplicate_report($report, 'Report 1 copy', true, true);
 | 
          
            | - |   | 137 |         $this->assertNotEquals($report->get('id'), $newreport->get('id'));
 | 
          
            | - |   | 138 |         $this->assertEquals('Report 1 copy', $newreport->get('name'));
 | 
          
            | - |   | 139 |         $this->assertEquals(users::class, $newreport->get('source'));
 | 
          
            | - |   | 140 |  
 | 
          
            | - |   | 141 |         // Assert new report columns.
 | 
          
            | - |   | 142 |         $newcolumns = column::get_records(['reportid' => $newreport->get('id')]);
 | 
          
            | - |   | 143 |         $this->assertCount(1, $newcolumns);
 | 
          
            | - |   | 144 |         [$newcolumn] = $newcolumns;
 | 
          
            | - |   | 145 |         $this->assertNotEquals($column->get('id'), $newcolumn->get('id'));
 | 
          
            | - |   | 146 |         $this->assertEquals('user:lastname', $newcolumn->get('uniqueidentifier'));
 | 
          
            | - |   | 147 |  
 | 
          
            | - |   | 148 |         // Assert new report conditions.
 | 
          
            | - |   | 149 |         $newconditions = filter::get_condition_records($newreport->get('id'));
 | 
          
            | - |   | 150 |         $this->assertCount(1, $newconditions);
 | 
          
            | - |   | 151 |         [$newcondition] = $newconditions;
 | 
          
            | - |   | 152 |         $this->assertNotEquals($condition->get('id'), $newcondition->get('id'));
 | 
          
            | - |   | 153 |         $this->assertEquals('user:firstname', $newcondition->get('uniqueidentifier'));
 | 
          
            | - |   | 154 |  
 | 
          
            | - |   | 155 |         // Assert new report filters.
 | 
          
            | - |   | 156 |         $newfilters = filter::get_filter_records($newreport->get('id'));
 | 
          
            | - |   | 157 |         $this->assertCount(1, $newfilters);
 | 
          
            | - |   | 158 |         [$newfilter] = $newfilters;
 | 
          
            | - |   | 159 |         $this->assertNotEquals($filter->get('id'), $newfilter->get('id'));
 | 
          
            | - |   | 160 |         $this->assertEquals('user:email', $newfilter->get('uniqueidentifier'));
 | 
          
            | - |   | 161 |  
 | 
          
            | - |   | 162 |         // Assert new report audiences.
 | 
          
            | - |   | 163 |         $newaudiences = audience::get_records(['reportid' => $newreport->get('id')]);
 | 
          
            | - |   | 164 |         $this->assertCount(1, $newaudiences);
 | 
          
            | - |   | 165 |         [$newaudience] = $newaudiences;
 | 
          
            | - |   | 166 |         $this->assertNotEquals($audience->get_persistent()->get('id'), $newaudience->get('id'));
 | 
          
            | - |   | 167 |  
 | 
          
            | - |   | 168 |          // Assert new report schedules.
 | 
          
            | - |   | 169 |         $newschedules = schedule::get_records(['reportid' => $newreport->get('id')]);
 | 
          
            | - |   | 170 |         $this->assertCount(1, $newschedules);
 | 
          
            | - |   | 171 |         [$newschedule] = $newschedules;
 | 
          
            | - |   | 172 |         $this->assertNotEquals($schedule->get('id'), $newschedule->get('id'));
 | 
          
            | - |   | 173 |         $this->assertEquals([
 | 
          
            | - |   | 174 |             $newaudience->get('id'),
 | 
          
            | - |   | 175 |         ], (array) json_decode($newschedule->get('audiences')));
 | 
          
            | - |   | 176 |  
 | 
          
            | - |   | 177 |         // Duplicate report without schedules.
 | 
          
            | - |   | 178 |         $newreporttwo = report::duplicate_report($report, 'Report 1 copy #2', true, false);
 | 
          
            | - |   | 179 |         $this->assertEquals(1, column::count_records(['reportid' => $newreporttwo->get('id')]));
 | 
          
            | - |   | 180 |         $this->assertEquals(1, filter::count_records(['reportid' => $newreporttwo->get('id'), 'iscondition' => 1]));
 | 
          
            | - |   | 181 |         $this->assertEquals(1, filter::count_records(['reportid' => $newreporttwo->get('id'), 'iscondition' => 0]));
 | 
          
            | - |   | 182 |         $this->assertEquals(1, audience::count_records(['reportid' => $newreporttwo->get('id')]));
 | 
          
            | - |   | 183 |         $this->assertEquals(0, schedule::count_records(['reportid' => $newreporttwo->get('id')]));
 | 
          
            | - |   | 184 |  
 | 
          
            | - |   | 185 |         // Duplicate report without audiences or schedules.
 | 
          
            | - |   | 186 |         $newreportthree = report::duplicate_report($report, 'Report 1 copy #3', false, false);
 | 
          
            | - |   | 187 |         $this->assertEquals(1, column::count_records(['reportid' => $newreportthree->get('id')]));
 | 
          
            | - |   | 188 |         $this->assertEquals(1, filter::count_records(['reportid' => $newreportthree->get('id'), 'iscondition' => 1]));
 | 
          
            | - |   | 189 |         $this->assertEquals(1, filter::count_records(['reportid' => $newreportthree->get('id'), 'iscondition' => 0]));
 | 
          
            | - |   | 190 |         $this->assertEquals(0, audience::count_records(['reportid' => $newreportthree->get('id')]));
 | 
          
            | 101 |             core_tag_tag::get_item_tags_array('core_reportbuilder', 'reportbuilder_report', $reportupdated->get('id')));
 | 191 |         $this->assertEquals(0, schedule::count_records(['reportid' => $newreportthree->get('id')]));
 | 
          
            | Línea 102... | Línea 192... | 
          
            | 102 |     }
 | 192 |     }
 | 
          
            | 103 |  
 | 193 |  
 | 
          
            | 104 |     /**
 | 194 |     /**
 | 
          
            | Línea 741... | Línea 831... | 
          
            | 741 |  
 | 831 |  
 | 
          
            | 742 |         $this->expectException(invalid_parameter_exception::class);
 | 832 |         $this->expectException(invalid_parameter_exception::class);
 | 
          
            | 743 |         $this->expectExceptionMessage('Invalid filter');
 | 833 |         $this->expectExceptionMessage('Invalid filter');
 | 
          
            | 744 |         report::reorder_report_filter($report->get('id'), 42, 1);
 | 834 |         report::reorder_report_filter($report->get('id'), 42, 1);
 | 
          
            | - |   | 835 |     }
 | 
          
            | - |   | 836 |  
 | 
          
            | - |   | 837 |     /**
 | 
          
            | - |   | 838 |      * Test getting row count for a custom report
 | 
          
            | - |   | 839 |      */
 | 
          
            | - |   | 840 |     public function test_get_report_row_count_custom_report(): void {
 | 
          
            | - |   | 841 |         $this->resetAfterTest();
 | 
          
            | - |   | 842 |  
 | 
          
            | - |   | 843 |         $this->getDataGenerator()->create_user();
 | 
          
            | - |   | 844 |  
 | 
          
            | - |   | 845 |         /** @var core_reportbuilder_generator $generator */
 | 
          
            | - |   | 846 |         $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
 | 
          
            | - |   | 847 |         $report = $generator->create_report(['name' => 'My report', 'source' => users::class]);
 | 
          
            | - |   | 848 |  
 | 
          
            | - |   | 849 |         // There are two users, the admin plus the user we just created.
 | 
          
            | - |   | 850 |         $this->assertEquals(2, report::get_report_row_count($report->get('id')));
 | 
          
            | - |   | 851 |     }
 | 
          
            | - |   | 852 |  
 | 
          
            | - |   | 853 |     /**
 | 
          
            | - |   | 854 |      * Test getting row count for a system report
 | 
          
            | - |   | 855 |      */
 | 
          
            | - |   | 856 |     public function test_get_report_row_count_system_report(): void {
 | 
          
            | - |   | 857 |         $this->resetAfterTest();
 | 
          
            | - |   | 858 |         $this->setAdminUser();
 | 
          
            | - |   | 859 |  
 | 
          
            | - |   | 860 |         $this->getDataGenerator()->create_user();
 | 
          
            | - |   | 861 |  
 | 
          
            | - |   | 862 |         /** @var core_reportbuilder_generator $generator */
 | 
          
            | - |   | 863 |         $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
 | 
          
            | - |   | 864 |  
 | 
          
            | - |   | 865 |         $report = $generator->create_report(['name' => 'My report', 'source' => users::class]);
 | 
          
            | - |   | 866 |         $generator->create_audience(['reportid' => $report->get('id'), 'configdata' => []]);
 | 
          
            | - |   | 867 |  
 | 
          
            | - |   | 868 |         $reportaccesslist = system_report_factory::create(
 | 
          
            | - |   | 869 |             report_access_list::class,
 | 
          
            | - |   | 870 |             system::instance(),
 | 
          
            | - |   | 871 |             parameters: ['id' => $report->get('id')],
 | 
          
            | - |   | 872 |         )->get_report_persistent();
 | 
          
            | - |   | 873 |  
 | 
          
            | - |   | 874 |         // There are two users, the admin plus the user we just created.
 | 
          
            | - |   | 875 |         $this->assertEquals(
 | 
          
            | - |   | 876 |             2,
 | 
          
            | - |   | 877 |             report::get_report_row_count($reportaccesslist->get('id'), ['id' => $report->get('id')],
 | 
          
            | - |   | 878 |         ));
 | 
          
            | 745 |     }
 | 879 |     }
 |