Пример #1
0
 public function testResolveResourceSetNonExistent()
 {
     $fakeSetName = 'SomeSet';
     Phockito::when($this->mockMetadataProvider->resolveResourceSet($fakeSetName))->return(null);
     $wrapper = $this->getMockedWrapper();
     $this->assertNull($wrapper->resolveResourceSet($fakeSetName));
 }
Пример #2
0
 public function testConfiguration4()
 {
     $customersResourceSet = $this->_northWindMetadata->resolveResourceSet('Customers');
     $this->assertNotNull($customersResourceSet);
     $this->AssertEquals($this->_dataServiceConfiguration->getEntitySetAccessRule($customersResourceSet), EntitySetRights::NONE);
     try {
         $this->_dataServiceConfiguration->setEntitySetAccessRule('Customers', EntitySetRights::ALL + 1);
         $this->fail('An expected InvalidOperationException for \'page size and max result per collection mutual exclusion\' was not thrown for month');
     } catch (\InvalidArgumentException $exception) {
         $this->AssertEquals('The argument \'$rights\' of \'setEntitySetAccessRule\' should be EntitySetRights enum value', $exception->getMessage());
     }
     $this->_dataServiceConfiguration->setEntitySetAccessRule('Customers', EntitySetRights::READ_ALL);
     $this->AssertEquals($this->_dataServiceConfiguration->getEntitySetAccessRule($customersResourceSet), EntitySetRights::READ_ALL);
     try {
         $this->_dataServiceConfiguration->setEntitySetAccessRule('NonExistEntitySet', EntitySetRights::READ_MULTIPLE);
         $this->fail('An expected InvalidArgumentException for \'non-exist entity set name\' was not thrown for month');
     } catch (\InvalidArgumentException $exception) {
         $this->AssertEquals('The given name \'NonExistEntitySet\' was not found in the entity sets', $exception->getMessage());
     }
 }
Пример #3
0
 /**
  * To get a resource set based on the specified resource set name which is 
  * visible,
  * Note: Wrapper for IMetadataProvider::resolveResourceSet method
  * implementation
  * 
  * @param string $name Name of the resource set
  * 
  * @return ResourceSetWrapper|null Returns resource set with the given name if found, NULL if resource set is set to invisible or not found
  *
  */
 public function resolveResourceSet($name)
 {
     if (array_key_exists($name, $this->setWrapperCache)) {
         return $this->setWrapperCache[$name];
     }
     $resourceSet = $this->metaProvider->resolveResourceSet($name);
     if (is_null($resourceSet)) {
         return null;
     }
     return $this->_validateResourceSetAndGetWrapper($resourceSet);
 }
Пример #4
0
 /**
  * Sets the maximum page size for an entity set resource.
  *
  * @param string $name     Name of entity set resource for which to set
  *                         the page size.
  * @param int    $pageSize Page size for the entity set resource that is
  *                         specified in name.
  *
  * @throws InvalidOperationException
  * @throws \InvalidArgumentException
  *
  * @return void
  */
 public function setEntitySetPageSize($name, $pageSize)
 {
     $pageSize = $this->_checkIntegerNonNegativeParameter($pageSize, 'setEntitySetPageSize');
     if ($this->_maxResultsPerCollection != PHP_INT_MAX) {
         throw new InvalidOperationException(Messages::configurationMaxResultAndPageSizeMutuallyExclusive());
     }
     if ($pageSize == PHP_INT_MAX) {
         $pageSize = 0;
     }
     if (strcmp($name, '*') === 0) {
         $this->_defaultPageSize = $pageSize;
     } else {
         if (!$this->_provider->resolveResourceSet($name)) {
             throw new \InvalidArgumentException(Messages::configurationResourceSetNameNotFound($name));
         }
         $this->_pageSizes[$name] = $pageSize;
     }
 }
 /**     
  * Test expression provider using real data
  */
 public function testAnonymousFunction()
 {
     //Creates test data
     $data = $this->createTestData();
     //Query for Customers with 'L' as second letter of CustomerID
     $result = $this->executeExpression('indexof(CustomerID, \'L\') eq 1', $this->northWindMetadata->resolveResourceSet('Customers')->getResourceType(), $data['Customers']);
     $this->assertEquals(1, count($result));
     $this->assertEquals('ALFKI', $result[0]->CustomerID);
     //Query for Customers with country as Germany
     $result = $this->executeExpression('Country eq \'Germany\'', $this->northWindMetadata->resolveResourceSet('Customers')->getResourceType(), $data['Customers']);
     $this->assertEquals(2, count($result));
     $this->assertEquals('Germany', $result[0]->Country);
     $this->assertEquals('Germany', $result[1]->Country);
     //Query for Customers with no address
     $result = $this->executeExpression('Address eq null', $this->northWindMetadata->resolveResourceSet('Customers')->getResourceType(), $data['Customers']);
     $this->assertEquals(1, count($result));
     $this->assertEquals('15b242e7-52eb-46bd-8f0e-6568b72cd9a6', $result[0]->CustomerGuid);
     //Query for Customers with non-primary address
     $result = $this->executeExpression('Address/Address2/IsPrimary eq false', $this->northWindMetadata->resolveResourceSet('Customers')->getResourceType(), $data['Customers']);
     $this->assertEquals(1, count($result));
     $this->assertEquals('Ann Devon', $result[0]->CustomerName);
     //Query for Customers with ID 'ALFKI' or 'EASTC'
     $result = $this->executeExpression('CustomerID eq \'ALFKI\' or CustomerID eq \'EASTC\'', $this->northWindMetadata->resolveResourceSet('Customers')->getResourceType(), $data['Customers']);
     $this->assertEquals(2, count($result));
     $this->assertEquals('ALFKI', $result[0]->CustomerID);
     $this->assertEquals('EASTC', $result[1]->CustomerID);
     //Query for Customers with an expression which evaluates to false
     $result = $this->executeExpression('1 add 2 eq 5', $this->northWindMetadata->resolveResourceSet('Customers')->getResourceType(), $data['Customers']);
     $this->assertEquals(0, count($result));
     //Query for all Orders
     $result = $this->executeExpression('true', $this->northWindMetadata->resolveResourceSet('Orders')->getResourceType(), $data['Orders']);
     $this->assertEquals(5, count($result));
     //Query for Order with ShipName as 'Speedy Express'
     $result = $this->executeExpression('ShipName eq \'Speedy Express\'', $this->northWindMetadata->resolveResourceSet('Orders')->getResourceType(), $data['Orders']);
     $this->assertEquals(2, count($result));
     foreach ($result as $order) {
         $this->assertEquals($order->ShipName, 'Speedy Express');
     }
     //Query for Order with CustomerID as 'DUMON'
     $result = $this->executeExpression('Customer/CustomerID eq \'DUMON\'', $this->northWindMetadata->resolveResourceSet('Orders')->getResourceType(), $data['Orders']);
     $this->assertEquals(3, count($result));
     //Query for Orders with year of order as 1999 or 1995
     $result = $this->executeExpression('year(OrderDate) eq 1999 or year(OrderDate) add 4 eq 1999', $this->northWindMetadata->resolveResourceSet('Orders')->getResourceType(), $data['Orders']);
     foreach ($result as $order) {
         $this->assertContains($order->OrderDate, array(1999, 1995));
     }
     //Query for Orders with date greater than 2000-11-11
     $result = $this->executeExpression('OrderDate ge datetime\'2000-11-11\'', $this->northWindMetadata->resolveResourceSet('Orders')->getResourceType(), $data['Orders']);
     foreach ($result as $order) {
         $this->assertGreaterThanOrEqual(0, DateTime::dateTimeCmp($order->OrderDate, '2000-11-11'));
     }
     //Query for Customer using different flavours of guid
     $result = $this->executeExpression('CustomerGuid eq guid\'15b242e7-52eb-46bd-8f0e-6568b72cd9a6\'', $this->northWindMetadata->resolveResourceSet('Customers')->getResourceType(), $data['Customers']);
     $this->assertEquals(1, count($result));
     $customer1 = $result[0];
     $result = $this->executeExpression('CustomerGuid eq guid\'{15b242e7-52eb-46bd-8f0e-6568b72cd9a6}\'', $this->northWindMetadata->resolveResourceSet('Customers')->getResourceType(), $data['Customers']);
     $this->assertEquals(1, count($result));
     $customer2 = $result[0];
     $result = $this->executeExpression('CustomerGuid eq guid\'(15b242e7-52eb-46bd-8f0e-6568b72cd9a6)\'', $this->northWindMetadata->resolveResourceSet('Customers')->getResourceType(), $data['Customers']);
     $this->assertEquals(1, count($result));
     $customer3 = $result[0];
     $result = $this->executeExpression('CustomerGuid eq guid\'15b242e752eb46bd8f0e6568b72cd9a6\'', $this->northWindMetadata->resolveResourceSet('Customers')->getResourceType(), $data['Customers']);
     $this->assertEquals(1, count($result));
     $customer4 = $result[0];
     $this->assertEquals($customer1->CustomerID, $customer2->CustomerID);
     $this->assertEquals($customer3->CustomerID, $customer4->CustomerID);
     $this->assertEquals($customer1->CustomerID, $customer4->CustomerID);
 }
Пример #6
0
 public function testParseExpression2()
 {
     $expressionProvider = new PHPExpressionProvider('$lt');
     $filterExpression = 'UnitPrice ge 6';
     $resourceType = $this->_northWindMetadata->resolveResourceSet('Order_Details')->getResourceType();
     $filterInfo = ExpressionParser2::parseExpression2($filterExpression, $resourceType, $expressionProvider);
     $this->assertTrue(!is_null($filterInfo));
     //There are no navigation properties in the expression so should be empty.
     $this->assertEquals(array(), $filterInfo->getNavigationPropertiesUsed());
     $this->assertEquals('(!(is_null($lt->UnitPrice)) && ($lt->UnitPrice >= 6))', $filterInfo->getExpressionAsString());
     $filterExpression = 'Order/Customer/CustomerID eq \'ANU\' or Product/ProductID gt 123 and UnitPrice ge 6';
     $filterInfo = ExpressionParser2::parseExpression2($filterExpression, $resourceType, $expressionProvider);
     $this->assertTrue(!is_null($filterInfo));
     $navigationsUsed = $filterInfo->getNavigationPropertiesUsed();
     $this->assertTrue(!is_null($navigationsUsed));
     $this->assertTrue(is_array($navigationsUsed));
     $this->assertEquals(count($navigationsUsed), 2);
     //Order/Customer
     $this->assertTrue(is_array($navigationsUsed[0]));
     $this->assertEquals(count($navigationsUsed[0]), 2);
     //Product
     $this->assertTrue(is_array($navigationsUsed[1]));
     $this->assertEquals(count($navigationsUsed[1]), 1);
     //Verify 'Order/Customer'
     $this->assertTrue(is_object($navigationsUsed[0][0]));
     $this->assertTrue(is_object($navigationsUsed[0][1]));
     $this->assertTrue($navigationsUsed[0][0] instanceof ResourceProperty);
     $this->assertTrue($navigationsUsed[0][1] instanceof ResourceProperty);
     $this->assertEquals($navigationsUsed[0][0]->getName(), 'Order');
     $this->assertEquals($navigationsUsed[0][1]->getName(), 'Customer');
     //Verify 'Product'
     $this->assertTrue(is_object($navigationsUsed[1][0]));
     $this->assertTrue($navigationsUsed[1][0] instanceof ResourceProperty);
     $this->assertEquals($navigationsUsed[1][0]->getName(), 'Product');
     $filterExpression = 'Customer/Address/LineNumber add 4 eq 8';
     $resourceType = $this->_northWindMetadata->resolveResourceSet('Orders')->getResourceType();
     $filterInfo = ExpressionParser2::parseExpression2($filterExpression, $resourceType, $expressionProvider);
     $this->assertTrue(!is_null($filterInfo));
     $navigationsUsed = $filterInfo->getNavigationPropertiesUsed();
     //Customer
     $this->assertTrue(!is_null($navigationsUsed));
     $this->assertTrue(is_array($navigationsUsed));
     $this->assertEquals(count($navigationsUsed), 1);
     $this->assertTrue(is_array($navigationsUsed[0]));
     $this->assertEquals(count($navigationsUsed[0]), 1);
     //Verify 'Customer'
     $this->assertTrue(is_object($navigationsUsed[0][0]));
     $this->assertTrue($navigationsUsed[0][0] instanceof ResourceProperty);
     $this->assertEquals($navigationsUsed[0][0]->getName(), 'Customer');
     //Test with property acess expression in function call
     $filterExpression = 'replace(Customer/CustomerID, \'LFK\', \'RTT\') eq \'ARTTI\'';
     $filterInfo = ExpressionParser2::parseExpression2($filterExpression, $resourceType, $expressionProvider);
     $this->assertTrue(!is_null($filterInfo));
     $navigationsUsed = $filterInfo->getNavigationPropertiesUsed();
     //Customer
     $this->assertTrue(!is_null($navigationsUsed));
     $this->assertTrue(is_array($navigationsUsed));
     $this->assertEquals(count($navigationsUsed), 1);
     $this->assertTrue(is_array($navigationsUsed[0]));
     $this->assertEquals(count($navigationsUsed[0]), 1);
     //Verify 'Customer'
     $this->assertTrue(is_object($navigationsUsed[0][0]));
     $this->assertTrue($navigationsUsed[0][0] instanceof ResourceProperty);
     $this->assertEquals($navigationsUsed[0][0]->getName(), 'Customer');
 }
Пример #7
0
 public function testPropertyAccessExpression()
 {
     $expression = 'CustomerID';
     $parser = new ExpressionParser($expression, $this->customersResourceType, false);
     $expr = $parser->parseFilter();
     $this->assertTrue($expr instanceof PropertyAccessExpression);
     $this->assertTrue($expr->getType() instanceof String);
     $expression = 'Rating';
     $parser->resetParser($expression);
     $expr = $parser->parseFilter();
     $this->assertTrue($expr instanceof PropertyAccessExpression);
     $this->assertTrue($expr->getType() instanceof Int32);
     $expression = 'Address';
     $parser->resetParser($expression);
     $expr = $parser->parseFilter();
     $this->assertTrue($expr instanceof PropertyAccessExpression);
     $this->assertTrue($expr->getType() instanceof Navigation);
     $this->assertEquals('Address', $expr->getResourceType()->getFullName());
     $expression = 'Address/LineNumber';
     $parser->resetParser($expression);
     $expr = $parser->parseFilter();
     $this->assertTrue($expr instanceof PropertyAccessExpression);
     $this->assertTrue($expr->getType() instanceof Int32);
     $this->assertEquals('Edm.Int32', $expr->getResourceType()->getFullName());
     $this->assertEquals('Address', $expr->getParent()->getResourceType()->getFullName());
     $expression = 'Address\\LineNumber';
     $parser->resetParser($expression);
     try {
         $expr = $parser->parseFilter();
         $this->fail('An expected ODataException for \'invalid chatacter\' has not been thrown');
     } catch (ODataException $exception) {
         $this->assertEquals('Invalid character \'\\\' at position 7', $exception->getMessage());
     }
     $expression = 'CustomerID1';
     $parser->resetParser($expression);
     try {
         $expr = $parser->parseFilter();
         $this->fail('An expected ODataException for \'No property exists\' has not been thrown');
     } catch (ODataException $exception) {
         $this->assertEquals('No property \'CustomerID1\' exists in type \'Customer\' at position 0', $exception->getMessage());
     }
     $expression = 'Address/InvalidLineNumber';
     $parser->resetParser($expression);
     try {
         $expr = $parser->parseFilter();
         $this->fail('An expected ODataException for \'No property exists\' has not been thrown');
     } catch (ODataException $exception) {
         $this->assertEquals('No property \'InvalidLineNumber\' exists in type \'Address\' at position 8', $exception->getMessage());
     }
     $expression = 'Orders/OrderID';
     $parser->resetParser($expression);
     try {
         $expr = $parser->parseFilter();
         $this->fail('An expected ODataException for collection property navigation was not thrown');
     } catch (ODataException $exception) {
         $this->assertStringStartsWith('The \'Orders\' is an entity collection property of \'Customer\'', $exception->getMessage());
     }
     $expression = 'Customer/CustomerID';
     $parser = new ExpressionParser($expression, $this->northWindMetadata->resolveResourceSet('Orders')->getResourceType(), false);
     $expr = $parser->parseFilter();
     $this->assertTrue($expr instanceof PropertyAccessExpression);
     $this->assertTrue($expr->getType() instanceof String);
     $this->assertEquals('Edm.String', $expr->getResourceType()->getFullName());
     $expression = 'Customer/Orders/OrderID';
     $parser->resetParser($expression);
     try {
         $expr = $parser->parseFilter();
         $this->fail('An expected ODataException for collection property navigation was not thrown');
     } catch (ODataException $exception) {
         $this->assertStringStartsWith('The \'Orders\' is an entity collection property of \'Customer\'', $exception->getMessage());
     }
 }