diff --git a/src/libs/BetterLocation/BetterLocationCollection.php b/src/libs/BetterLocation/BetterLocationCollection.php index 7e6bfd84..63adbf68 100644 --- a/src/libs/BetterLocation/BetterLocationCollection.php +++ b/src/libs/BetterLocation/BetterLocationCollection.php @@ -11,6 +11,7 @@ use App\BetterLocation\Service\DuckDuckGoService; use App\BetterLocation\Service\Exceptions\InvalidLocationException; use App\BetterLocation\Service\FacebookService; +use App\BetterLocation\Service\FirmyCzService; use App\BetterLocation\Service\FoursquareService; use App\BetterLocation\Service\GeocachingService; use App\BetterLocation\Service\GlympseService; @@ -288,6 +289,8 @@ public static function fromTelegramMessage(string $message, array $entities): se } } else if (OpenLocationCodeService::isValid($url)) { $betterLocationsCollection[] = OpenLocationCodeService::parseCoords($url); + } else if (FirmyCzService::isUrl($url)) { + $betterLocationsCollection[] = FirmyCzService::parseUrl($url); } else if (FacebookService::isUrl($url)) { if ($location = FacebookService::parseUrl($url)) { $betterLocationsCollection[] = $location; diff --git a/src/libs/BetterLocation/Service/FirmyCzService.php b/src/libs/BetterLocation/Service/FirmyCzService.php new file mode 100644 index 00000000..974321e6 --- /dev/null +++ b/src/libs/BetterLocation/Service/FirmyCzService.php @@ -0,0 +1,74 @@ +loadPoiDetails('firm', $firmId); + $location = new BetterLocation($url, $firmDetail->getLat(), $firmDetail->getLon(), self::class); + $location->setPrefixMessage(sprintf('%s %s', $url, self::NAME, $firmDetail->title)); + $location->setAddress($firmDetail->titleVars->locationMain1); + return $location; + } + + /** + * @param string $input + * @return BetterLocationCollection + * @throws NotImplementedException + */ + public static function parseCoordsMultiple(string $input): BetterLocationCollection + { + throw new NotImplementedException('Parsing multiple coordinates is not available.'); + } +} diff --git a/tests/BetterLocation/Service/FirmyCzServiceTest.php b/tests/BetterLocation/Service/FirmyCzServiceTest.php new file mode 100644 index 00000000..a904dabc --- /dev/null +++ b/tests/BetterLocation/Service/FirmyCzServiceTest.php @@ -0,0 +1,61 @@ +expectException(NotSupportedException::class); + $this->expectExceptionMessage('Share link is not supported.'); + FirmyCzService::getLink(50.087451, 14.420671); + } + + public function testGenerateDriveLink(): void + { + $this->expectException(NotSupportedException::class); + $this->expectExceptionMessage('Drive link is not supported.'); + FirmyCzService::getLink(50.087451, 14.420671, true); + } + + public function testIfValidLinks(): void + { + $this->assertTrue(FirmyCzService::isUrl('https://www.firmy.cz/detail/13300341-restaurace-a-pivnice-u-slunce-blansko.html')); + $this->assertTrue(FirmyCzService::isUrl('https://www.firmy.cz/detail/13300341-blablabla')); + $this->assertTrue(FirmyCzService::isUrl('https://www.firmy.cz/detail/13300341')); + $this->assertTrue(FirmyCzService::isUrl('http://www.firmy.cz/detail/13300341-restaurace-a-pivnice-u-slunce-blansko.html')); + $this->assertTrue(FirmyCzService::isUrl('https://firmy.cz/detail/13300341-restaurace-a-pivnice-u-slunce-blansko.html')); + $this->assertTrue(FirmyCzService::isUrl('http://firmy.cz/detail/13300341-restaurace-a-pivnice-u-slunce-blansko.html')); + $this->assertTrue(FirmyCzService::isUrl('https://www.firmy.cz/detail/13134188-kosmeticky-salon-h2o-humpolec.html')); + $this->assertTrue(FirmyCzService::isUrl('https://www.firmy.cz/detail/13139938-zelva-beers-burgers-praha-zizkov.html')); + $this->assertTrue(FirmyCzService::isUrl('https://www.firmy.cz/detail/207772-penny-market-as.html')); + + $this->assertFalse(FirmyCzService::isUrl('https://www.firma.cz/detail/13300341-restaurace-a-pivnice-u-slunce-blansko.html')); + $this->assertFalse(FirmyCzService::isUrl('http://firma.cz/detail/13300341-blablabla')); + $this->assertFalse(FirmyCzService::isUrl('https://www.firmy.cz/aaa/13300341')); + $this->assertFalse(FirmyCzService::isUrl('https://www.firmy.cz/detail/a13300341')); + } + + public function testValidLinks(): void + { + $this->assertSame('49.364246,16.644386', FirmyCzService::parseUrl('https://www.firmy.cz/detail/13300341-restaurace-a-pivnice-u-slunce-blansko.html')->__toString()); + $this->assertSame('49.364246,16.644386', FirmyCzService::parseUrl('https://www.firmy.cz/detail/13300341-blablabla')->__toString()); + $this->assertSame('49.364246,16.644386', FirmyCzService::parseUrl('https://www.firmy.cz/detail/13300341')->__toString()); + $this->assertSame('49.364246,16.644386', FirmyCzService::parseUrl('http://www.firmy.cz/detail/13300341-restaurace-a-pivnice-u-slunce-blansko.html')->__toString()); + $this->assertSame('49.364246,16.644386', FirmyCzService::parseUrl('https://firmy.cz/detail/13300341-restaurace-a-pivnice-u-slunce-blansko.html')->__toString()); + $this->assertSame('49.364246,16.644386', FirmyCzService::parseUrl('http://firmy.cz/detail/13300341-restaurace-a-pivnice-u-slunce-blansko.html')->__toString()); + $this->assertSame('49.541035,15.361974', FirmyCzService::parseUrl('https://www.firmy.cz/detail/13134188-kosmeticky-salon-h2o-humpolec.html')->__toString()); + $this->assertSame('50.087414,14.469195', FirmyCzService::parseUrl('https://www.firmy.cz/detail/13139938-zelva-beers-burgers-praha-zizkov.html')->__toString()); + $this->assertSame('50.221840,12.190701', FirmyCzService::parseUrl('https://www.firmy.cz/detail/207772-penny-market-as.html')->__toString()); + } + + public function testInvalid(): void + { + $this->expectException(\DJTommek\MapyCzApi\MapyCzApiException::class); + $this->expectExceptionCode(404); + $this->expectExceptionMessage('Not Found'); + $this->assertSame('50.077886,14.371990', FirmyCzService::parseUrl('https://www.firmy.cz/detail/9999999-restaurace-a-pivnice-u-slunce-blansko.html')->__toString()); + } +}