A set of tools to work with BoardGameArena projects.
Via composer:
composer require --dev dholmes/bga-workbenchVia Docker:
docker build -t bgawb .
alias bgawb="docker run --rm -v $PWD:/data -w /data bgawb"(this last line should be set in your ~/.bashrc to keep the alias working in a new terminal)
To set up your project to work with BGA Workbench you need to have a bgaproject.yml file in the root. To generate one
see the bgawb init command.
Once you've installed bgawb you can run the below command to interactively create a bgaproject.yml file in your
current directory.
bgawb initbgawb build --deployWatches development files and deploys them as they change.
bgawb build --deploy --watchThe Board Game Arena production framework/environment doesn't natively support a Composer
project setup. By having useComposer: true set in your bgaproject.yml file, the
[bgawb build](Deploying to BGA Studio) command will merge all non-dev composer dependencies inline into your .game.php
file before deploying.
Some testing utilities are provided to help test various parts of a standard BGA project game.
Will run some basic checks on your project setup. e.g. whether you have the required files to function on the BGA
platform (.game.php, .action.php, etc), whether your states.inc.php file is valid, etc.
bgawb validateIncluding this trait and implementing the createGameTableInstanceBuilder method will set up and tear down a game table
instance for each test that is run. Note that this makes use of the setUp and tearDown PHPUnit hooks
<?php
namespace Game\Tests;
use PHPUnit\Framework\TestCase;
use BGAWorkbench\Test\TestHelp;
use Doctrine\DBAL\Connection;
use BGAWorkbench\Utils;
class ChooseAttackTest extends TestCase
{
use TestHelp;
protected function createGameTableInstanceBuilder() : TableInstanceBuilder
{
return $this->gameTableInstanceBuilder()
->setPlayersWithIds([66, 77])
->overridePlayersPostSetup([
66 => ['player_color' => 'ff0000'],
77 => ['player_color' => '00ff00']
]);
}
public function testAction()
{
$action = $this->table
->setupNewGame()
->withDbConnection(function (Connection $db) {
$db->exec('INSERT battlefield_card (player_id, type, x, y) VALUES (' .
join('), (', [
[77, '"infantry"', 0, -1],
[66, '"infantry"', 0, 1],
[66, '"artillery"', 6, 1],
])
. ')');
})
->createActionInstanceForCurrentPlayer(66)
->stubActivePlayerId(66)
->stubArgs(['x' => 5, 'y' => 5]);
$action->chooseAttack();
// TODO: Run some asserts on the db
}
public function testStateFunc()
{
$game = $this->table
->setupNewGame()
->createGameInstanceWithNoBoundedPlayer()
->stubActivePlayerId(66);
$game->stNextPlayer();
}
public function testGetAllDatas()
{
$game = $this->table
->setupNewGame()
->withDbConnection(function (Connection $db) {
$db->exec('DELETE FROM deck_card');
$db->exec('DELETE FROM playable_card');
$db->exec('INSERT INTO battlefield_card (player_id, type, x, y) VALUES (66, "tank", 0, 2)');
$db->executeUpdate('UPDATE player SET player_score_aux = 1 WHERE player_id = 66');
})
->createGameInstanceForCurrentPlayer(66);
$datas = Utils::callProtectedMethod($game, 'getAllDatas');
// TODO: Some asserts on $datas
}
}i.e. if you want to make some changes to the BGA Workbench project. This is not required for using the library in your own project.
vagrant upvagrant ssh
composer test- Add a release/tag on github with the version number.
- Go to the packagist url and click "Update": https://packagist.org/packages/dholmes/bga-workbench. This should be done automatically though if just left.