shell bypass 403
<?php
namespace JoeDixon\Translation\Tests;
use JoeDixon\Translation\Drivers\Translation;
use JoeDixon\Translation\Exceptions\LanguageExistsException;
use JoeDixon\Translation\TranslationBindingsServiceProvider;
use JoeDixon\Translation\TranslationServiceProvider;
use Orchestra\Testbench\TestCase;
class FileDriverTest extends TestCase
{
private $translation;
/**
* Setup the test environment.
*/
protected function setUp(): void
{
parent::setUp();
app()['path.lang'] = __DIR__.'/fixtures/lang';
$this->translation = app()->make(Translation::class);
}
protected function getPackageProviders($app)
{
return [
TranslationServiceProvider::class,
TranslationBindingsServiceProvider::class,
];
}
protected function getEnvironmentSetUp($app)
{
$app['config']->set('translation.driver', 'file');
}
/** @test */
public function it_returns_all_languages()
{
$languages = $this->translation->allLanguages();
$this->assertEquals($languages->count(), 2);
$this->assertEquals($languages->toArray(), ['en' => 'en', 'es' => 'es']);
}
/** @test */
public function it_returns_all_translations()
{
$translations = $this->translation->allTranslations();
$this->assertEquals($translations->count(), 2);
$this->assertArraySubset(['en' => ['single' => ['single' => ['Hello' => 'Hello', "What's up" => "What's up!"]], 'group' => ['test' => ['hello' => 'Hello', 'whats_up' => "What's up!"]]]], $translations->toArray());
$this->assertArrayHasKey('en', $translations->toArray());
$this->assertArrayHasKey('es', $translations->toArray());
}
/** @test */
public function it_returns_all_translations_for_a_given_language()
{
$translations = $this->translation->allTranslationsFor('en');
$this->assertEquals($translations->count(), 2);
$this->assertEquals(['single' => ['single' => ['Hello' => 'Hello', "What's up" => "What's up!"]], 'group' => ['test' => ['hello' => 'Hello', 'whats_up' => "What's up!"]]], $translations->toArray());
$this->assertArrayHasKey('single', $translations->toArray());
$this->assertArrayHasKey('group', $translations->toArray());
}
/** @test */
public function it_throws_an_exception_if_a_language_exists()
{
$this->expectException(LanguageExistsException::class);
$this->translation->addLanguage('en');
}
/** @test */
public function it_can_add_a_new_language()
{
$this->translation->addLanguage('fr');
$this->assertTrue(file_exists(__DIR__.'/fixtures/lang/fr.json'));
$this->assertTrue(file_exists(__DIR__.'/fixtures/lang/fr'));
rmdir(__DIR__.'/fixtures/lang/fr');
unlink(__DIR__.'/fixtures/lang/fr.json');
}
/** @test */
public function it_can_add_a_new_translation_to_a_new_group()
{
$this->translation->addGroupTranslation('es', 'test', 'hello', 'Hola!');
$translations = $this->translation->allTranslationsFor('es');
$this->assertArraySubset(['group' => ['test' => ['hello' => 'Hola!']]], $translations->toArray());
unlink(__DIR__.'/fixtures/lang/es/test.php');
}
/** @test */
public function it_can_add_a_new_translation_to_an_existing_translation_group()
{
$this->translation->addGroupTranslation('en', 'test', 'test', 'Testing');
$translations = $this->translation->allTranslationsFor('en');
$this->assertArraySubset(['group' => ['test' => ['hello' => 'Hello', 'whats_up' => 'What\'s up!', 'test' => 'Testing']]], $translations->toArray());
file_put_contents(
app()['path.lang'].'/en/test.php',
"<?php\n\nreturn ".var_export(['hello' => 'Hello', 'whats_up' => 'What\'s up!'], true).';'.\PHP_EOL
);
}
/** @test */
public function it_can_add_a_new_single_translation()
{
$this->translation->addSingleTranslation('es', 'single', 'Hello', 'Hola!');
$translations = $this->translation->allTranslationsFor('es');
$this->assertArraySubset(['single' => ['single' => ['Hello' => 'Hola!']]], $translations->toArray());
unlink(__DIR__.'/fixtures/lang/es.json');
}
/** @test */
public function it_can_add_a_new_single_translation_to_an_existing_language()
{
$this->translation->addSingleTranslation('en', 'single', 'Test', 'Testing');
$translations = $this->translation->allTranslationsFor('en');
$this->assertArraySubset(['single' => ['single' => ['Hello' => 'Hello', 'What\'s up' => 'What\'s up!', 'Test' => 'Testing']]], $translations->toArray());
file_put_contents(
app()['path.lang'].'/en.json',
json_encode((object) ['Hello' => 'Hello', 'What\'s up' => 'What\'s up!'], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)
);
}
/** @test */
public function it_can_get_a_collection_of_group_names_for_a_given_language()
{
$groups = $this->translation->getGroupsFor('en');
$this->assertEquals($groups->toArray(), ['test']);
}
/** @test */
public function it_can_merge_a_language_with_the_base_language()
{
$this->translation->addGroupTranslation('es', 'test', 'hello', 'Hola!');
$translations = $this->translation->getSourceLanguageTranslationsWith('es');
$this->assertEquals($translations->toArray(), [
'group' => [
'test' => [
'hello' => ['en' => 'Hello', 'es' => 'Hola!'],
'whats_up' => ['en' => "What's up!", 'es' => ''],
],
],
'single' => [
'single' => [
'Hello' => [
'en' => 'Hello',
'es' => '',
],
"What's up" => [
'en' => "What's up!",
'es' => '',
],
],
],
]);
unlink(__DIR__.'/fixtures/lang/es/test.php');
}
/** @test */
public function it_can_add_a_vendor_namespaced_translations()
{
$this->translation->addGroupTranslation('es', 'translation_test::test', 'hello', 'Hola!');
$this->assertEquals($this->translation->allTranslationsFor('es')->toArray(), [
'group' => [
'translation_test::test' => [
'hello' => 'Hola!',
],
],
'single' => [],
]);
\File::deleteDirectory(__DIR__.'/fixtures/lang/vendor');
}
/** @test */
public function it_can_add_a_nested_translation()
{
$this->translation->addGroupTranslation('en', 'test', 'test.nested', 'Nested!');
$this->assertEquals($this->translation->getGroupTranslationsFor('en')->toArray(), [
'test' => [
'hello' => 'Hello',
'test.nested' => 'Nested!',
'whats_up' => 'What\'s up!',
],
]);
file_put_contents(
app()['path.lang'].'/en/test.php',
"<?php\n\nreturn ".var_export(['hello' => 'Hello', 'whats_up' => 'What\'s up!'], true).';'.\PHP_EOL
);
}
/** @test */
public function it_can_add_nested_vendor_namespaced_translations()
{
$this->translation->addGroupTranslation('es', 'translation_test::test', 'nested.hello', 'Hola!');
$this->assertEquals($this->translation->allTranslationsFor('es')->toArray(), [
'group' => [
'translation_test::test' => [
'nested.hello' => 'Hola!',
],
],
'single' => [],
]);
\File::deleteDirectory(__DIR__.'/fixtures/lang/vendor');
}
/** @test */
public function it_can_merge_a_namespaced_language_with_the_base_language()
{
$this->translation->addGroupTranslation('en', 'translation_test::test', 'hello', 'Hello');
$this->translation->addGroupTranslation('es', 'translation_test::test', 'hello', 'Hola!');
$translations = $this->translation->getSourceLanguageTranslationsWith('es');
$this->assertEquals($translations->toArray(), [
'group' => [
'test' => [
'hello' => ['en' => 'Hello', 'es' => ''],
'whats_up' => ['en' => "What's up!", 'es' => ''],
],
'translation_test::test' => [
'hello' => ['en' => 'Hello', 'es' => 'Hola!'],
],
],
'single' => [
'single' => [
'Hello' => [
'en' => 'Hello',
'es' => '',
],
"What's up" => [
'en' => "What's up!",
'es' => '',
],
],
],
]);
\File::deleteDirectory(__DIR__.'/fixtures/lang/vendor');
}
/** @test */
public function a_list_of_languages_can_be_viewed()
{
$this->get(config('translation.ui_url'))
->assertSee('en');
}
/** @test */
public function the_language_creation_page_can_be_viewed()
{
$this->get(config('translation.ui_url').'/create')
->assertSee('Add a new language');
}
/** @test */
public function a_language_can_be_added()
{
$this->post(config('translation.ui_url'), ['locale' => 'de'])
->assertRedirect();
$this->assertTrue(file_exists(__DIR__.'/fixtures/lang/de.json'));
$this->assertTrue(file_exists(__DIR__.'/fixtures/lang/de'));
rmdir(__DIR__.'/fixtures/lang/de');
unlink(__DIR__.'/fixtures/lang/de.json');
}
/** @test */
public function a_list_of_translations_can_be_viewed()
{
$this->get(config('translation.ui_url').'/en/translations')
->assertSee('hello')
->assertSee('whats_up');
}
/** @test */
public function the_translation_creation_page_can_be_viewed()
{
$this->get(config('translation.ui_url').'/'.config('app.locale').'/translations/create')
->assertSee('Add a translation');
}
/** @test */
public function a_new_translation_can_be_added()
{
$this->post(config('translation.ui_url').'/en/translations', ['key' => 'joe', 'value' => 'is cool'])
->assertRedirect();
$translations = $this->translation->getSingleTranslationsFor('en');
$this->assertArraySubset(['single' => ['Hello' => 'Hello', 'What\'s up' => 'What\'s up!', 'joe' => 'is cool']], $translations->toArray());
file_put_contents(
app()['path.lang'].'/en.json',
json_encode((object) ['Hello' => 'Hello', 'What\'s up' => 'What\'s up!'], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)
);
}
/** @test */
public function a_translation_can_be_updated()
{
$this->post(config('translation.ui_url').'/en', ['group' => 'test', 'key' => 'hello', 'value' => 'Hello there!'])
->assertStatus(200)
->assertSee(json_encode(['success' => true]));
$translations = $this->translation->getGroupTranslationsFor('en');
$this->assertArraySubset(['test' => ['hello' => 'Hello there!', 'whats_up' => 'What\'s up!']], $translations->toArray());
file_put_contents(
app()['path.lang'].'/en/test.php',
"<?php\n\nreturn ".var_export(['hello' => 'Hello', 'whats_up' => 'What\'s up!'], true).';'.\PHP_EOL
);
}
}