Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 78
0.00% covered (danger)
0.00%
0 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 1
phpbb_functional_memberlist_test
0.00% covered (danger)
0.00%
0 / 78
0.00% covered (danger)
0.00%
0 / 8
72
0.00% covered (danger)
0.00%
0 / 1
 test_memberlist
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 test_viewprofile
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 get_memberlist_leaders_table_crawler
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 test_leaders
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 test_leaders_remove_users
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 test_leaders_add_users
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
2
 test_group_rank
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
2
 test_email
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
2
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
14/**
15* @group functional
16*/
17class phpbb_functional_memberlist_test extends phpbb_functional_test_case
18{
19    public function test_memberlist()
20    {
21        $this->create_user('memberlist-test-user');
22        // logs in as admin
23        $this->login();
24        $crawler = self::request('GET', 'memberlist.php?sid=' . $this->sid);
25        $this->assertStringContainsString('memberlist-test-user', $crawler->text());
26
27        // restrict by first character
28        $crawler = self::request('GET', 'memberlist.php?first_char=m&sid=' . $this->sid);
29        $this->assertStringContainsString('memberlist-test-user', $crawler->text());
30
31        // make sure results for wrong character are not returned
32        $crawler = self::request('GET', 'memberlist.php?first_char=a&sid=' . $this->sid);
33        $this->assertStringNotContainsString('memberlist-test-user', $crawler->text());
34    }
35
36    public function test_viewprofile()
37    {
38        $this->login();
39        // XXX hardcoded user id
40        $crawler = self::request('GET', 'memberlist.php?mode=viewprofile&u=2&sid=' . $this->sid);
41        $this->assertStringContainsString('admin', $crawler->filter('h2')->text());
42    }
43
44    protected function get_memberlist_leaders_table_crawler()
45    {
46        $crawler = self::request('GET', 'app.php/members/team');
47        return $crawler->filter('.forumbg-table');
48    }
49
50    public function test_leaders()
51    {
52        $this->login();
53        $this->create_user('memberlist-test-moderator');
54
55        $crawler = $this->get_memberlist_leaders_table_crawler();
56
57        // Admin in admin group, but not in moderators
58        $this->assertStringContainsString('admin', $crawler->eq(0)->text());
59        $this->assertStringNotContainsString('admin', $crawler->eq(1)->text());
60
61        // memberlist-test-user in neither group
62        $this->assertStringNotContainsString('memberlist-test-user', $crawler->eq(0)->text());
63        $this->assertStringNotContainsString('memberlist-test-user', $crawler->eq(1)->text());
64
65        // memberlist-test-moderator in neither group
66        $this->assertStringNotContainsString('memberlist-test-moderator', $crawler->eq(0)->text());
67        $this->assertStringNotContainsString('memberlist-test-moderator', $crawler->eq(1)->text());
68    }
69
70    public function test_leaders_remove_users()
71    {
72        $this->login();
73
74        // Remove admin from admins, but is now in moderators
75        $this->remove_user_group('ADMINISTRATORS', array('admin'));
76        $crawler = $this->get_memberlist_leaders_table_crawler();
77        $this->assertStringNotContainsString('admin', $crawler->eq(0)->text());
78        $this->assertStringContainsString('admin', $crawler->eq(1)->text());
79
80        // Remove admin from moderators, should not be visible anymore
81        $this->remove_user_group('GLOBAL_MODERATORS', array('admin'));
82        $crawler = $this->get_memberlist_leaders_table_crawler();
83        $this->assertStringNotContainsString('admin', $crawler->eq(0)->text());
84        $this->assertStringNotContainsString('admin', $crawler->eq(1)->text());
85    }
86
87    public function test_leaders_add_users()
88    {
89        $this->login();
90
91        // Add memberlist-test-moderator to moderators
92        $this->add_user_group('GLOBAL_MODERATORS', array('memberlist-test-moderator'));
93        $crawler = $this->get_memberlist_leaders_table_crawler();
94        $this->assertStringNotContainsString('memberlist-test-moderator', $crawler->eq(0)->text());
95        $this->assertStringContainsString('memberlist-test-moderator', $crawler->eq(1)->text());
96
97        // Add admin to moderators, should be visible as moderator
98        $this->add_user_group('GLOBAL_MODERATORS', array('admin'), true);
99        $crawler = $this->get_memberlist_leaders_table_crawler();
100        $this->assertStringNotContainsString('admin', $crawler->eq(0)->text());
101        $this->assertStringContainsString('admin', $crawler->eq(1)->text());
102
103        // Add admin to admins as leader, should be visible as admin, not moderator
104        $this->add_user_group('ADMINISTRATORS', array('admin'), true, true);
105        $crawler = $this->get_memberlist_leaders_table_crawler();
106        $this->assertStringContainsString('admin', $crawler->eq(0)->text());
107        $this->assertStringNotContainsString('admin', $crawler->eq(1)->text());
108    }
109
110    public function test_group_rank()
111    {
112        copy(__DIR__ . '/fixtures/files/valid.jpg', __DIR__ . '/../../phpBB/images/ranks/valid.jpg');
113
114        $this->login();
115        $this->admin_login();
116        $this->add_lang(array('acp/groups', 'acp/posting'));
117
118        // Set a group rank to the registered users
119        $crawler = self::request('GET', "adm/index.php?sid={$this->sid}&i=acp_groups&mode=manage&action=edit&g=2");
120        $form = $crawler->selectButton('Submit')->form();
121        $form['group_rank']->select('1');
122        $crawler = self::submit($form);
123        $this->assertContainsLang('GROUP_UPDATED', $crawler->filter('.successbox')->text());
124
125        // Set a rank image for site_admin
126        $crawler = self::request('GET', "adm/index.php?sid={$this->sid}&i=acp_ranks&mode=ranks&action=edit&id=1");
127        $form = $crawler->selectButton('Submit')->form();
128        $form['rank_image']->select('valid.jpg');
129        $crawler = self::submit($form);
130        $this->assertContainsLang('RANK_UPDATED', $crawler->filter('.successbox')->text());
131
132        $crawler = self::request('GET', 'memberlist.php?mode=group&g=2');
133        $this->assertStringContainsString('memberlist-test-user', $crawler->text());
134
135        unlink(__DIR__ . '/../../phpBB/images/ranks/valid.jpg');
136    }
137
138    public function test_email()
139    {
140        $this->login();
141        $this->admin_login();
142        $this->add_lang(['acp/board', 'acp/common', 'memberlist']);
143
144        $crawler = self::request('GET', "adm/index.php?sid={$this->sid}&i=acp_board&mode=email");
145        $form = $crawler->selectButton('Submit')->form([
146            'config[board_email_form]' => 1,
147        ]);
148        $crawler = self::submit($form);
149        $this->assertContainsLang('CONFIG_UPDATED', $crawler->filter('.successbox')->text());
150
151        $crawler = self::request('GET', 'memberlist.php?mode=email&u=2');
152        $this->assertStringContainsString($this->lang('SEND_EMAIL_USER', 'admin'), $crawler->filter('.titlespace')->text());
153
154        $form = $crawler->selectButton($this->lang('SEND_EMAIL'))->form([
155            'subject' => 'Test email form message',
156            'message' => 'This is a test email message sent from a member profile email form.',
157        ]);
158        $crawler = self::submit($form);
159
160        $this->assertContainsLang('EMAIL_SENT', $crawler->text());
161    }
162}