From 534eac512225fea2ec865586ac8ad32405cd993d Mon Sep 17 00:00:00 2001 From: sinkcup Date: Mon, 27 Dec 2021 18:17:37 +0800 Subject: [PATCH] feat: #31 get issue --- src/Issue.php | 10 +++ tests/Acceptance/IssueTest.php | 7 +- tests/Unit/IssueTest.php | 20 +++++ tests/data/DescribeIssueResponse.json | 124 ++++++++++++++++++++++++++ 4 files changed, 158 insertions(+), 3 deletions(-) create mode 100644 tests/data/DescribeIssueResponse.json diff --git a/src/Issue.php b/src/Issue.php index 3b64585..031fcc7 100644 --- a/src/Issue.php +++ b/src/Issue.php @@ -71,4 +71,14 @@ public function delete(array $data) $this->core->request('DeleteIssue', $data); return true; } + + public function get(array $data) + { + $this->validate($data, [ + 'ProjectName' => 'string|required', + 'IssueCode' => 'integer|required', + ]); + $response = $this->core->request('DescribeIssue', $data); + return $response['Issue']; + } } diff --git a/tests/Acceptance/IssueTest.php b/tests/Acceptance/IssueTest.php index f6075a5..e963b0b 100644 --- a/tests/Acceptance/IssueTest.php +++ b/tests/Acceptance/IssueTest.php @@ -20,11 +20,12 @@ public function testCreateAndDelete() $result = $issue->create($data); $this->assertTrue(is_numeric($result['Code'])); - // delete - $data = [ + $params = [ 'ProjectName' => $this->projectName, 'IssueCode' => $result['Code'], ]; - $this->assertTrue($issue->delete($data)); + $result = $issue->get($params); + $this->assertEquals($data['Name'], $result['Name']); + $this->assertTrue($issue->delete($params)); } } diff --git a/tests/Unit/IssueTest.php b/tests/Unit/IssueTest.php index da3bbad..bd569d8 100644 --- a/tests/Unit/IssueTest.php +++ b/tests/Unit/IssueTest.php @@ -109,4 +109,24 @@ public function testDelete() $issue = new Issue($this->token, $this->coreMock); $this->assertTrue($issue->delete($data)); } + + public function testGet() + { + $response = json_decode( + file_get_contents($this->dataPath('DescribeIssueResponse.json')), + true + )['Response']; + $data = [ + 'ProjectName' => $this->projectName, + 'IssueCode' => $this->faker->randomNumber(), + ]; + $this->coreMock->shouldReceive('request')->times(1)->withArgs([ + 'DescribeIssue', + $data + ])->andReturn($response); + + $issue = new Issue($this->token, $this->coreMock); + $result = $issue->get($data); + $this->assertEquals($response['Issue'], $result); + } } diff --git a/tests/data/DescribeIssueResponse.json b/tests/data/DescribeIssueResponse.json new file mode 100644 index 0000000..86b9a4c --- /dev/null +++ b/tests/data/DescribeIssueResponse.json @@ -0,0 +1,124 @@ +{ + "Response": { + "RequestId": "8a6a4856-5de0-7270-6257-270e9b19d645", + "Issue": { + "Epic": { + "Code": 0, + "Type": "", + "Name": "", + "IssueStatusId": 0, + "IssueStatusName": "", + "Priority": "", + "Assignee": { + "Id": 0, + "Status": 0, + "Avatar": "", + "Name": "", + "Email": "", + "TeamId": 0, + "Phone": "", + "GlobalKey": "", + "TeamGlobalKey": "" + } + }, + "ParentType": "MISSION", + "Code": 1, + "Type": "MISSION", + "Name": "Molestiae vel soluta et at aliquam nam unde.", + "Description": "", + "IterationId": 0, + "IssueStatusId": 1227034, + "IssueStatusName": "未开始", + "IssueStatusType": "TODO", + "Priority": "1", + "Assignee": { + "Id": 183478, + "Status": 1, + "Avatar": "https://coding-net-production-static-ci.codehub.cn/2cb665a3-bebc-4b09-aa00-2b6df3e33edc.jpg?imageMogr2/auto-orient/format/jpeg/cut/400x400x0x0", + "Name": "sinkcup", + "Email": "", + "TeamId": 0, + "Phone": "", + "GlobalKey": "", + "TeamGlobalKey": "" + }, + "StartDate": 0, + "DueDate": 0, + "WorkingHours": 0.0, + "Creator": { + "Id": 183478, + "Status": 1, + "Avatar": "https://coding-net-production-static-ci.codehub.cn/2cb665a3-bebc-4b09-aa00-2b6df3e33edc.jpg?imageMogr2/auto-orient/format/jpeg/cut/400x400x0x0", + "Name": "sinkcup", + "Email": "", + "TeamId": 0, + "Phone": "", + "GlobalKey": "", + "TeamGlobalKey": "" + }, + "StoryPoint": "", + "CreatedAt": 1639820653000, + "UpdatedAt": 1640598932000, + "CompletedAt": 0, + "ProjectModule": { + "Id": 0, + "Name": "" + }, + "Watchers": [], + "Labels": [], + "Files": [], + "RequirementType": { + "Id": 0, + "Name": "" + }, + "DefectType": { + "Id": 0, + "Name": "", + "IconUrl": "" + }, + "CustomFields": [], + "ThirdLinks": [], + "SubTasks": [], + "Parent": { + "Code": 0, + "Type": "", + "Name": "", + "IssueStatusId": 0, + "IssueStatusName": "", + "Priority": "", + "Assignee": { + "Id": 0, + "Status": 0, + "Avatar": "", + "Name": "", + "Email": "", + "TeamId": 0, + "Phone": "", + "GlobalKey": "", + "TeamGlobalKey": "" + }, + "IssueStatusType": "", + "IssueTypeDetail": { + "Id": 0, + "Name": "", + "IssueType": "", + "Description": "", + "IsSystem": false + } + }, + "Iteration": { + "Code": 0, + "Name": "", + "Status": "" + }, + "IssueTypeDetail": { + "Id": 213220, + "Name": "任务", + "IssueType": "MISSION", + "Description": "任务是指为实现某个目标或需求所进行的具体活动。", + "IsSystem": true + }, + "IssueTypeId": 213220 + } + } +}