summaryrefslogtreecommitdiff
path: root/tests/Test.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Test.php')
-rw-r--r--tests/Test.php180
1 files changed, 180 insertions, 0 deletions
diff --git a/tests/Test.php b/tests/Test.php
new file mode 100644
index 0000000..2c81d46
--- /dev/null
+++ b/tests/Test.php
@@ -0,0 +1,180 @@
+<?php
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Psr7\Response as GuzzleHttpResponse;
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\HttpFoundation\Response;
+
+class Test extends TestCase
+{
+ protected $client;
+
+ private $apiKey = '1234';
+
+ protected function setUp(): void
+ {
+ $this->client = new Client([
+ 'base_uri' => 'http://localhost:8080',
+ ]);
+
+ // add content
+ $contentRoot = dirname(__DIR__) . '/content';
+ @mkdir($contentRoot . '/config');
+ @mkdir($contentRoot . '/customername/formname/config');
+ @mkdir($contentRoot . '/customername/formname/fields');
+ @mkdir($contentRoot . '/customername/pagedform/fields');
+
+ # root config
+ file_put_contents($contentRoot . '/config/config.toml', <<<EOF
+ [app]
+ title = "Flat-File Forms"
+
+ [email]
+ host = "localhost"
+ user = "root"
+ password = "123456"
+
+ [api]
+ keys = ["1234"]
+ EOF);
+
+ # formname config
+ file_put_contents($contentRoot . '/customername/formname/config/config.toml', <<<EOF
+ [api]
+ keys = ["asdfghjklö0987654321", "123"]
+
+ [email]
+ host = "gmx"
+ EOF);
+
+ # formname fields
+ file_put_contents($contentRoot . '/customername/formname/fields/_fields.toml', <<<EOF
+ [field.name]
+ file = "name.toml"
+
+ [field.email]
+ file = "email.toml"
+ required = true
+
+ [field.date]
+ required = true
+ EOF);
+ file_put_contents($contentRoot . '/customername/formname/fields/email.toml', <<<EOF
+ type = "email"
+ name = "email"
+ placeholder = "E-Mail"
+
+ [attributes]
+ data-email = "test@example.org"
+ EOF);
+ file_put_contents($contentRoot . '/customername/formname/fields/name.toml', <<<EOF
+ type = "text"
+ name = "name"
+
+ [attributes]
+ data-value = 123
+ EOF);
+
+ # pagedform fields
+ file_put_contents($contentRoot . '/customername/pagedform/fields/_fields.toml', <<<EOF
+ [page.one.field.name]
+ file = "name.toml"
+
+ [page.one.field.email]
+ file = "email.toml"
+ required = true
+
+ [page.second.field.date]
+ required = true
+ EOF);
+ file_put_contents($contentRoot . '/customername/pagedform/fields/email.toml', <<<EOF
+ type = "email"
+ name = "email"
+ placeholder = "E-Mail"
+
+ [attributes]
+ data-email = "test@example.org"
+ EOF);
+ file_put_contents($contentRoot . '/customername/pagedform/fields/name.toml', <<<EOF
+ type = "text"
+ name = "name"
+
+ [attributes]
+ data-value = 123
+ EOF);
+ }
+
+ public function request($method, $path): GuzzleHttpResponse
+ {
+ $response = null;
+ try {
+ $response = $this->client->request($method, $path, ['http_errors' => false]);
+ } catch (\Exception $e) {}
+
+ return $response;
+ }
+
+ public function testApiKey()
+ {
+ $formnameApiKey = '123';
+ $rootApiKey = '1234';
+
+ // formname
+ $formnameResponse = $this->request('GET', 'customername/formname/fields');
+ $this->assertEquals(Response::HTTP_BAD_REQUEST, $formnameResponse->getStatusCode());
+
+ $formnameResponse = $this->request('GET', 'customername/formname/fields?key=321');
+ $this->assertEquals(Response::HTTP_UNAUTHORIZED, $formnameResponse->getStatusCode());
+
+ $formnameResponse = $this->request('GET', 'customername/formname/fields?key=' . $formnameApiKey);
+ $this->assertEquals(Response::HTTP_OK, $formnameResponse->getStatusCode());
+
+ $formnameResponse = $this->request('GET', 'customername/formname/fields?key=' . $rootApiKey);
+ $this->assertEquals(Response::HTTP_OK, $formnameResponse->getStatusCode());
+
+ // pagedform
+ $pagedformResponse = $this->request('GET', 'customername/pagedform/fields?key=' . $formnameApiKey);
+ $this->assertEquals(Response::HTTP_UNAUTHORIZED, $pagedformResponse->getStatusCode());
+
+ $pagedformResponse = $this->request('GET', 'customername/pagedform/fields?key=' . $rootApiKey);
+ $this->assertEquals(Response::HTTP_OK, $pagedformResponse->getStatusCode());
+ }
+
+ public function testFields() {
+ $formnameResponse = $this->request('GET', 'customername/formname/fields?key=' . $this->apiKey);
+ $formnameBody = json_decode((string)$formnameResponse->getBody(), true)['data'];
+ $this->assertArrayHasKey('name', $formnameBody);
+ $this->assertArrayHasKey('email', $formnameBody);
+ $this->assertArrayHasKey('date', $formnameBody);
+
+ $this->assertArrayHasKey('name', $formnameBody['name']);
+ $this->assertArrayHasKey('name', $formnameBody['date']);
+ $this->assertArrayHasKey('required', $formnameBody['email']);
+ }
+
+ public function testFieldsPaged() {
+ // all pages
+ $pagedformResponse = $this->request('GET', 'customername/pagedform/fields?key=' . $this->apiKey);
+ $pagedformBody = json_decode((string)$pagedformResponse->getBody(), true)['data'];
+ $this->assertArrayHasKey('one', $pagedformBody);
+ $this->assertArrayHasKey('second', $pagedformBody);
+
+ $this->assertArrayHasKey('name', $pagedformBody['one']);
+ $this->assertArrayHasKey('email', $pagedformBody['one']);
+ $this->assertArrayHasKey('date', $pagedformBody['second']);
+
+ // page=one
+ $pagedformResponse = $this->request('GET', 'customername/pagedform/fields?page=one&key=' . $this->apiKey);
+ $pagedformBody = json_decode((string)$pagedformResponse->getBody(), true)['data'];
+ $this->assertArrayNotHasKey('one', $pagedformBody);
+ $this->assertArrayHasKey('name', $pagedformBody);
+ $this->assertArrayHasKey('email', $pagedformBody);
+
+ // page=second
+ $pagedformResponse = $this->request('GET', 'customername/pagedform/fields?page=second&key=' . $this->apiKey);
+ $pagedformBody = json_decode((string)$pagedformResponse->getBody(), true)['data'];
+ $this->assertArrayNotHasKey('second', $pagedformBody);
+ $this->assertArrayHasKey('date', $pagedformBody);
+ }
+}
+