@@ 89-110 (lines=22) @@ | ||
86 | $this->assertEquals($expectedFilter, $actualFilter); |
|
87 | } |
|
88 | ||
89 | public function testTranslateOperator() |
|
90 | { |
|
91 | // Manually set the data source element, mimic what the data source would do |
|
92 | $dataSourceElement = new Field( |
|
93 | 'test_data_source_element_name', |
|
94 | '', |
|
95 | '', |
|
96 | new StringDataType() |
|
97 | ); |
|
98 | ||
99 | $dataSourceProphecy = $this->prophesize(DataSourceInterface::class); |
|
100 | $dataSourceProphecy->getFields()->willReturn([$dataSourceElement]); |
|
101 | ||
102 | $interpreterFactory = new InterpreterFactory($this->extensionContainerProphecy->reveal(), new FilterConditionFactory(), $this->contextFactoryProphecy->reveal()); |
|
103 | $interpreter = $interpreterFactory->create($dataSourceProphecy->reveal()); |
|
104 | ||
105 | // LIKE is valid for String type, should return LIKE |
|
106 | $this->assertEquals(FilterCondition::METHOD_STRING_LIKE, $interpreter->translateOperator('T_OP_LIKE', $dataSourceElement), 'Failed to translate T_OP_LIKE into STRING_LIKE for type String'); |
|
107 | ||
108 | // EQ is valid for String, and should choose STRING_EQ as it's the default for the type |
|
109 | $this->assertEquals(FilterCondition::METHOD_STRING_EQ, $interpreter->translateOperator('T_OP_EQ', $dataSourceElement), 'Failed to translate T_OP_EQ into STRING_EQ for type String'); |
|
110 | } |
|
111 | ||
112 | public function testInStatementsOnlyAcceptArraysAsValues() |
|
113 | { |
|
@@ 112-126 (lines=15) @@ | ||
109 | $this->assertEquals(FilterCondition::METHOD_STRING_EQ, $interpreter->translateOperator('T_OP_EQ', $dataSourceElement), 'Failed to translate T_OP_EQ into STRING_EQ for type String'); |
|
110 | } |
|
111 | ||
112 | public function testInStatementsOnlyAcceptArraysAsValues() |
|
113 | { |
|
114 | $astSubtree = new ASTAssertion('field', 'T_OP_IN', '123'); |
|
115 | $field = new Field('field', '', '', new NumberDataType()); |
|
116 | ||
117 | $dataSourceProphecy = $this->prophesize(DataSourceInterface::class); |
|
118 | $dataSourceProphecy->getFields()->willReturn([$field]); |
|
119 | ||
120 | $interpreterFactory = new InterpreterFactory($this->extensionContainerProphecy->reveal(), new FilterConditionFactory(), $this->contextFactoryProphecy->reveal()); |
|
121 | $interpreter = $interpreterFactory->create($dataSourceProphecy->reveal()); |
|
122 | ||
123 | $this->expectException(UQLInterpreterException::class); |
|
124 | $this->expectExceptionMessage('Only arrays are valid arguments for IN / NOT IN statements'); |
|
125 | $interpreter->buildFilter($astSubtree); |
|
126 | } |
|
127 | ||
128 | public function testNullValueCanBeCheckedOnlyWithIsOperator() |
|
129 | { |
|
@@ 128-142 (lines=15) @@ | ||
125 | $interpreter->buildFilter($astSubtree); |
|
126 | } |
|
127 | ||
128 | public function testNullValueCanBeCheckedOnlyWithIsOperator() |
|
129 | { |
|
130 | $astSubtree = new ASTAssertion('field', 'T_OP_GT', null); |
|
131 | $field = new Field('field', '', '', new NumberDataType()); |
|
132 | ||
133 | $dataSourceProphecy = $this->prophesize(DataSourceInterface::class); |
|
134 | $dataSourceProphecy->getFields()->willReturn([$field]); |
|
135 | ||
136 | $interpreterFactory = new InterpreterFactory($this->extensionContainerProphecy->reveal(), new FilterConditionFactory(), $this->contextFactoryProphecy->reveal()); |
|
137 | $interpreter = $interpreterFactory->create($dataSourceProphecy->reveal()); |
|
138 | ||
139 | $this->expectException(UQLInterpreterException::class); |
|
140 | $this->expectExceptionMessage('Only IS / IS NOT operator can be used to compare against null value'); |
|
141 | $interpreter->buildFilter($astSubtree); |
|
142 | } |
|
143 | ||
144 | protected function setUp() |
|
145 | { |