File size: 5,364 Bytes
d2897cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?php

declare(strict_types=1);

namespace Mautic\FormBundle\Tests\Model;

use Mautic\CoreBundle\Test\MauticMysqlTestCase;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class FormModelFunctionalTest extends MauticMysqlTestCase
{
    protected $useCleanupRollback = false;

    public function testPopulateValuesWithGetParameters(): void
    {
        $formId     = $this->createForm();
        $crawler    = $this->client->request(
            Request::METHOD_GET,
            "/s/forms/preview/{$formId}[email protected]&firstname=test&description=test-test&checkbox=val1|val3"
        );
        $inputValue = $crawler->filter('input[type=email]')->attr('value');
        self::assertSame('[email protected]', $inputValue);
        $inputValue = $crawler->filter('input[type=text]')->attr('value');
        self::assertSame('test', $inputValue);
        $inputValue = $crawler->filter('textarea[name^=mauticform]')->html();
        self::assertSame('test-test', $inputValue);
        $inputValue = $crawler->filter('textarea[name^=mauticform]')->html();
        self::assertSame('test-test', $inputValue);
        $inputValue = $crawler->filter('input[value^=val1]')->attr('checked');
        self::assertSame('checked', $inputValue);
        $inputValue = $crawler->filter('input[value^=val2]')->attr('checked');
        self::assertNull($inputValue);
        $inputValue = $crawler->filter('input[value^=val3]')->attr('checked');
        self::assertSame('checked', $inputValue);

        $this->createPage($formId);
        $crawler    = $this->client->request(Request::METHOD_GET, '/test-page?email=test%[email protected]&firstname=test');
        $inputValue = $crawler->filter('input[type=email]')->attr('value');
        self::assertSame('[email protected]', $inputValue);
        $inputValue = $crawler->filter('input[type=text]')->attr('value');
        self::assertSame('test', $inputValue);
    }

    private function createForm(): int
    {
        $formPayload = [
            'name'        => 'Test Form',
            'formType'    => 'standalone',
            'description' => 'API test',
            'fields'      => [
                [
                    'label'     => 'firstname',
                    'alias'     => 'firstname',
                    'type'      => 'text',
                ],
                [
                    'label'     => 'email',
                    'alias'     => 'email',
                    'type'      => 'email',
                    'leadField' => 'email',
                ],
                [
                    'label'     => 'description',
                    'alias'     => 'description',
                    'type'      => 'textarea',
                ],
                [
                    'label'          => 'checkbox',
                    'alias'          => 'checkbox',
                    'type'           => 'checkboxgrp',
                    'properties'     => [
                        'syncList'   => 0,
                        'optionlist' => [
                            'list'   => [
                                [
                                    'label' => 'val1',
                                    'value' => 'val1',
                                ],
                                [
                                    'label' => 'val2',
                                    'value' => 'val2',
                                ],
                                [
                                    'label' => 'val3',
                                    'value' => 'val3',
                                ],
                            ],
                        ],
                        'labelAttributes' => null,
                    ],
                ],
                [
                    'label'     => 'Submit',
                    'alias'     => 'submit',
                    'type'      => 'button',
                ],
            ],
            'postAction'  => 'return',
        ];

        $this->client->request('POST', '/api/forms/new', $formPayload);
        $clientResponse = $this->client->getResponse();
        $this->assertEquals(Response::HTTP_CREATED, $clientResponse->getStatusCode(), $clientResponse->getContent());
        $response = json_decode($clientResponse->getContent(), true);

        return $response['form']['id'];
    }

    private function createPage(int $formId): void
    {
        $pagePayload = [
            'title'        => 'Test Page',
            'alias'        => 'test-page',
            'description'  => 'This is my first page created via API.',
            'isPublished'  => true,
            'customHtml'   => '<!DOCTYPE html>
             <html>
                <head>
                    <title>Test Page</title>
                    <meta name="description" content="Test Page" />
                </head>
                <body>
                    <div class="container">
                        <div>{form='.$formId.'}</div>
                    </div>
                </body>
            </html>',
        ];

        $this->client->request('POST', '/api/pages/new', $pagePayload);
        $clientResponse = $this->client->getResponse();
        $this->assertEquals(Response::HTTP_CREATED, $clientResponse->getStatusCode(), $clientResponse->getContent());
    }
}