expectException(\Exception::class); $this->expectExceptionMessage("extractions has to be an array"); $this->buildExtractions('')->check(); } public function testCheckShouldFailWhenExtractionsDoesNotContainArrays() { $this->expectException(\Exception::class); $this->expectExceptionMessage("Each extraction within extractions has to be an array"); $this->buildExtractions(array('5'))->check(); } /** * @dataProvider getInvalidExtraction */ public function testCheckShouldFailWhenExtractionsDoesNotContainValidExtraction($extraction) { $this->expectException(\Exception::class); $this->expectExceptionMessage('Each extraction within extractions must have a key "dimension" and "pattern" only'); $this->buildExtractions(array($extraction))->check(); } public function getInvalidExtraction() { return array( array(array()), array(array('dimension' => 'url')), array(array('pattern' => 'index(.+).html')), array(array('dimension' => 'url', 'anything' => 'invalid')), array(array('dimension' => 'url', 'pattern' => 'index(.+).html', 'anything' => 'invalid')), ); } public function testCheckShouldAlsoCheckExtractionAndFailIfValueIsInvalid() { $this->expectException(\Exception::class); $this->expectExceptionMessage("Invald dimension 'invalId' used in an extraction. Available dimensions are: url, urlparam, action_name"); $extraction1 = array('dimension' => 'url', 'pattern' => 'index(.+).html'); $extraction2 = array('dimension' => 'invalId', 'pattern' => 'index'); $this->buildExtractions(array($extraction1, $extraction2))->check(); } public function testCheckShouldNotFailWhenExtractionsDefinitionIsValid() { $extraction1 = array('dimension' => 'url', 'pattern' => 'index(.+).html'); $extraction2 = array('dimension' => 'urlparam', 'pattern' => 'index'); $ex = $this->buildExtractions(array($extraction1, $extraction2)); $ex->check(); self::assertInstanceOf(Extractions::class, $ex); } private function buildExtractions($extractions) { return new Extractions($extractions); } }