xref: /dokuwiki/lib/plugins/authpdo/_test/sqlite.test.php (revision 5de3a6a5ad40cfd5f62c9a028f248d53e3f9da6d)
1f64dbc90SAndreas Gohr<?php
2f64dbc90SAndreas Gohr
3*5de3a6a5SAndreas Gohr
4*5de3a6a5SAndreas Gohrclass testable_auth_plugin_authpdo extends auth_plugin_authpdo {
5*5de3a6a5SAndreas Gohr    public function getPluginName() {
6*5de3a6a5SAndreas Gohr        return 'authpdo';
7*5de3a6a5SAndreas Gohr    }
8*5de3a6a5SAndreas Gohr
9*5de3a6a5SAndreas Gohr    public function _selectGroups() {
10*5de3a6a5SAndreas Gohr        return parent::_selectGroups();
11*5de3a6a5SAndreas Gohr    }
12*5de3a6a5SAndreas Gohr
13*5de3a6a5SAndreas Gohr    public function _insertGroup($group) {
14*5de3a6a5SAndreas Gohr        return parent::_insertGroup($group);
15*5de3a6a5SAndreas Gohr    }
16*5de3a6a5SAndreas Gohr
17*5de3a6a5SAndreas Gohr}
18*5de3a6a5SAndreas Gohr
19f64dbc90SAndreas Gohr/**
20f64dbc90SAndreas Gohr * General tests for the authpdo plugin
21f64dbc90SAndreas Gohr *
22f64dbc90SAndreas Gohr * @group plugin_authpdo
23f64dbc90SAndreas Gohr * @group plugins
24f64dbc90SAndreas Gohr */
25f64dbc90SAndreas Gohrclass sqlite_plugin_authpdo_test extends DokuWikiTest {
26f64dbc90SAndreas Gohr
27f64dbc90SAndreas Gohr    protected $dbfile;
28f64dbc90SAndreas Gohr
29f64dbc90SAndreas Gohr    public function setUp() {
30f64dbc90SAndreas Gohr        parent::setUp();
31f64dbc90SAndreas Gohr        $this->dbfile = tempnam('/tmp/', 'pluginpdo_test_');
32f64dbc90SAndreas Gohr        copy(__DIR__ . '/test.sqlite3', $this->dbfile);
33f64dbc90SAndreas Gohr
34f64dbc90SAndreas Gohr        global $conf;
35f64dbc90SAndreas Gohr
36f64dbc90SAndreas Gohr        $conf['plugin']['authpdo']['debug'] = 1;
37f64dbc90SAndreas Gohr        $conf['plugin']['authpdo']['dsn'] = 'sqlite:' . $this->dbfile;
38f64dbc90SAndreas Gohr        $conf['plugin']['authpdo']['user'] = '';
39f64dbc90SAndreas Gohr        $conf['plugin']['authpdo']['pass'] = '';
40f64dbc90SAndreas Gohr
41*5de3a6a5SAndreas Gohr        $conf['plugin']['authpdo']['select-user'] = 'SELECT id AS uid, login AS user, name, pass AS clear, mail FROM user WHERE login = :user';
4270a89417SAndreas Gohr        $conf['plugin']['authpdo']['select-user-groups'] = 'SELECT * FROM member AS m, "group" AS g  WHERE m.gid = g.id AND  m.uid = :uid';
43*5de3a6a5SAndreas Gohr        $conf['plugin']['authpdo']['select-groups'] = 'SELECT id AS gid, "group" FROM "group"';
44*5de3a6a5SAndreas Gohr        $conf['plugin']['authpdo']['insert-user'] = 'INSERT INTO user (login, pass, name, mail) VALUES (:user, :hash, :name, :mail)';
45*5de3a6a5SAndreas Gohr        $conf['plugin']['authpdo']['insert-group'] = 'INSERT INTO "group" ("group") VALUES (:group)';
46*5de3a6a5SAndreas Gohr        $conf['plugin']['authpdo']['join-group'] = 'INSERT INTO member (uid, gid) VALUES (:uid, :gid)';
47f64dbc90SAndreas Gohr    }
48f64dbc90SAndreas Gohr
49f64dbc90SAndreas Gohr    public function tearDown() {
50f64dbc90SAndreas Gohr        parent::tearDown();
51f64dbc90SAndreas Gohr        unlink($this->dbfile);
52f64dbc90SAndreas Gohr    }
53f64dbc90SAndreas Gohr
54*5de3a6a5SAndreas Gohr    public function test_internals() {
55*5de3a6a5SAndreas Gohr        $auth = new testable_auth_plugin_authpdo();
56*5de3a6a5SAndreas Gohr
57*5de3a6a5SAndreas Gohr        $groups = $auth->_selectGroups();
58*5de3a6a5SAndreas Gohr        $this->assertArrayHasKey('user', $groups);
59*5de3a6a5SAndreas Gohr        $this->assertEquals(1, $groups['user']['gid']);
60*5de3a6a5SAndreas Gohr        $this->assertArrayHasKey('admin', $groups);
61*5de3a6a5SAndreas Gohr        $this->assertEquals(2, $groups['admin']['gid']);
62*5de3a6a5SAndreas Gohr
63*5de3a6a5SAndreas Gohr        $ok = $auth->_insertGroup('test');
64*5de3a6a5SAndreas Gohr        $this->assertTrue($ok);
65*5de3a6a5SAndreas Gohr        $groups = $auth->_selectGroups();
66*5de3a6a5SAndreas Gohr        $this->assertArrayHasKey('test', $groups);
67*5de3a6a5SAndreas Gohr        $this->assertEquals(3, $groups['test']['gid']);
68*5de3a6a5SAndreas Gohr    }
69*5de3a6a5SAndreas Gohr
70f64dbc90SAndreas Gohr    public function test_userinfo() {
71f64dbc90SAndreas Gohr        global $conf;
72f64dbc90SAndreas Gohr        $auth = new auth_plugin_authpdo();
73f64dbc90SAndreas Gohr
74f64dbc90SAndreas Gohr        // clear text pasword (with default config above
75f64dbc90SAndreas Gohr        $this->assertFalse($auth->checkPass('nobody', 'nope'));
76f64dbc90SAndreas Gohr        $this->assertFalse($auth->checkPass('admin', 'nope'));
77f64dbc90SAndreas Gohr        $this->assertTrue($auth->checkPass('admin', 'password'));
78f64dbc90SAndreas Gohr
79f64dbc90SAndreas Gohr        // now with a hashed password
80*5de3a6a5SAndreas Gohr        $conf['plugin']['authpdo']['select-user'] = 'SELECT id AS uid, login AS user, name, pass AS hash, mail FROM user WHERE login = :user';
81f64dbc90SAndreas Gohr        $this->assertFalse($auth->checkPass('admin', 'password'));
82f64dbc90SAndreas Gohr        $this->assertFalse($auth->checkPass('user', md5('password')));
83f64dbc90SAndreas Gohr
8470a89417SAndreas Gohr        // access user data
8570a89417SAndreas Gohr        $info = $auth->getUserData('admin');
8670a89417SAndreas Gohr        $this->assertEquals('admin', $info['user']);
8770a89417SAndreas Gohr        $this->assertEquals('The Admin', $info['name']);
8870a89417SAndreas Gohr        $this->assertEquals('admin@example.com', $info['mail']);
8970a89417SAndreas Gohr        $this->assertEquals(array('admin', 'user'), $info['grps']);
90*5de3a6a5SAndreas Gohr
91*5de3a6a5SAndreas Gohr        // group retrieval
92*5de3a6a5SAndreas Gohr        $this->assertEquals(array('admin', 'user'), $auth->retrieveGroups());
93*5de3a6a5SAndreas Gohr        $this->assertEquals(array('user'), $auth->retrieveGroups(1));
94*5de3a6a5SAndreas Gohr        $this->assertEquals(array('admin'), $auth->retrieveGroups(0, 1));
95*5de3a6a5SAndreas Gohr
96*5de3a6a5SAndreas Gohr        // user creation
97*5de3a6a5SAndreas Gohr        $auth->createUser('test', 'password', 'A Test user', 'test@example.com', array('newgroup'));
98*5de3a6a5SAndreas Gohr        $info = $auth->getUserData('test');
99*5de3a6a5SAndreas Gohr        $this->assertEquals('test', $info['user']);
100*5de3a6a5SAndreas Gohr        $this->assertEquals('A Test user', $info['name']);
101*5de3a6a5SAndreas Gohr        $this->assertEquals('test@example.com', $info['mail']);
102*5de3a6a5SAndreas Gohr        $this->assertEquals(array('newgroup', 'user'), $info['grps']);
103*5de3a6a5SAndreas Gohr        $this->assertEquals(array('admin', 'newgroup', 'user'), $auth->retrieveGroups());
104f64dbc90SAndreas Gohr    }
105*5de3a6a5SAndreas Gohr
106f64dbc90SAndreas Gohr}
107