OutputEndpointDataTest.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace Knuckles\Scribe\Tests\Unit;
  3. use Knuckles\Camel\Extraction\Parameter;
  4. use Knuckles\Camel\Extraction\ResponseField;
  5. use Knuckles\Camel\Output\OutputEndpointData;
  6. use Knuckles\Scribe\Tests\BaseUnitTest;
  7. class OutputEndpointDataTest extends BaseUnitTest
  8. {
  9. /** @test */
  10. public function can_nest_array_and_object_parameters_correctly()
  11. {
  12. $parameters = [
  13. "dad" => Parameter::create([
  14. "name" => 'dad',
  15. ]),
  16. "dad.age" => ResponseField::create([
  17. "name" => 'dad.age',
  18. ]),
  19. "dad.cars[]" => Parameter::create([
  20. "name" => 'dad.cars[]',
  21. ]),
  22. "dad.cars[].model" => Parameter::create([
  23. "name" => 'dad.cars[].model',
  24. ]),
  25. "dad.cars[].price" => ResponseField::create([
  26. "name" => 'dad.cars[].price',
  27. ]),
  28. ];
  29. $cleanParameters = [];
  30. $nested = OutputEndpointData::nestArrayAndObjectFields($parameters, $cleanParameters);
  31. $this->assertEquals(["dad"], array_keys($nested));
  32. $this->assertArraySubset([
  33. "dad" => [
  34. "name" => "dad",
  35. "__fields" => [
  36. "age" => [
  37. "name" => "dad.age",
  38. ],
  39. "cars" => [
  40. "name" => "dad.cars",
  41. "__fields" => [
  42. "model" => [
  43. "name" => "dad.cars[].model",
  44. ],
  45. "price" => [
  46. "name" => "dad.cars[].price",
  47. ],
  48. ],
  49. ],
  50. ],
  51. ],
  52. ], $nested);
  53. }
  54. /** @test */
  55. public function sets_missing_ancestors_for_object_fields_properly()
  56. {
  57. $parameters = [
  58. "dad.cars[]" => Parameter::create([
  59. "name" => 'dad.cars[]',
  60. ]),
  61. "dad.cars[].model" => Parameter::create([
  62. "name" => 'dad.cars[].model',
  63. ]),
  64. "parent.not.specified" => Parameter::create([
  65. "name" => "parent.not.specified",
  66. ]),
  67. ];
  68. $cleanParameters = [];
  69. $nested = OutputEndpointData::nestArrayAndObjectFields($parameters, $cleanParameters);
  70. $this->assertEquals(["dad", "parent"], array_keys($nested));
  71. $this->assertArraySubset([
  72. "dad" => [
  73. "name" => "dad",
  74. "__fields" => [
  75. "cars" => [
  76. "name" => "dad.cars",
  77. "__fields" => [
  78. "model" => [
  79. "name" => "dad.cars[].model",
  80. ],
  81. ],
  82. ],
  83. ],
  84. ],
  85. "parent" => [
  86. "name" => "parent",
  87. "__fields" => [
  88. "not" => [
  89. "name" => "parent.not",
  90. "__fields" => [
  91. "specified" => [
  92. "name" => "parent.not.specified",
  93. ],
  94. ],
  95. ],
  96. ],
  97. ],
  98. ], $nested);
  99. }
  100. }