Skip to content

Commit a77f594

Browse files
committed
refactor: #13 confluence html zip to CODING
1 parent 3ffa6ed commit a77f594

File tree

5 files changed

+85
-42
lines changed

5 files changed

+85
-42
lines changed

app/Coding.php

+15
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,19 @@ public function getImportJobStatus(string $token, string $projectName, string $j
148148
return new \Exception('failed');
149149
}
150150
}
151+
152+
public function createWikiByUploadZip(string $token, string $projectName, string $zipFileFullPath)
153+
{
154+
$zipFilename = basename($zipFileFullPath);
155+
$uploadToken = $this->createUploadToken(
156+
$token,
157+
$projectName,
158+
$zipFilename
159+
);
160+
$this->upload($uploadToken, $zipFileFullPath);
161+
return $this->createWikiByZip($token, $projectName, $uploadToken, [
162+
'ParentIid' => 0,
163+
'FileName' => $zipFilename,
164+
]);
165+
}
151166
}

app/Commands/WikiImportCommand.php

+5-36
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44

55
use App\Coding;
66
use Confluence\Content;
7-
use Illuminate\Support\Facades\Storage;
87
use Illuminate\Support\Str;
98
use LaravelFans\Confluence\Facades\Confluence;
109
use LaravelZero\Framework\Commands\Command;
1110

1211
class WikiImportCommand extends Command
1312
{
13+
use WithCoding;
14+
1415
/**
1516
* The signature of the command.
1617
*
@@ -35,10 +36,6 @@ class WikiImportCommand extends Command
3536
*/
3637
protected $description = 'import wiki from confluence and so on';
3738

38-
private string $codingProjectUri;
39-
private string $codingTeamDomain;
40-
private string $codingToken;
41-
private Coding $coding;
4239
private \App\Confluence $confluence;
4340
private \DOMDocument $document;
4441

@@ -195,18 +192,12 @@ private function handleConfluenceHtml(): int
195192
$this->info('标题:' . $title);
196193
$markdown = $this->confluence->htmlFile2Markdown($dataPath . $page);
197194
$mdFilename = substr($page, 0, -5) . '.md';
198-
$zipFileFullPath = $this->coding->createMarkdownZip($markdown, $dataPath, $mdFilename);
199-
$zipFilename = basename($zipFileFullPath);
200-
$uploadToken = $this->coding->createUploadToken(
195+
$zipFilePath = $this->coding->createMarkdownZip($markdown, $dataPath, $mdFilename);
196+
$result = $this->coding->createWikiByUploadZip(
201197
$this->codingToken,
202198
$this->codingProjectUri,
203-
$zipFilename
199+
$zipFilePath
204200
);
205-
$this->coding->upload($uploadToken, $zipFileFullPath);
206-
$result = $this->coding->createWikiByZip($this->codingToken, $this->codingProjectUri, $uploadToken, [
207-
'ParentIid' => 0,
208-
'FileName' => $zipFilename,
209-
]);
210201
$this->info('上传成功,正在处理,任务 ID:' . $result['JobId']);
211202
}
212203
} catch (\ErrorException $e) {
@@ -216,26 +207,4 @@ private function handleConfluenceHtml(): int
216207

217208
return 0;
218209
}
219-
220-
private function setCodingApi(): void
221-
{
222-
if ($this->option('coding_team_domain')) {
223-
$codingTeamDomain = $this->option('coding_team_domain');
224-
} else {
225-
$codingTeamDomain = config('coding.team_domain') ?? $this->ask('CODING 团队域名:');
226-
}
227-
$this->codingTeamDomain = str_replace('.coding.net', '', $codingTeamDomain);
228-
229-
if ($this->option('coding_project_uri')) {
230-
$this->codingProjectUri = $this->option('coding_project_uri');
231-
} else {
232-
$this->codingProjectUri = config('coding.project_uri') ?? $this->ask('CODING 项目标识:');
233-
}
234-
235-
if ($this->option('coding_token')) {
236-
$this->codingToken = $this->option('coding_token');
237-
} else {
238-
$this->codingToken = config('coding.token') ?? $this->ask('CODING Token:');
239-
}
240-
}
241210
}

app/Commands/WithCoding.php

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
namespace App\Commands;
4+
5+
use App\Coding;
6+
7+
trait WithCoding
8+
{
9+
protected string $codingProjectUri;
10+
protected string $codingTeamDomain;
11+
protected string $codingToken;
12+
protected Coding $coding;
13+
14+
private function setCodingApi(): void
15+
{
16+
if ($this->option('coding_team_domain')) {
17+
$codingTeamDomain = $this->option('coding_team_domain');
18+
} else {
19+
$codingTeamDomain = config('coding.team_domain') ?? $this->ask('CODING 团队域名:');
20+
}
21+
$this->codingTeamDomain = str_replace('.coding.net', '', $codingTeamDomain);
22+
23+
if ($this->option('coding_project_uri')) {
24+
$this->codingProjectUri = $this->option('coding_project_uri');
25+
} else {
26+
$this->codingProjectUri = config('coding.project_uri') ?? $this->ask('CODING 项目标识:');
27+
}
28+
29+
if ($this->option('coding_token')) {
30+
$this->codingToken = $this->option('coding_token');
31+
} else {
32+
$this->codingToken = config('coding.token') ?? $this->ask('CODING Token:');
33+
}
34+
}
35+
}

tests/Feature/WikiImportCommandTest.php

+2-6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use App\Coding;
66
use Confluence\Content;
77
use LaravelFans\Confluence\Facades\Confluence;
8-
use Mockery\Mock;
98
use Mockery\MockInterface;
109
use Tests\TestCase;
1110
use Tests\Unit\CodingTest;
@@ -155,16 +154,13 @@ public function testHandleConfluenceHtmlSuccess()
155154
$codingProjectUri = $this->faker->slug;
156155
config(['coding.project_uri' => $codingProjectUri]);
157156

158-
$codingPath = $this->dataDir . 'coding/';
159157
// 注意:不能使用 partialMock
160158
// https://laracasts.com/discuss/channels/testing/this-partialmock-doesnt-call-the-constructor
161159
$mock = \Mockery::mock(Coding::class, [])->makePartial();
162160
$this->instance(Coding::class, $mock);
163161

164-
$mock->shouldReceive('createUploadToken')->times(2)->andReturn(CodingTest::$uploadToken);
165-
$mock->shouldReceive('upload')->times(2)->andReturn(true);
166-
$mock->shouldReceive('createWikiByZip')->times(2)->andReturn(json_decode(
167-
file_get_contents($codingPath . 'CreateWikiByZipResponse.json'),
162+
$mock->shouldReceive('createWikiByUploadZip')->times(2)->andReturn(json_decode(
163+
file_get_contents($this->dataDir . 'coding/' . 'CreateWikiByZipResponse.json'),
168164
true
169165
)['Response']);
170166

tests/Unit/CodingTest.php

+28
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,17 @@ class CodingTest extends TestCase
2323
'Region' => 'ap-shanghai',
2424
];
2525

26+
protected function setUp(): void
27+
{
28+
parent::setUp();
29+
$codingToken = $this->faker->md5;
30+
config(['coding.token' => $codingToken]);
31+
$codingTeamDomain = $this->faker->domainWord;
32+
config(['coding.team_domain' => $codingTeamDomain]);
33+
$codingProjectUri = $this->faker->slug;
34+
config(['coding.project_uri' => $codingProjectUri]);
35+
}
36+
2637
public function testCreateWiki()
2738
{
2839
$responseBody = file_get_contents($this->dataDir . 'coding/createWikiResponse.json');
@@ -188,4 +199,21 @@ public function testCreateWikiByZip()
188199
$result = $coding->createWikiByZip($codingToken, $codingProjectUri, self::$uploadToken, $data);
189200
$this->assertArrayHasKey('JobId', $result);
190201
}
202+
203+
public function testCreateWikiByUploadZip()
204+
{
205+
$mock = \Mockery::mock(Coding::class, [])->makePartial();
206+
$this->instance(Coding::class, $mock);
207+
208+
$mock->shouldReceive('createUploadToken')->times(1)->andReturn(CodingTest::$uploadToken);
209+
$mock->shouldReceive('upload')->times(1)->andReturn(true);
210+
$mock->shouldReceive('createWikiByZip')->times(1)->andReturn(json_decode(
211+
file_get_contents($this->dataDir . 'coding/' . 'CreateWikiByZipResponse.json'),
212+
true
213+
)['Response']);
214+
215+
$filePath = $this->faker->filePath();
216+
$result = $mock->createWikiByUploadZip('token', 'project', $filePath);
217+
$this->assertArrayHasKey('JobId', $result);
218+
}
191219
}

0 commit comments

Comments
 (0)