sir_trevor-8.x-1.x-dev/tests/src/Unit/LibraryInfoBuilderTest.php

tests/src/Unit/LibraryInfoBuilderTest.php
<?php

namespace Drupal\sir_trevor\Tests\Unit;

use Drupal\sir_trevor\LibraryInfoBuilder;
use Drupal\sir_trevor\Plugin\SirTrevorBlock;
use Drupal\Tests\sir_trevor\Unit\TestDoubles\SirTrevorBlockMock;
use Drupal\Tests\sir_trevor\Unit\TestDoubles\SirTrevorMixinMock;
use Drupal\Tests\sir_trevor\Unit\TestDoubles\SirTrevorPluginManagerMock;

/**
 * @group SirTrevor
 */
class LibraryInfoBuilderTest extends \PHPUnit_Framework_TestCase {
  /** @var SirTrevorPluginManagerMock */
  private $blockPluginManager;
  /** @var LibraryInfoBuilder */
  private $sut;

  /**
   * {@inheritdoc}
   */
  public function setUp() {
    $this->blockPluginManager = new SirTrevorPluginManagerMock();
    $this->sut = new LibraryInfoBuilder($this->blockPluginManager);
  }

  public function getLibraryInfoTestDataProvider() {
    $data['single instance, no assets'] = [
      'instances' => [
        new SirTrevorBlockMock('some_id'),
      ],
      'expected' => [],
    ];

    $data['single instance, editor js'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('editorJs', 'path/to/editor/js'),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.editor' => [
            'js' => [
              'path/to/editor/js' => [],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    $data['single mixin instance, editor js'] = [
      'instances' => [
        (new SirTrevorMixinMock('some_id'))
          ->set('editorJs', 'path/to/editor/js'),
      ],
      'expected' => [
        'sir_trevor' => [
          'mixin.some_id.editor' => [
            'js' => [
              'path/to/editor/js' => [],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    $data['single instance, editor js with dependency'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('editorJs', 'path/to/editor/js')
          ->set('editorDependencies', ['core/jquery']),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.editor' => [
            'js' => [
              'path/to/editor/js' => [],
            ],
            'dependencies' => [
              'core/jquery',
              'sir_trevor/sir-trevor',
            ],
          ],
        ],
      ],
    ];

    $data['single instance, editor js - multiple files'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('editorJs', ['path/to/editor/js', 'path/to/second/js']),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.editor' => [
            'js' => [
              'path/to/editor/js' => [],
              'path/to/second/js' => [],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    $data['single instance, editor css'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('editorCss', 'path/to/editor/css'),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.editor' => [
            'css' => [
              'theme' => [
                'path/to/editor/css' => [],
              ],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];
    $data['single instance, editor css - multiple files'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('editorCss', ['path/to/editor/css', 'path/to/second/css']),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.editor' => [
            'css' => [
              'theme' => [
                'path/to/editor/css' => [],
                'path/to/second/css' => [],
              ],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    $data['single instance, editor js + css'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('editorJs', 'path/to/editor/js')
          ->set('editorCss', 'path/to/editor/css'),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.editor' => [
            'css' => [
              'theme' => [
                'path/to/editor/css' => [],
              ],
            ],
            'js' => [
              'path/to/editor/js' => [],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    $data['single instance, display js'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('displayJs', 'path/to/display/js'),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.display' => [
            'js' => [
              'path/to/display/js' => [],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    $data['single instance, display js with dependency'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('displayJs', 'path/to/display/js')
          ->set('displayDependencies', ['core/jquery']),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.display' => [
            'js' => [
              'path/to/display/js' => [],
            ],
            'dependencies' => [
              'core/jquery',
              'sir_trevor/sir-trevor',
            ],
          ],
        ],
      ],
    ];

    $data['single instance, display js - multiple files'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('displayJs', ['path/to/display/js', 'path/to/second/js']),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.display' => [
            'js' => [
              'path/to/display/js' => [],
              'path/to/second/js' => [],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    $data['single instance, display css'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('displayCss', 'path/to/display/css'),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.display' => [
            'css' => [
              'theme' => [
                'path/to/display/css' => [],
              ],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    $data['single instance, display css - multiple files'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('displayCss', ['path/to/display/css', 'path/to/second/css']),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.display' => [
            'css' => [
              'theme' => [
                'path/to/display/css' => [],
                'path/to/second/css' => [],
              ],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    $data['single instance, display js + css'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('displayJs', 'path/to/display/js')
          ->set('displayCss', 'path/to/display/css'),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.display' => [
            'css' => [
              'theme' => [
                'path/to/display/css' => [],
              ],
            ],
            'js' => [
              'path/to/display/js' => [],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    $data['single instance, all js + css'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('displayJs', 'path/to/display/js')
          ->set('displayCss', 'path/to/display/css')
          ->set('editorJs', 'path/to/editor/js')
          ->set('editorCss', 'path/to/editor/css'),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.editor' => [
            'css' => [
              'theme' => [
                'path/to/editor/css' => [],
              ],
            ],
            'js' => [
              'path/to/editor/js' => [],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
          'block.some_id.display' => [
            'css' => [
              'theme' => [
                'path/to/display/css' => [],
              ],
            ],
            'js' => [
              'path/to/display/js' => [],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    $data['multiple instances, combined assets'] = [
      'instances' => [
        (new SirTrevorBlockMock('some_id'))
          ->set('editorJs', 'path/to/editor/js'),
        (new SirTrevorBlockMock('some_other_id', 'st_extension'))
          ->set('editorCss', 'path/to/editor/css'),
      ],
      'expected' => [
        'sir_trevor' => [
          'block.some_id.editor' => [
            'js' => [
              'path/to/editor/js' => [],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
        'st_extension' => [
          'block.some_other_id.editor' => [
            'css' => [
              'theme' => [
                'path/to/editor/css' => [],
              ],
            ],
            'dependencies' => ['sir_trevor/sir-trevor'],
          ],
        ],
      ],
    ];

    return $data;
  }

  /**
   * @test
   * @dataProvider getLibraryInfoTestDataProvider
   * @param SirTrevorBlock[] $pluginInstances
   * @param array $expectedResult
   */
  public function getLibraryInfo(array $pluginInstances, array $expectedResult) {
    $this->blockPluginManager->setInstances($pluginInstances);
    $this->assertEquals($expectedResult, $this->sut->getLibraryInfo());
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc