* SPDX-FileContributor: Henrique Moody */ declare(strict_types=1); test('Scenario #1', catchMessages( fn() => v::init() ->key( 'mysql', v::init() ->key('host', v::stringType()) ->key('user', v::stringType()) ->key('password', v::stringType()) ->key('schema', v::stringType()), ) ->key( 'postgresql', v::init() ->key('host', v::stringType()) ->key('user', v::stringType()) ->key('password', v::stringType()) ->key('schema', v::stringType()), ) ->assert( [ 'mysql' => [ 'host' => 42, 'schema' => 42, ], 'postgresql' => [ 'user' => 42, 'password' => 42, ], ], [ 'mysql' => [ 'user' => 'Value should be a MySQL username', 'host' => '`{{subject}}` should be a MySQL host', ], 'postgresql' => ['schema' => 'You must provide a valid PostgreSQL schema'], ], ), fn(array $messages) => expect($messages)->toBe([ '__root__' => '`["mysql": ["host": 42, "schema": 42], "postgresql": ["user": 42, "password": 42]]` must pass all the rules', 'mysql' => [ '__root__' => '`.mysql` must pass all the rules', 'host' => '``.mysql.host`` should be a MySQL host', 'user' => 'Value should be a MySQL username', 'password' => '`.mysql.password` must be present', 'schema' => '`.mysql.schema` must be a string', ], 'postgresql' => [ '__root__' => '`.postgresql` must pass all the rules', 'host' => '`.postgresql.host` must be present', 'user' => '`.postgresql.user` must be a string', 'password' => '`.postgresql.password` must be a string', 'schema' => 'You must provide a valid PostgreSQL schema', ], ]), ));