Passed
Push — master ( bacc5f...5eccc7 )
by Dispositif
02:22
created

GoogleLivresTemplateTest::provideSimplify()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 63
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 8
Bugs 0 Features 0
Metric Value
cc 1
eloc 25
c 8
b 0
f 0
nc 1
nop 0
dl 0
loc 63
rs 9.52

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * This file is part of dispositif/wikibot application
4
 * 2019 : Philippe M. <[email protected]>
5
 * For the full copyright and MIT license information, please view the LICENSE file.
6
 */
7
8
declare(strict_types=1);
9
10
namespace App\Domain\Models\Wiki\Tests;
11
12
use App\Domain\Models\Wiki\GoogleLivresTemplate;
13
use App\Domain\Publisher\GoogleBooksUtil;
14
use Exception;
15
use PHPUnit\Framework\TestCase;
16
17
class GoogleLivresTemplateTest extends TestCase
18
{
19
    public function testIsGoogleBookURL()
20
    {
21
        $url
22
            = 'https://books.google.fr/books?id=pbspjvZst5UC&pg=PA395&lpg=PA395&dq=D%C3%A9cret-Loi+10+septembre+1926&source=bl&ots=kiCzMrHO7b&sig=Jxt2Ybpig7Oo-Mtuzgp_sL5ipQ4&hl=fr&sa=X&ei=6SMLU_zIDarL0AX75YAI&ved=0CFEQ6AEwBA#v=onepage&q=D%C3%A9cret-Loi%2010%20septembre%201926&f=false';
23
        $this::assertEquals(
24
            true,
25
            GoogleBooksUtil::isGoogleBookURL($url)
26
        );
27
        $this::assertEquals(
28
            true,
29
            GoogleLivresTemplate::isGoogleBookValue($url)
30
        );
31
    }
32
33
    /**
34
     * @dataProvider provideSimplify
35
     *
36
     * @param $url
37
     * @param $expected
38
     *
39
     * @throws Exception
40
     */
41
    public function testSimplyGoogleBookUrl($url, $expected)
42
    {
43
        $this::assertEquals(
44
            $expected,
45
            GoogleBooksUtil::simplifyGoogleUrl($url)
46
        );
47
    }
48
49
    public function provideSimplify()
50
    {
51
        return [
52
            [
53
                // OK : dq=full, q=null
54
                // https://fr.wikipedia.org/w/index.php?title=Famille_de_Pontev%C3%A8s&diff=prev&oldid=168342034&diffmode=source
55
                'https://books.google.fr/books?id=LkQoAAAAYAAJ&pg=PA341&dq=%22La+descendance+des+d\'Agoult+doit+%C3%AAtre+rejet%C3%A9e+comme+insuffisamment+%C3%A9tablie+;+celle+des+anciens+Pontev%C3%A8s+n\'est+que+vraisemblable,+mais+non+prouv%C3%A9e%22&hl=fr&sa=X&ved=0ahUKEwjVxaqCiv7ZAhXIt1kKHb1kD88Q6AEIJzAA#v=onepage&q=%22La%20descendance%20des%20d\'Agoult%20doit%20%C3%AAtre%20rejet%C3%A9e%20comme%20insuffisamment%20%C3%A9tablie%20%3B%20celle%20des%20anciens%20Pontev%C3%A8s%20n\'est%20que%20vraisemblable%2C%20mais%20non%20prouv%C3%A9e%22&f=false',
56
                'https://books.google.fr/books?id=LkQoAAAAYAAJ&pg=PA341&dq=%22La+descendance+des+d%27Agoult+doit+%C3%AAtre+rejet%C3%A9e+comme+insuffisamment+%C3%A9tablie+%3B+celle+des+anciens+Pontev%C3%A8s+n%27est+que+vraisemblable%2C+mais+non+prouv%C3%A9e%22',
57
            ],
58
            [
59
                // q= empty , dq= not empty => delete q and dq
60
                'https://books.google.fr/books?id=cAUvWtW7x7kC&printsec=frontcover&dq=Joanne+environs+Paris&hl=fr&ei=0Fl6TeqeIsek8QOnpeioBA&sa=X&oi=book_result&ct=result&resnum=1&ved=0CC8Q6AEwAA#v=onepage&q&f=false',
61
                'https://books.google.fr/books?id=cAUvWtW7x7kC&printsec=frontcover',
62
            ],
63
            [
64
                // .com.au
65
                'https://books.google.com.au/books?id=QHrQoDLNBUIC&pg=PT19&lpg=PT19&dq=Iotape+of+Commagene&source=web&ots=aZ3hKg3uDr&sig=Y_zdZhNP-qNZE6WIDNivPPm-Urg&hl=en&sa=X&oi=book_result&resnum=8&ct=result',
66
                'https://books.google.com.au/books?id=QHrQoDLNBUIC&pg=PT19&dq=Iotape+of+Commagene',
67
            ],
68
            [
69
                // 'id' in the middle
70
                'https://books.google.fr/books?hl=fr&id=CWkrAQAAMAAJ&dq=La+dur%C3%A9e+d%27ensoleillement+n%27est+pas+suffisante+en+Afrique&focus=searchwithinvolume&q=ceintures',
71
                'https://books.google.fr/books?id=CWkrAQAAMAAJ&q=ceintures',
72
            ],
73
            [
74
                // 3 : strange format
75
                'https://books.google.fr/books/about/Kate_Bush.html?id=YL0EDgAAQBAJ&printsec=frontcover&source=kp_read_button&redir_esc=y#v=onepage&q&f=false',
76
                'https://books.google.fr/books?id=YL0EDgAAQBAJ&printsec=frontcover',
77
            ],
78
            [
79
                // Maroc : sous-domaine .co.ma
80
                'https://books.google.co.ma/books?id=26gcP_Yz-i8C&PG=PA56',
81
                'https://books.google.co.ma/books?id=26gcP_Yz-i8C&pg=PA56',
82
            ],
83
            [
84
                // uppercase "ID="
85
                'https://books.google.fr/books?ID=26gcP_Yz-i8C&PG=PA56',
86
                'https://books.google.fr/books?id=26gcP_Yz-i8C&pg=PA56',
87
            ],
88
            [
89
                // common pattern
90
                'https://books.google.fr/books?id=26gcP_Yz-i8C&pg=PA56&lpg=PA56&dq=André+Poznanski&source=bl&ots=tuFKKbkpUS&sig=ACfU3U058ij4qQHFsXX_KX01YK81SLCCBw&hl=fr&sa=X&ved=2ahUKEwiB6tHVtKbkAhULNRoKHbOeDXU4ChDoATAAegQICBAB#v=onepage&q=André%20Poznanski&f=false',
91
                'https://books.google.fr/books?id=26gcP_Yz-i8C&pg=PA56&dq=Andr%C3%A9+Poznanski',
92
            ],
93
            [
94
                // pattern 'http://' and '/books/reader'
95
                'http://books.google.com/books/reader?id=WH4rAAAAYAAJ',
96
                'https://books.google.com/books?id=WH4rAAAAYAAJ',
97
            ],
98
            [
99
                // pattern rare : https://books.google.com/?id=-0h134NR1s0C
100
                'https://books.google.com/?id=-0h134NR1s0C&pg=PA167&lpg=PA167&dq=Prairie+Shores+apartments+Michael+Reese#v=onepage&q=Prairie%20Shores%20apartments%20Michael%20Reese&f=false',
101
                'https://books.google.com/books?id=-0h134NR1s0C&pg=PA167&dq=Prairie+Shores+apartments+Michael+Reese',
102
            ],
103
            [
104
                // frontcover
105
                'https://books.google.fr/books?id=lcHcXrVhRUUC&printsec=frontcover&hl=fr&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false',
106
                'https://books.google.fr/books?id=lcHcXrVhRUUC&printsec=frontcover',
107
            ],
108
            [
109
                // play.google.com (rare)
110
                'https://play.google.com/books/reader?id=1dtkAAAAMAAJ&printsec=frontcover&output=reader&hl=fr&pg=GBS.PR7',
111
                'https://books.google.com/books?id=1dtkAAAAMAAJ&pg=GBS.PR7&printsec=frontcover',
112
            ],
113
        ];
114
    }
115
116
    public function testIsTrackingUrl()
117
    {
118
        $url
119
            = 'https://books.google.com.au/books?id=QHrQoDLNBUIC&pg=PT19&lpg=PT19&dq=Iotape+of+Commagene&source=web&ots=aZ3hKg3uDr&sig=Y_zdZhNP-qNZE6WIDNivPPm-Urg&hl=en&sa=X&oi=book_result&resnum=8&ct=result';
120
        $this::assertSame(
121
            true,
122
            GoogleBooksUtil::isTrackingUrl($url)
123
        );
124
        $url = 'https://books.google.com.au/books?id=QHrQoDLNBUIC&pg=PT19';
125
        $this::assertSame(
126
            false,
127
            GoogleBooksUtil::isTrackingUrl($url)
128
        );
129
    }
130
131
    /**
132
     * @dataProvider provideGoogleUrl
133
     *
134
     * @param string $url
135
     * @param string $expected
136
     *
137
     * @throws Exception
138
     */
139
    public function testCreateFromURL(string $url, string $expected)
140
    {
141
        $this::assertEquals(
142
            $expected,
143
            GoogleLivresTemplate::createFromURL($url)->serialize()
144
        );
145
    }
146
147
    public function provideGoogleUrl(): array
148
    {
149
        return [
150
            [
151
                'https://books.google.fr/books?id=pbspjvZst5UC',
152
                '{{Google Livres|pbspjvZst5UC}}',
153
            ],
154
            [
155
                // partial book and cover
156
                'https://books.google.com/books?id=UNgxtsjOIf4C&printsec=frontcover',
157
                '{{Google Livres|UNgxtsjOIf4C|couv=1}}',
158
            ],
159
            [
160
                // page pg=PA... (arabe)
161
                'https://books.google.com/books?id=UNgxtsjOIf4C&pg=PA333',
162
                '{{Google Livres|UNgxtsjOIf4C|page=333}}',
163
            ],
164
            [
165
                // page pg=PR... (romain)
166
                'https://books.google.com/books?id=UNgxtsjOIf4C&pg=PR333',
167
                '{{Google Livres|UNgxtsjOIf4C|page=333|romain=1}}',
168
            ],
169
            [
170
                // page autre RAz-PAx
171
                'https://books.google.fr/books?id=BS4HAQAAIAAJ&pg=RA1-PA184',
172
                '{{Google Livres|BS4HAQAAIAAJ|page autre=RA1-PA184}}',
173
            ],
174
            [
175
                // page autre PTx
176
                'https://books.google.fr/books?id=YqZDAgAAQBAJ&pg=PT77',
177
                '{{Google Livres|YqZDAgAAQBAJ|page autre=PT77}}',
178
            ],
179
            [
180
                // surlignage
181
                'https://books.google.fr/books?id=pbspjvZst5UC&pg=PA395&lpg=PA395&dq=D%C3%A9cret-Loi+10+septembre+1926&source=bl&ots=kiCzMrHO7b&sig=Jxt2Ybpig7Oo-Mtuzgp_sL5ipQ4&hl=fr&sa=X&ei=6SMLU_zIDarL0AX75YAI&ved=0CFEQ6AEwBA#v=onepage&q=D%C3%A9cret-Loi%2010%20septembre%201926&f=false',
182
                '{{Google Livres|pbspjvZst5UC|page=395|surligne=Décret-Loi+10+septembre+1926}}',
183
            ],
184
        ];
185
    }
186
187
    public function testCreateFromUrlWithTitle()
188
    {
189
        $url = 'https://books.google.fr/books?id=pbspjvZst5UC';
190
        $google = GoogleLivresTemplate::createFromURL($url);
191
        $google->setParam('titre', 'Hello');
192
193
        $this::assertEquals(
194
            '{{Google Livres|pbspjvZst5UC|Hello}}',
195
            $google->serialize()
196
        );
197
    }
198
}
199