Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
11.76% covered (danger)
11.76%
103 / 876
54.55% covered (warning)
54.55%
6 / 11
CRAP
0.00% covered (danger)
0.00%
0 / 1
phpbb_version_helper_test
11.76% covered (danger)
11.76%
103 / 876
54.55% covered (warning)
54.55%
6 / 11
94.14
0.00% covered (danger)
0.00%
0 / 1
 setUp
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
1
 is_stable_data
0.00% covered (danger)
0.00%
0 / 38
0.00% covered (danger)
0.00%
0 / 1
2
 test_is_stable
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 get_suggested_updates_data
0.00% covered (danger)
0.00%
0 / 105
0.00% covered (danger)
0.00%
0 / 1
2
 test_get_suggested_updates
100.00% covered (success)
100.00%
22 / 22
100.00% covered (success)
100.00%
1 / 1
1
 get_latest_on_current_branch_data
0.00% covered (danger)
0.00%
0 / 79
0.00% covered (danger)
0.00%
0 / 1
2
 test_get_latest_on_current_branch
100.00% covered (success)
100.00%
22 / 22
100.00% covered (success)
100.00%
1 / 1
1
 get_update_on_branch_data
0.00% covered (danger)
0.00%
0 / 215
0.00% covered (danger)
0.00%
0 / 1
2
 test_get_update_on_branch
100.00% covered (success)
100.00%
22 / 22
100.00% covered (success)
100.00%
1 / 1
1
 get_ext_update_on_branch_data
0.00% covered (danger)
0.00%
0 / 336
0.00% covered (danger)
0.00%
0 / 1
2
 test_get_ext_update_on_branch
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2/**
3*
4* This file is part of the phpBB Forum Software package.
5*
6* @copyright (c) phpBB Limited <https://www.phpbb.com>
7* @license GNU General Public License, version 2 (GPL-2.0)
8*
9* For full copyright and license information, please see
10* the docs/CREDITS.txt file.
11*
12*/
13
14class phpbb_version_helper_test extends phpbb_test_case
15{
16    protected $cache;
17    protected $version_helper;
18
19    protected function setUp(): void
20    {
21        parent::setUp();
22
23        global $phpbb_root_path, $phpEx;
24
25        include_once($phpbb_root_path . 'includes/functions.' . $phpEx);
26
27        $this->cache = $this->getMockBuilder('\phpbb\cache\service')
28            ->disableOriginalConstructor()
29            ->getMock();
30
31        $this->version_helper = new \phpbb\version_helper(
32            $this->cache,
33            new \phpbb\config\config(array(
34                'version'    => '3.1.0',
35            )),
36            new \phpbb\file_downloader()
37        );
38    }
39
40    public static function is_stable_data()
41    {
42        return array(
43            array(
44                '3.0.0-a1',
45                false,
46            ),
47            array(
48                '3.0.0-b1',
49                false,
50            ),
51            array(
52                '3.0.0-rc1',
53                false,
54            ),
55            array(
56                '3.0.0-RC1',
57                false,
58            ),
59            array(
60                '3.0.0',
61                true,
62            ),
63            array(
64                '3.0.0-pl1',
65                true,
66            ),
67            array(
68                '3.0.0.1-pl1',
69                true,
70            ),
71            array(
72                '3.1-dev',
73                false,
74            ),
75            array(
76                'foobar',
77                false,
78            ),
79        );
80    }
81
82    /**
83    * @dataProvider is_stable_data
84    */
85    public function test_is_stable($version, $expected)
86    {
87        $this->assertSame($expected, $this->version_helper->is_stable($version));
88    }
89
90    public static function get_suggested_updates_data()
91    {
92        return array(
93            array(
94                '1.0.0',
95                array(
96                    '1.0'    => array(
97                        'current'        => '1.0.1',
98                    ),
99                    '1.1'    => array(
100                        'current'        => '1.1.1',
101                    ),
102                ),
103                array(
104                    '1.0'    => array(
105                        'current'        => '1.0.1',
106                    ),
107                    '1.1'    => array(
108                        'current'        => '1.1.1',
109                    ),
110                ),
111            ),
112            array(
113                '1.0.1',
114                array(
115                    '1.0'    => array(
116                        'current'        => '1.0.1',
117                    ),
118                    '1.1'    => array(
119                        'current'        => '1.1.1',
120                    ),
121                ),
122                array(
123                    '1.1'    => array(
124                        'current'        => '1.1.1',
125                    ),
126                ),
127            ),
128            array(
129                '1.0.1-a1',
130                array(
131                    '1.0'    => array(
132                        'current'        => '1.0.1-a2',
133                    ),
134                    '1.1'    => array(
135                        'current'        => '1.1.0',
136                    ),
137                ),
138                array(
139                    '1.0'    => array(
140                        'current'        => '1.0.1-a2',
141                    ),
142                    '1.1'    => array(
143                        'current'        => '1.1.0',
144                    ),
145                ),
146            ),
147            array(
148                '1.1.0',
149                array(
150                    '1.0'    => array(
151                        'current'        => '1.0.1',
152                    ),
153                    '1.1'    => array(
154                        'current'        => '1.1.1',
155                    ),
156                ),
157                array(
158                    '1.1'    => array(
159                        'current'        => '1.1.1',
160                    ),
161                ),
162            ),
163            array(
164                '1.1.1',
165                array(
166                    '1.0'    => array(
167                        'current'        => '1.0.1',
168                    ),
169                    '1.1'    => array(
170                        'current'        => '1.1.1',
171                    ),
172                ),
173                array(),
174            ),
175            array(
176                '1.1.0-a1',
177                array(
178                    '1.0'    => array(
179                        'current'        => '1.0.1',
180                    ),
181                    '1.1'    => array(
182                        'current'        => '1.1.0-a2',
183                    ),
184                ),
185                array(
186                    '1.1'    => array(
187                        'current'        => '1.1.0-a2',
188                    ),
189                ),
190            ),
191            array(
192                '1.1.0',
193                array(),
194                array(),
195            ),
196        );
197    }
198
199    /**
200    * @dataProvider get_suggested_updates_data
201    */
202    public function test_get_suggested_updates($current_version, $versions, $expected)
203    {
204        global $phpbb_root_path, $phpEx;
205
206        $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
207        $lang = new \phpbb\language\language($lang_loader);
208
209        $version_helper = $this
210            ->getMockBuilder('\phpbb\version_helper')
211            ->onlyMethods(array(
212                'get_versions_matching_stability',
213            ))
214            ->setConstructorArgs(array(
215                $this->cache,
216                new \phpbb\config\config(array(
217                    'version'    => $current_version,
218                )),
219                new \phpbb\file_downloader(),
220                new \phpbb\user($lang, '\phpbb\datetime'),
221            ))
222            ->getMock()
223        ;
224
225        $version_helper->expects($this->any())
226            ->method('get_versions_matching_stability')
227            ->will($this->returnValue($versions));
228
229        $this->assertSame($expected, $version_helper->get_suggested_updates());
230    }
231
232    public static function get_latest_on_current_branch_data()
233    {
234        return array(
235            array(
236                '1.0.0',
237                array(
238                    '1.0'    => array(
239                        'current'        => '1.0.1',
240                    ),
241                    '1.1'    => array(
242                        'current'        => '1.1.1',
243                    ),
244                ),
245                '1.0.1',
246            ),
247            array(
248                '1.0.1',
249                array(
250                    '1.0'    => array(
251                        'current'        => '1.0.1',
252                    ),
253                    '1.1'    => array(
254                        'current'        => '1.1.1',
255                    ),
256                ),
257                '1.0.1',
258            ),
259            array(
260                '1.0.1-a1',
261                array(
262                    '1.0'    => array(
263                        'current'        => '1.0.1-a2',
264                    ),
265                    '1.1'    => array(
266                        'current'        => '1.1.0',
267                    ),
268                ),
269                '1.0.1-a2',
270            ),
271            array(
272                '1.1.0',
273                array(
274                    '1.0'    => array(
275                        'current'        => '1.0.1',
276                    ),
277                    '1.1'    => array(
278                        'current'        => '1.1.1',
279                    ),
280                ),
281                '1.1.1',
282            ),
283            array(
284                '1.1.1',
285                array(
286                    '1.0'    => array(
287                        'current'        => '1.0.1',
288                    ),
289                    '1.1'    => array(
290                        'current'        => '1.1.1',
291                    ),
292                ),
293                '1.1.1',
294            ),
295            array(
296                '1.1.0-a1',
297                array(
298                    '1.0'    => array(
299                        'current'        => '1.0.1',
300                    ),
301                    '1.1'    => array(
302                        'current'        => '1.1.0-a2',
303                    ),
304                ),
305                '1.1.0-a2',
306            ),
307            array(
308                '1.1.0',
309                array(),
310                null,
311            ),
312        );
313    }
314
315    /**
316    * @dataProvider get_latest_on_current_branch_data
317    */
318    public function test_get_latest_on_current_branch($current_version, $versions, $expected)
319    {
320        global $phpbb_root_path, $phpEx;
321
322        $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
323        $lang = new \phpbb\language\language($lang_loader);
324
325        $version_helper = $this
326            ->getMockBuilder('\phpbb\version_helper')
327            ->onlyMethods(array(
328                'get_versions_matching_stability',
329            ))
330            ->setConstructorArgs(array(
331                $this->cache,
332                new \phpbb\config\config(array(
333                    'version'    => $current_version,
334                )),
335                new \phpbb\file_downloader(),
336                new \phpbb\user($lang, '\phpbb\datetime'),
337            ))
338            ->getMock()
339        ;
340
341        $version_helper->expects($this->any())
342            ->method('get_versions_matching_stability')
343            ->will($this->returnValue($versions));
344
345        $this->assertSame($expected, $version_helper->get_latest_on_current_branch());
346    }
347
348    public static function get_update_on_branch_data()
349    {
350        return array(
351            array(
352                '1.0.0',
353                array(
354                    '1.0'    => array(
355                        'current'        => '1.0.1',
356                        'eol'        => false,
357                        'security'    => false,
358                    ),
359                    '1.1'    => array(
360                        'current'        => '1.1.1',
361                        'eol'        => false,
362                        'security'    => false,
363                    ),
364                ),
365                array(
366                    'current'        => '1.0.1',
367                    'eol'        => false,
368                    'security'    => false,
369                ),
370            ),
371            array(
372                '1.0.1',
373                array(
374                    '1.0'    => array(
375                        'current'        => '1.0.1',
376                        'eol'        => false,
377                        'security'    => false,
378                    ),
379                    '1.1'    => array(
380                        'current'        => '1.1.1',
381                        'eol'        => false,
382                        'security'    => false,
383                    ),
384                ),
385                array(),
386            ),
387            array(
388                '1.0.1-a1',
389                array(
390                    '1.0'    => array(
391                        'current'        => '1.0.1-a2',
392                        'eol'        => false,
393                        'security'    => false,
394                    ),
395                    '1.1'    => array(
396                        'current'        => '1.1.0',
397                        'eol'        => false,
398                        'security'    => false,
399                    ),
400                ),
401                array(
402                    'current'        => '1.0.1-a2',
403                    'eol'        => false,
404                    'security'    => false,
405                ),
406            ),
407            array(
408                '1.1.0',
409                array(
410                    '1.0'    => array(
411                        'current'        => '1.0.1',
412                        'eol'        => false,
413                        'security'    => false,
414                    ),
415                    '1.1'    => array(
416                        'current'        => '1.1.1',
417                        'eol'        => false,
418                        'security'    => false,
419                    ),
420                ),
421                array(
422                    'current'        => '1.1.1',
423                    'eol'        => false,
424                    'security'    => false,
425                ),
426            ),
427            array(
428                '1.1.1',
429                array(
430                    '1.0'    => array(
431                        'current'        => '1.0.1',
432                        'eol'        => false,
433                        'security'    => false,
434                    ),
435                    '1.1'    => array(
436                        'current'        => '1.1.1',
437                        'eol'        => false,
438                        'security'    => false,
439                    ),
440                ),
441                array(),
442            ),
443            array(
444                '1.1.0-a1',
445                array(
446                    '1.0'    => array(
447                        'current'        => '1.0.1',
448                        'eol'        => false,
449                        'security'    => false,
450                    ),
451                    '1.1'    => array(
452                        'current'        => '1.1.0-a2',
453                        'eol'        => false,
454                        'security'    => false,
455                    ),
456                ),
457                array(
458                    'current'        => '1.1.0-a2',
459                    'eol'        => false,
460                    'security'    => false,
461                ),
462            ),
463            array(
464                '1.1.0',
465                array(),
466                array(),
467            ),
468            // Latest safe release is 1.0.1
469            array(
470                '1.0.0',
471                array(
472                    '1.0'    => array(
473                        'current'        => '1.0.1',
474                        'eol'            => false,
475                        'security'        => '1.0.1',
476                    ),
477                    '1.1'    => array(
478                        'current'        => '1.1.1',
479                        'eol'        => false,
480                        'security'    => false,
481                    ),
482                ),
483                array(
484                    'current'        => '1.0.1',
485                    'eol'            => false,
486                    'security'        => '1.0.1',
487                ),
488            ),
489            // Latest safe release is 1.0.0
490            array(
491                '1.0.0',
492                array(
493                    '1.0'    => array(
494                        'current'        => '1.0.1',
495                        'eol'            => false,
496                        'security'        => '1.0.0',
497                    ),
498                    '1.1'    => array(
499                        'current'        => '1.1.1',
500                        'eol'        => false,
501                        'security'    => false,
502                    ),
503                ),
504                array(
505                    'current'        => '1.0.1',
506                    'eol'            => false,
507                    'security'        => '1.0.0',
508                ),
509            ),
510            // Latest safe release is 1.1.0
511            array(
512                '1.0.0',
513                array(
514                    '1.0'    => array(
515                        'current'        => '1.0.1',
516                        'eol'            => false,
517                        'security'        => '1.1.0',
518                    ),
519                    '1.1'    => array(
520                        'current'        => '1.1.1',
521                        'eol'        => false,
522                        'security'    => false,
523                    ),
524                ),
525                array(
526                    'current'        => '1.1.1',
527                    'eol'        => false,
528                    'security'    => false,
529                ),
530            ),
531            // Latest 1.0 release is EOL
532            array(
533                '1.0.0',
534                array(
535                    '1.0'    => array(
536                        'current'        => '1.0.1',
537                        'eol'            => true,
538                        'security'    => false,
539                    ),
540                    '1.1'    => array(
541                        'current'        => '1.1.1',
542                        'eol'        => false,
543                        'security'    => false,
544                    ),
545                ),
546                array(
547                    'current'        => '1.1.1',
548                    'eol'        => false,
549                    'security'    => false,
550                ),
551            ),
552            // All are EOL -- somewhat undefined behavior
553            array(
554                '1.0.0',
555                array(
556                    '1.0'    => array(
557                        'current'        => '1.0.1',
558                        'eol'            => true,
559                        'security'        => false,
560                    ),
561                    '1.1'    => array(
562                        'current'        => '1.1.1',
563                        'eol'            => true,
564                        'security'        => false,
565                    ),
566                ),
567                array(),
568            ),
569        );
570    }
571
572    /**
573     * @dataProvider get_update_on_branch_data
574     */
575    public function test_get_update_on_branch($current_version, $versions, $expected)
576    {
577        global $phpbb_root_path, $phpEx;
578
579        $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
580        $lang = new \phpbb\language\language($lang_loader);
581
582        $version_helper = $this
583            ->getMockBuilder('\phpbb\version_helper')
584            ->onlyMethods(array(
585                'get_versions_matching_stability',
586            ))
587            ->setConstructorArgs(array(
588                $this->cache,
589                new \phpbb\config\config(array(
590                    'version'    => $current_version,
591                )),
592                new \phpbb\file_downloader(),
593                new \phpbb\user($lang, '\phpbb\datetime'),
594            ))
595            ->getMock()
596        ;
597
598        $version_helper->expects($this->any())
599            ->method('get_versions_matching_stability')
600            ->will($this->returnValue($versions));
601
602        $this->assertSame($expected, $version_helper->get_update_on_branch());
603    }
604
605    public static function get_ext_update_on_branch_data()
606    {
607        return array(
608            // Single branch, check version for current branch
609            array(
610                '3.1.0',
611                '1.0.0',
612                array(
613                    '3.1'    => array(
614                        'current'        => '1.0.1',
615                        'eol'        => false,
616                        'security'    => false,
617                    ),
618                ),
619                array(
620                    'current'        => '1.0.1',
621                    'eol'        => false,
622                    'security'    => false,
623                ),
624            ),
625            array(
626                '3.1.0',
627                '1.0.1',
628                array(
629                    '3.1'    => array(
630                        'current'        => '1.0.1',
631                        'eol'        => false,
632                        'security'    => false,
633                    ),
634                ),
635                array(),
636            ),
637            array(
638                '3.2.0',
639                '1.0.0',
640                array(
641                    '3.2'    => array(
642                        'current'        => '1.1.1',
643                        'eol'        => false,
644                        'security'    => false,
645                    ),
646                ),
647                array(
648                    'current'        => '1.1.1',
649                    'eol'        => false,
650                    'security'    => false,
651                ),
652            ),
653            array(
654                '3.2.0',
655                '1.1.1',
656                array(
657                    '3.2'    => array(
658                        'current'        => '1.1.1',
659                        'eol'        => false,
660                        'security'    => false,
661                    ),
662                ),
663                array(),
664            ),
665            // Single branch, check for newest version when branches don't match up
666            array(
667                '3.1.0',
668                '1.0.0',
669                array(
670                    '3.2'    => array(
671                        'current'        => '1.1.1',
672                        'eol'        => false,
673                        'security'    => false,
674                    ),
675                ),
676                array(
677                    'current'        => '1.1.1',
678                    'eol'        => false,
679                    'security'    => false,
680                ),
681            ),
682            array(
683                '3.1.0',
684                '1.1.1',
685                array(
686                    '3.2'    => array(
687                        'current'        => '1.1.1',
688                        'eol'        => false,
689                        'security'    => false,
690                    ),
691                ),
692                array(),
693            ),
694            array(
695                '3.2.0',
696                '1.0.0',
697                array(
698                    '3.1'    => array(
699                        'current'        => '1.0.1',
700                        'eol'        => false,
701                        'security'    => false,
702                    ),
703                ),
704                array(
705                    'current'        => '1.0.1',
706                    'eol'        => false,
707                    'security'    => false,
708                ),
709            ),
710            array(
711                '3.2.0',
712                '1.0.1',
713                array(
714                    '3.1'    => array(
715                        'current'        => '1.0.1',
716                        'eol'        => false,
717                        'security'    => false,
718                    ),
719                ),
720                array(),
721            ),
722            array(
723                '3.3.0',
724                '1.0.0',
725                array(
726                    '3.2'    => array(
727                        'current'        => '1.1.1',
728                        'eol'        => false,
729                        'security'    => false,
730                    ),
731                ),
732                array(
733                    'current'        => '1.1.1',
734                    'eol'        => false,
735                    'security'    => false,
736                ),
737            ),
738            array(
739                '3.3.0',
740                '1.1.1',
741                array(
742                    '3.2'    => array(
743                        'current'        => '1.1.1',
744                        'eol'        => false,
745                        'security'    => false,
746                    ),
747                ),
748                array(),
749            ),
750            // Multiple branches, check version for current branch
751            array(
752                '3.1.0',
753                '1.0.0',
754                array(
755                    '3.1'    => array(
756                        'current'        => '1.0.1',
757                        'eol'        => false,
758                        'security'    => false,
759                    ),
760                    '3.2'    => array(
761                        'current'        => '1.1.1',
762                        'eol'        => false,
763                        'security'    => false,
764                    ),
765                ),
766                array(
767                    'current'        => '1.0.1',
768                    'eol'        => false,
769                    'security'    => false,
770                ),
771            ),
772            array(
773                '3.1.0',
774                '1.0.1',
775                array(
776                    '3.1'    => array(
777                        'current'        => '1.0.1',
778                        'eol'        => false,
779                        'security'    => false,
780                    ),
781                    '3.2'    => array(
782                        'current'        => '1.1.1',
783                        'eol'        => false,
784                        'security'    => false,
785                    ),
786                ),
787                array(),
788            ),
789            array(
790                '3.1.0',
791                '1.1.1',
792                array(
793                    '3.1'    => array(
794                        'current'        => '1.0.1',
795                        'eol'        => false,
796                        'security'    => false,
797                    ),
798                    '3.2'    => array(
799                        'current'        => '1.1.1',
800                        'eol'        => false,
801                        'security'    => false,
802                    ),
803                ),
804                array(),
805            ),
806            array(
807                '3.2.0',
808                '1.0.0',
809                array(
810                    '3.1'    => array(
811                        'current'        => '1.0.1',
812                        'eol'        => false,
813                        'security'    => false,
814                    ),
815                    '3.2'    => array(
816                        'current'        => '1.1.1',
817                        'eol'        => false,
818                        'security'    => false,
819                    ),
820                ),
821                array(
822                    'current'        => '1.1.1',
823                    'eol'        => false,
824                    'security'    => false,
825                ),
826            ),
827            array(
828                '3.2.0',
829                '1.0.1',
830                array(
831                    '3.1'    => array(
832                        'current'        => '1.0.1',
833                        'eol'        => false,
834                        'security'    => false,
835                    ),
836                    '3.2'    => array(
837                        'current'        => '1.1.1',
838                        'eol'        => false,
839                        'security'    => false,
840                    ),
841                ),
842                array(
843                    'current'        => '1.1.1',
844                    'eol'        => false,
845                    'security'    => false,
846                ),
847            ),
848            array(
849                '3.2.0',
850                '1.1.1',
851                array(
852                    '3.1'    => array(
853                        'current'        => '1.0.1',
854                        'eol'        => false,
855                        'security'    => false,
856                    ),
857                    '3.2'    => array(
858                        'current'        => '1.1.1',
859                        'eol'        => false,
860                        'security'    => false,
861                    ),
862                ),
863                array(),
864            ),
865            // Multiple branches, check for newest version when branches don't match up
866            array(
867                '3.3.0',
868                '1.0.0',
869                array(
870                    '3.1'    => array(
871                        'current'        => '1.0.1',
872                        'eol'        => false,
873                        'security'    => false,
874                    ),
875                    '3.2'    => array(
876                        'current'        => '1.1.1',
877                        'eol'        => false,
878                        'security'    => false,
879                    ),
880                ),
881                array(
882                    'current'        => '1.1.1',
883                    'eol'        => false,
884                    'security'    => false,
885                ),
886            ),
887            array(
888                '3.3.0',
889                '1.0.1',
890                array(
891                    '3.1'    => array(
892                        'current'        => '1.0.1',
893                        'eol'        => false,
894                        'security'    => false,
895                    ),
896                    '3.2'    => array(
897                        'current'        => '1.1.1',
898                        'eol'        => false,
899                        'security'    => false,
900                    ),
901                ),
902                array(
903                    'current'        => '1.1.1',
904                    'eol'        => false,
905                    'security'    => false,
906                ),
907            ),
908            array(
909                '3.3.0',
910                '1.1.0',
911                array(
912                    '3.1'    => array(
913                        'current'        => '1.0.1',
914                        'eol'        => false,
915                        'security'    => false,
916                    ),
917                    '3.2'    => array(
918                        'current'        => '1.1.1',
919                        'eol'        => false,
920                        'security'    => false,
921                    ),
922                ),
923                array(
924                    'current'        => '1.1.1',
925                    'eol'        => false,
926                    'security'    => false,
927                ),
928            ),
929            array(
930                '3.3.0',
931                '1.1.1',
932                array(
933                    '3.1'    => array(
934                        'current'        => '1.0.1',
935                        'eol'        => false,
936                        'security'    => false,
937                    ),
938                    '3.2'    => array(
939                        'current'        => '1.1.1',
940                        'eol'        => false,
941                        'security'    => false,
942                    ),
943                ),
944                array(),
945            ),
946        );
947    }
948
949    /**
950     * @dataProvider get_ext_update_on_branch_data
951     */
952    public function test_get_ext_update_on_branch($phpbb_version, $ext_version, $versions, $expected)
953    {
954        global $phpbb_root_path, $phpEx;
955
956        $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
957        $lang = new \phpbb\language\language($lang_loader);
958
959        $version_helper = $this
960            ->getMockBuilder('\phpbb\version_helper')
961            ->onlyMethods(array(
962                'get_versions_matching_stability',
963            ))
964            ->setConstructorArgs(array(
965                $this->cache,
966                new \phpbb\config\config(array(
967                    'version'    => $phpbb_version,
968                )),
969                new \phpbb\file_downloader(),
970                new \phpbb\user($lang, '\phpbb\datetime'),
971            ))
972            ->getMock()
973        ;
974
975        $version_helper->expects($this->any())
976            ->method('get_versions_matching_stability')
977            ->will($this->returnValue($versions));
978
979        $version_helper->set_current_version($ext_version);
980
981        $this->assertSame($expected, $version_helper->get_ext_update_on_branch());
982    }
983}