1<?php
2
3/**
4 * Tests for the handling the syntax of a link to an jira issue in the issuelinks plugin
5 *
6 * @group plugin_issuelinks
7 * @group plugins
8 *
9 */
10class linksyntax_plugin_issuelinks_test extends DokuWikiTest {
11
12    protected $pluginsEnabled = array('issuelinks', 'sqlite',);
13
14    public function setUp() {
15        parent::setUp();
16    }
17
18    public function tearDown() {
19        parent::tearDown();
20        /** @var helper_plugin_issuelinks_db $db */
21        $db = plugin_load('helper', 'issuelinks_db');
22        $db->reset();
23    }
24
25    public function test_jiralink() {
26        // arrange
27        global $ID;
28        $ID = 'testpage';
29        saveWikiText('testpage','[[jira>SPR-281]] [[jira>TW-7]]','test summary');
30
31        // act
32        p_get_instructions('[[jira>SPR-281]]');
33        p_get_instructions('[[jira>TW-7]]');
34
35        // assert
36        /** @var \helper_plugin_sqlite $sqliteHelper */
37        $sqliteHelper = plugin_load('helper', 'sqlite');
38        if (!$sqliteHelper->init('issuelinks', DOKU_PLUGIN . 'issuelinks/db/')) {
39            throw new \Exception('sqlite init failed');
40        }
41
42        $sql = 'SELECT page, project_id, issue_id, type FROM pagerev_issues';
43        $pagerev_issues = $sqliteHelper->res2arr($sqliteHelper->query($sql, array()));
44
45        $this->assertEquals(array(
46            array(
47                'page' => 'testpage',
48                'project_id' => 'SPR',
49                'issue_id' => '281',
50                'type' => 'link',
51            ),
52            array(
53                'page' => 'testpage',
54                'project_id' => 'TW',
55                'issue_id' => '7',
56                'type' => 'link',
57            )), $pagerev_issues);
58    }
59
60    public function test_jiralink_oldrev() {
61        // arrange
62        global $ID, $REV;
63        $ID = 'testpage_oldnew';
64        saveWikiText($ID,'{{jira>SPR-281}} {{jira>TW-7}}','test summary');
65        $REV = filemtime(wikiFN($ID))+1;
66
67        // act
68        p_get_instructions('{{jira>SPR-281}}');
69        p_get_instructions('{{jira>TW-7}}');
70
71        // assert
72        /** @var \helper_plugin_sqlite $sqliteHelper */
73        $sqliteHelper = plugin_load('helper', 'sqlite');
74        if (!$sqliteHelper->init('issuelinks', DOKU_PLUGIN . 'issuelinks/db/')) {
75            throw new \Exception('sqlite init failed');
76        }
77
78        $sql = 'SELECT page, project_id, issue_id, type FROM pagerev_issues';
79        $pagerev_issues = $sqliteHelper->res2arr($sqliteHelper->query($sql, array()));
80
81        $this->assertEquals(array(), $pagerev_issues);
82    }
83
84    public function test_jiralink_moresyntax() {
85        // arrange
86        global $ID;
87        $ID = 'testpage2';
88        saveWikiText($ID,'page must exist for m_filetime','test summary');
89
90        // act
91        p_get_instructions('[[gh>cosmocode/dokuwiki-plugin-issuelinks#1]]');
92        p_get_instructions('[[jira>TW-7]]');
93        p_get_instructions('[[gl>grosse/project-with-merge-request!1]]');
94        p_get_instructions('[[gl>grosse/project-with-issue#1]]');
95
96        // assert
97        /** @var \helper_plugin_sqlite $sqliteHelper */
98        $sqliteHelper = plugin_load('helper', 'sqlite');
99        if (!$sqliteHelper->init('issuelinks', DOKU_PLUGIN . 'issuelinks/db/')) {
100            throw new \Exception('sqlite init failed');
101        }
102
103        $sql = 'SELECT page, project_id, issue_id, type FROM pagerev_issues';
104        $pagerev_issues = $sqliteHelper->res2arr($sqliteHelper->query($sql, array()));
105
106        $this->assertEquals(array(
107            array(
108                'page' => 'testpage2',
109                'project_id' => 'cosmocode/dokuwiki-plugin-issuelinks',
110                'issue_id' => '1',
111                'type' => 'link',
112            ),
113            array(
114                'page' => 'testpage2',
115                'project_id' => 'TW',
116                'issue_id' => '7',
117                'type' => 'link',
118            ),
119            array(
120                'page' => 'testpage2',
121                'project_id' => 'grosse/project-with-merge-request',
122                'issue_id' => '1',
123                'type' => 'link',
124            ),
125            array(
126                'page' => 'testpage2',
127                'project_id' => 'grosse/project-with-issue',
128                'issue_id' => '1',
129                'type' => 'link',
130            )), $pagerev_issues);
131    }
132}
133