123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- <?php
-
- use GuzzleHttp\Exception\ServerException;
- use OpenFoodFacts\FilesystemTrait;
- use PHPUnit\Framework\TestCase;
-
- use OpenFoodFacts\Api;
- use OpenFoodFacts\Collection;
- use OpenFoodFacts\Document\FoodDocument;
- use OpenFoodFacts\Document;
- use OpenFoodFacts\Exception\{
- ProductNotFoundException,
- BadRequestException
- };
-
-
- use Monolog\Logger;
- use Monolog\Handler\StreamHandler;
- use Symfony\Component\Cache\Adapter\FilesystemAdapter;
- use Symfony\Component\Cache\Psr16Cache;
- use Symfony\Component\Console\Logger\ConsoleLogger;
-
- class ApiFoodCacheTest extends TestCase
- {
- use FilesystemTrait;
-
- /**
- * @var Api
- */
- private $api;
-
-
- protected function setUp()
- {
- @rmdir('tests/tmp');
- @mkdir('tests/tmp');
- @mkdir('tests/tmp/cache');
- $log = new Logger('name');
- $log->pushHandler(new StreamHandler('log/test.log'));
- $psr6Cache = new FilesystemAdapter(sprintf('testrun_%u', rand(0, 1000)), 10, 'tests/tmp/cache');
- $cache = new Psr16Cache($psr6Cache);
-
- $httpClient = new GuzzleHttp\Client([
- // "http_errors" => false, // MUST not use as it crashes error handling
- 'Connection' => 'close',
- CURLOPT_FORBID_REUSE => true,
- CURLOPT_FRESH_CONNECT => true,
- 'defaults' => [
- 'headers' => [
- 'CURLOPT_USERAGENT' => 'OFF - PHP - SDK - Unit Test',
- ],
- ],
- ]);
-
- $api = new Api('food', 'fr-en', $log, $httpClient, $cache);
- $this->assertInstanceOf(Api::class, $api);
- $this->api = $api;
-
- }
-
- public function testApi(): void
- {
-
- $prd = $this->api->getProduct('3057640385148');
-
- $this->assertInstanceOf(FoodDocument::class, $prd);
- $this->assertInstanceOf(Document::class, $prd);
-
- $this->assertTrue(isset($prd->product_name));
- $this->assertNotEmpty($prd->product_name);
-
- try {
- $product = $this->api->getProduct('305764038514800');
- $this->assertTrue(false);
- } catch (ProductNotFoundException $e) {
- $this->assertTrue(true);
- }
-
- try {
- $result = $this->api->downloadData('tests/mongodb', 'nopeFile');
- $this->assertTrue(false);
- } catch (BadRequestException $e) {
- $this->assertEquals($e->getMessage(), 'File type not recognized!');
- }
-
- // $result = $this->api->downloadData('tests/tmp/mongodb');
- // $this->assertTrue(true);
- }
-
- public function testApiCollection(): void
- {
-
- $collection = $this->api->getByFacets([]);
- $this->assertInstanceOf(Collection::class, $collection);
- $this->assertEquals($collection->pageCount(), 0);
-
- try {
- $collection = $this->api->getByFacets(['trace' => 'egg', 'country' => 'france'], 3);
- $this->assertTrue(false);
- } catch (\PHPUnit\Framework\Error\Notice $e) {
- $this->assertEquals($e->getMessage(), 'OpenFoodFact - Your request has been redirect');
- }
-
- $collection = $this->api->getByFacets(['trace' => 'eggs', 'country' => 'france'], 3);
- $this->assertInstanceOf(Collection::class, $collection);
- $this->assertEquals($collection->pageCount(), 20);
- $this->assertEquals($collection->getPage(), 3);
- $this->assertEquals($collection->getSkip(), 40);
- $this->assertEquals($collection->getPageSize(), 20);
- $this->assertGreaterThan(1000, $collection->searchCount());
-
- foreach ($collection as $key => $doc) {
- if ($key > 1) {
- break;
- }
-
- $this->assertInstanceOf(FoodDocument::class, $doc);
- $this->assertInstanceOf(Document::class, $doc);
-
- }
-
- }
-
- public function testApiSearch(): void
- {
-
- $collection = $this->api->search('volvic', 3, 30);
- $this->assertInstanceOf(Collection::class, $collection);
- $this->assertEquals($collection->pageCount(), 30);
- $this->assertGreaterThan(100, $collection->searchCount());
-
- }
-
-
- public function testFacets(): void
- {
-
- $collection = $this->api->getIngredients();
- $this->assertInstanceOf(Collection::class, $collection);
- $this->assertEquals($collection->pageCount(), 20);
- $this->assertEquals($collection->getPageSize(), 20);
- $this->assertGreaterThan(70000, $collection->searchCount());
-
- try {
- $collection = $this->api->getIngredient();
- $this->assertInstanceOf(Collection::class, $collection);
- $this->assertTrue(false);
- } catch (BadRequestException $e) {
- $this->assertEquals($e->getMessage(), 'Facet "ingredient" not found');
- }
-
- $collection = $this->api->getPurchase_places();
- $this->assertInstanceOf(Collection::class, $collection);
- $collection = $this->api->getPackaging_codes();
- $this->assertInstanceOf(Collection::class, $collection);
- $collection = $this->api->getEntry_dates();
- $this->assertInstanceOf(Collection::class, $collection);
-
- try {
- $collection = $this->api->getIngredient();
- $this->assertTrue(false);
- } catch (BadRequestException $e) {
- $this->assertEquals($e->getMessage(), 'Facet "ingredient" not found');
- }
-
- try {
- $collection = $this->api->nope();
- } catch (\Exception $e) {
- $this->assertTrue(true);
- }
- }
-
- protected function tearDown()
- {
- $this->recursiveDeleteDirectory('tests/tmp');
- }
-
- }
|