PageRenderTime 25ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/OData Producer for PHP/Tests/UriProcessor/QueryProcessor/ExpressionParser/ExpressionParser2Test.php

#
PHP | 110 lines | 93 code | 7 blank | 10 comment | 0 complexity | f52dd5cd90e1a9273c26f785204baab1 MD5 | raw file
  1. <?php
  2. use ODataProducer\Providers\Metadata\ResourceProperty;
  3. require_once 'PHPUnit\Framework\Assert.php';
  4. require_once 'PHPUnit\Framework\Test.php';
  5. require_once 'PHPUnit\Framework\SelfDescribing.php';
  6. require_once 'PHPUnit\Framework\TestCase.php';
  7. require_once 'PHPUnit\Framework\TestSuite.php';
  8. require_once 'ODataProducer\Common\ClassAutoLoader.php';
  9. require_once (dirname(__FILE__) . "\..\..\..\Resources\NorthWindMetadata.php");
  10. use ODataProducer\UriProcessor\QueryProcessor\ExpressionParser\ExpressionParser2;
  11. use ODataProducer\Common\ODataException;
  12. ODataProducer\Common\ClassAutoLoader::register();
  13. class PHPExpressionProviderTest extends PHPUnit_Framework_TestCase
  14. {
  15. private $_northWindMetadata;
  16. protected function setUp()
  17. {
  18. $this->_northWindMetadata = CreateNorthWindMetadata3::Create();
  19. }
  20. public function testparseExpression2()
  21. {
  22. try {
  23. $odataUriExpression = 'UnitPrice ge 6';
  24. $resourceType = $this->_northWindMetadata->resolveResourceSet('Order_Details')->getResourceType();
  25. $internalFilterInfo = ExpressionParser2::parseExpression2($odataUriExpression, $resourceType, null);
  26. $this->assertTrue(!is_null($internalFilterInfo));
  27. $filterInfo = $internalFilterInfo->getFilterInfo();
  28. $this->assertTrue(!is_null($filterInfo));
  29. $navigationsUsed = $filterInfo->getNavigationPropertiesUsed();
  30. //Ther is no navigation in the expression so should be null.
  31. $this->assertTrue(is_null($navigationsUsed));
  32. $filterFunction = $internalFilterInfo->getFilterFunction();
  33. $whereCode = $filterFunction->getCode();
  34. $this->assertEquals($whereCode, 'if((!(is_null($lt->UnitPrice)) && ($lt->UnitPrice >= 6))) { return true; } else { return false;}');
  35. $odataUriExpression = 'Order/Customer/CustomerID eq \'ANU\' or Product/ProductID gt 123 and UnitPrice ge 6';
  36. $internalFilterInfo = ExpressionParser2::parseExpression2($odataUriExpression, $resourceType, null);
  37. $this->assertTrue(!is_null($internalFilterInfo));
  38. $filterInfo = $internalFilterInfo->getFilterInfo();
  39. $this->assertTrue(!is_null($filterInfo));
  40. $navigationsUsed = $filterInfo->getNavigationPropertiesUsed();
  41. $this->assertTrue(!is_null($navigationsUsed));
  42. $this->assertTrue(is_array($navigationsUsed));
  43. $this->assertEquals(count($navigationsUsed), 2);
  44. //Order/Customer
  45. $this->assertTrue(is_array($navigationsUsed[0]));
  46. $this->assertEquals(count($navigationsUsed[0]), 2);
  47. //Product
  48. $this->assertTrue(is_array($navigationsUsed[1]));
  49. $this->assertEquals(count($navigationsUsed[1]), 1);
  50. //Verify 'Order/Customer'
  51. $this->assertTrue(is_object($navigationsUsed[0][0]));
  52. $this->assertTrue(is_object($navigationsUsed[0][1]));
  53. $this->assertTrue($navigationsUsed[0][0] instanceof ResourceProperty);
  54. $this->assertTrue($navigationsUsed[0][1] instanceof ResourceProperty);
  55. $this->assertEquals($navigationsUsed[0][0]->getName(), 'Order');
  56. $this->assertEquals($navigationsUsed[0][1]->getName(), 'Customer');
  57. //Verify 'Product'
  58. $this->assertTrue(is_object($navigationsUsed[1][0]));
  59. $this->assertTrue($navigationsUsed[1][0] instanceof ResourceProperty);
  60. $this->assertEquals($navigationsUsed[1][0]->getName(), 'Product');
  61. $odataUriExpression = 'Customer/Address/LineNumber add 4 eq 8';
  62. $resourceType = $this->_northWindMetadata->resolveResourceSet('Orders')->getResourceType();
  63. $internalFilterInfo = ExpressionParser2::parseExpression2($odataUriExpression, $resourceType, null);
  64. $this->assertTrue(!is_null($internalFilterInfo));
  65. $filterInfo = $internalFilterInfo->getFilterInfo();
  66. $this->assertTrue(!is_null($filterInfo));
  67. $navigationsUsed = $filterInfo->getNavigationPropertiesUsed();
  68. //Customer
  69. $this->assertTrue(!is_null($navigationsUsed));
  70. $this->assertTrue(is_array($navigationsUsed));
  71. $this->assertEquals(count($navigationsUsed), 1);
  72. $this->assertTrue(is_array($navigationsUsed[0]));
  73. $this->assertEquals(count($navigationsUsed[0]), 1);
  74. //Verify 'Customer'
  75. $this->assertTrue(is_object($navigationsUsed[0][0]));
  76. $this->assertTrue($navigationsUsed[0][0] instanceof ResourceProperty);
  77. $this->assertEquals($navigationsUsed[0][0]->getName(), 'Customer');
  78. //Test with property acess expression in function call
  79. $odataUriExpression = 'replace(Customer/CustomerID, \'LFK\', \'RTT\') eq \'ARTTI\'';
  80. $internalFilterInfo = ExpressionParser2::parseExpression2($odataUriExpression, $resourceType, null);
  81. $this->assertTrue(!is_null($internalFilterInfo));
  82. $filterInfo = $internalFilterInfo->getFilterInfo();
  83. $this->assertTrue(!is_null($filterInfo));
  84. $navigationsUsed = $filterInfo->getNavigationPropertiesUsed();
  85. //Customer
  86. $this->assertTrue(!is_null($navigationsUsed));
  87. $this->assertTrue(is_array($navigationsUsed));
  88. $this->assertEquals(count($navigationsUsed), 1);
  89. $this->assertTrue(is_array($navigationsUsed[0]));
  90. $this->assertEquals(count($navigationsUsed[0]), 1);
  91. //Verify 'Customer'
  92. $this->assertTrue(is_object($navigationsUsed[0][0]));
  93. $this->assertTrue($navigationsUsed[0][0] instanceof ResourceProperty);
  94. $this->assertEquals($navigationsUsed[0][0]->getName(), 'Customer');
  95. } catch(ODataException $exception){
  96. $this->fail('An unexpected ODataException has been raised');
  97. }
  98. }
  99. protected function tearDown()
  100. {
  101. }
  102. }
  103. ?>