No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

211 líneas
6.1 KiB

  1. <?php declare(strict_types=1);
  2. /**
  3. * Created by PhpStorm.
  4. * User: zhengmingwei
  5. * Date: 2020/5/5
  6. * Time: 6:24 PM
  7. */
  8. namespace tests\unishop\controller;
  9. use addons\unishop\controller\Address;
  10. use addons\unishop\extend\PhpunitFunctionCustomize;
  11. use PHPUnit\Framework\TestCase;
  12. class AddressTest extends TestCase
  13. {
  14. use PhpunitFunctionCustomize;
  15. public function addressDataProvider()
  16. {
  17. return [
  18. [
  19. 'name' => 'unishop1',
  20. 'mobile' => self::$mobile,
  21. 'address' => 'unishop1 address',
  22. 'is_default' => 1,
  23. 'province_id' => 1,
  24. 'city_id' => 2,
  25. 'area_id' => 3
  26. ],
  27. [
  28. 'name' => 'unishop2',
  29. 'mobile' => self::$mobile,
  30. 'address' => 'unishop2 address',
  31. 'is_default' => 1,
  32. 'province_id' => 1964,
  33. 'city_id' => 1988,
  34. 'area_id' => 1991
  35. ],
  36. [
  37. 'name' => 'unishop3',
  38. 'mobile' => self::$mobile,
  39. 'address' => 'unishop3 address',
  40. 'is_default' => 1,
  41. 'province_id' => 1964,
  42. 'city_id' => 2017,
  43. 'area_id' => 2024
  44. ],
  45. ];
  46. }
  47. /**
  48. * @test
  49. */
  50. public function all()
  51. {
  52. $this->userLogin();
  53. $contents = $this->request(Address::class, 'all', [
  54. 'page' => 1,
  55. 'pagesize' => 3
  56. ]);
  57. $this->assertIsArray($contents);
  58. $this->assertEquals(1, $contents['code']);
  59. $this->assertIsArray($contents['data']);
  60. if (empty($contents['data'])) {
  61. $this->assertEmpty($contents['data']);
  62. }
  63. }
  64. /**
  65. * @test
  66. * @dataProvider addressDataProvider
  67. */
  68. public function add($name, $mobile, $address, $is_default, $province_id, $city_id, $area_id)
  69. {
  70. $contents = $this->request(Address::class, 'add', [
  71. 'name' => $name,
  72. 'mobile' => $mobile,
  73. 'address' => $address,
  74. 'is_default' => $is_default,
  75. 'province_id' => $province_id,
  76. 'city_id' => $city_id,
  77. 'area_id' => $area_id,
  78. ]);
  79. $this->assertIsArray($contents);
  80. $this->assertSame(1, $contents['code']);
  81. }
  82. /**
  83. * @test
  84. */
  85. public function allAgaint()
  86. {
  87. $contents = $this->request(Address::class, 'all', [
  88. 'page' => 1,
  89. 'pagesize' => 3
  90. ]);
  91. $this->assertIsArray($contents);
  92. $this->assertEquals(1, $contents['code']);
  93. $this->assertNotEmpty($contents['data']);
  94. foreach ($contents['data'] as $item) {
  95. $this->assertNotEmpty($item['id']);
  96. $this->assertNotEmpty($item['name']);
  97. $this->assertNotEmpty($item['mobile']);
  98. $this->assertNotEmpty($item['address']);
  99. $this->assertNotEmpty($item['province_id']);
  100. $this->assertNotEmpty($item['city_id']);
  101. $this->assertNotEmpty($item['area_id']);
  102. $this->assertGreaterThanOrEqual(0,$item['is_default']);
  103. $this->assertNotEmpty($item['province']['name']);
  104. $this->assertNotEmpty($item['city']['name']);
  105. $this->assertNotEmpty($item['area']['name']);
  106. }
  107. return $contents['data'][0];
  108. }
  109. /**
  110. * @test
  111. * @depends allAgaint
  112. */
  113. public function info(array $address)
  114. {
  115. $contents = $this->request(Address::class, 'info', [
  116. 'id' => $address['id']
  117. ], 'get');
  118. $this->assertNotEmpty($contents);
  119. $this->assertEquals(1, $contents['code']);
  120. $this->assertEquals($address['user_id'], $contents['data']['user_id']);
  121. $this->assertEquals($address['id'], $contents['data']['id']);
  122. $this->assertNotEmpty($contents['data']['name']);
  123. $this->assertNotEmpty($contents['data']['mobile']);
  124. $this->assertNotEmpty($contents['data']['address']);
  125. $this->assertNotEmpty($contents['data']['province_id']);
  126. $this->assertNotEmpty($contents['data']['city_id']);
  127. $this->assertNotEmpty($contents['data']['area_id']);
  128. $this->assertEquals($address['is_default'], $contents['data']['is_default']);
  129. return $contents['data'];
  130. }
  131. /**
  132. * @test
  133. * @depends info
  134. */
  135. public function edit(array $address)
  136. {
  137. $address['name'] .= '-edit';
  138. $contents = $this->request(Address::class, 'edit', $address);
  139. $this->assertEquals(1, $contents['code']);
  140. $this->assertTrue($contents['data']);
  141. return $address;
  142. }
  143. /**
  144. * @test
  145. * @depends edit
  146. */
  147. public function delete(array $address)
  148. {
  149. $contents = $this->request(Address::class, 'delete', ['id' => $address['id']], 'get');
  150. $this->assertEquals(1, $contents['code']);
  151. $this->assertEquals(1, $contents['data']);
  152. $contents = $this->request(Address::class, 'delete', ['id' => $address['id']], 'get');
  153. $this->assertEquals(0, $contents['data']);
  154. }
  155. /**
  156. * @test
  157. */
  158. public function area()
  159. {
  160. $pid = 0;
  161. for ($i = 0; $i < 3; $i++) {
  162. $contents = $this->request(Address::class, 'area', ['pid' => $pid], 'get');
  163. $this->assertEquals(1, $contents['code']);
  164. $this->assertIsArray($contents['data']);
  165. $this->assertGreaterThan(0, count($contents['data']));
  166. $index = mt_rand(0, count($contents['data'])-1);
  167. $this->assertArrayHasKey('label', $contents['data'][$index]);
  168. $this->assertNotEmpty($contents['data'][$index]['id']);
  169. $this->assertArrayHasKey('pid', $contents['data'][$index]);
  170. $this->assertArrayHasKey('value', $contents['data'][$index]);
  171. $pid = $contents['data'][$index]['id'];
  172. }
  173. }
  174. public static function tearDownAfterClass()
  175. {
  176. $mobile = self::$mobile;
  177. \addons\unishop\model\Address::destroy(function($query) use ($mobile) {
  178. $query->where(['mobile' => $mobile]);
  179. });
  180. }
  181. }