vjik/codeception-db-populator

Database populator for Codeception DB module

1.1.0 2022-08-04 07:22 UTC

This package is auto-updated.

Last update: 2022-08-04 07:24:00 UTC


README

codeception-logo.png

Database Populator for Codeception DB Module


Latest Stable Version Total Downloads Build status static analysis License

Codeception DB module addon that helps you to tune database populations. So for a test you could load only needed tables or rows. As a result it dramatically reduces the total execution time.

Requirements

  • PHP 8.0 or higher.
  • Codeception 5.0 or higher.
  • Codeception Module DB 3.0 or higher.

Installation

The package could be installed with composer:

composer require vjik/codeception-db-populator --dev --prefer-dist

General usage

Enable module Db and DatabasePopulator addon in the suite:

modules:
  enabled:
    - Db:
        dsn: 'mysql:host=%DB_HOST%;dbname=%DB_NAME%'
        user: '%DB_USERNAME%'
        password: '%DB_PASSWORD%'
    - Vjik\Codeception\DatabasePopulator\Module:
        dumpsPath: 'tests/_data/dumps'
        rowsPath: 'tests/_data/rows'

Create SQL dumps that contains a record of the table structure and/or the data for use in tests. Put dumps into path, specified in options (for example, tests/_data/dumps).

Create row sets for populate database tables. Row sets is PHP file that return array in format table => rows. For example:

<?php
return [
    'author' => [
        [
            'id' => 1,
            'name' => 'Ivan',
        ],
        [
            'id' => 2,
            'name' => 'Petr',
        ],
    ],
    'post' => [
        [
            'id' => 1,
            'author_id' => 2,
            'name' => 'First post',
        ],
        [
            'id' => 2,
            'author_id' => 2,
            'name' => 'My history',
        ],
    ],
];

You can get structure, similar to this:

tests/
  _data/
    dumps/
      user-management.sql
      blog.sql
      catalog.sql
    rows/
      users.php
      authors.php
      blog-categories.php
      posts-with-categories.php

Load dumps and row sets in your tests:

final class BlogTest extends Unit
{
    public function testCreatePost(): void
    {
        $this->tester->loadDump('blog');
        $this->tester->loadRows('authors');
        ...
    }
}

Actions

loadDump()

Load the specified dump(s) to database. Before loading the dump, the database is cleaned.

$I->loadDump('blog'); // load one dump
$I->loadDump('blog', 'catalog'); // load several dumps

loadRows()

Load the specified row set(s) to database.

$I->loadRows('posts'); // load one set
$I->loadRows('users', 'comments'); // load several sets

Configuration

  • dumpsPath (required) — relative path to directory with dumps (for example, tests/_dump).
  • rowsPath (required) — relative path to directory with row sets (for example, tests/_rows).
  • preloadDump — dump(s) for preload before run suite.
  • preloadRows — row set(s) for preload before run suite.

Testing

Unit and integration testing

The package is tested with Codeception. For tests need MySQL database with configuration:

  • host: 127.0.0.1
  • name: db_test
  • user: root
  • password: root

To run tests:

./vendor/bin/codecept run

Static analysis

The code is statically analyzed with Psalm. To run static analysis:

./vendor/bin/psalm

License

The Database Populator for Codeception DB Module is free software. It is released under the terms of the BSD License. Please see LICENSE for more information.