Skip to content

Commit b26bb2f

Browse files
committed
Add: Default templates endpoints
1 parent 93cc52e commit b26bb2f

2 files changed

Lines changed: 105 additions & 0 deletions

File tree

src/Messaging/Controller/TemplateController.php

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,88 @@ className: Template::class,
116116
);
117117
}
118118

119+
#[Route('/defaults', name: 'get_defaults', methods: ['GET'])]
120+
#[OA\Get(
121+
path: '/api/v2/templates/defaults',
122+
description: '🚧 **Status: Beta** – This method is under development. Avoid using in production. ' .
123+
'Returns a JSON list of all available default templates.',
124+
summary: 'Gets a list of all default templates.',
125+
tags: ['templates'],
126+
parameters: [
127+
new OA\Parameter(
128+
name: 'php-auth-pw',
129+
description: 'Session key obtained from login',
130+
in: 'header',
131+
required: true,
132+
schema: new OA\Schema(type: 'string')
133+
),
134+
],
135+
responses: [
136+
new OA\Response(
137+
response: 200,
138+
description: 'Success',
139+
content: new OA\JsonContent(type: 'array', items: new OA\Items(type: 'object'))
140+
),
141+
new OA\Response(
142+
response: 403,
143+
description: 'Failure',
144+
content: new OA\JsonContent(ref: '#/components/schemas/UnauthorizedResponse')
145+
)
146+
]
147+
)]
148+
public function listDefaults(Request $request): JsonResponse
149+
{
150+
$this->requireAuthentication($request);
151+
152+
return $this->json($this->templateManager->listDefaults(), Response::HTTP_OK);
153+
}
154+
155+
#[Route('/defaults/{key}', name: 'create_default', methods: ['POST'])]
156+
#[OA\Post(
157+
path: '/api/v2/templates/defaults/{key}',
158+
description: '🚧 **Status: Beta** – This method is under development. Avoid using in production. ' .
159+
'Creates a new template from a default template key.',
160+
summary: 'Creates a template from a default template.',
161+
tags: ['templates'],
162+
parameters: [
163+
new OA\Parameter(
164+
name: 'php-auth-pw',
165+
description: 'Session key obtained from login',
166+
in: 'header',
167+
required: true,
168+
schema: new OA\Schema(type: 'string')
169+
),
170+
new OA\Parameter(
171+
name: 'key',
172+
description: 'Default template key',
173+
in: 'path',
174+
required: true,
175+
schema: new OA\Schema(type: 'string', enum: ['system', 'responsive'])
176+
),
177+
],
178+
responses: [
179+
new OA\Response(
180+
response: 201,
181+
description: 'Success',
182+
content: new OA\JsonContent(ref: '#/components/schemas/Template')
183+
),
184+
new OA\Response(
185+
response: 403,
186+
description: 'Failure',
187+
content: new OA\JsonContent(ref: '#/components/schemas/UnauthorizedResponse')
188+
)
189+
]
190+
)]
191+
public function createDefaultTemplate(Request $request, string $key): JsonResponse
192+
{
193+
$this->requireAuthentication($request);
194+
195+
$template = $this->templateManager->createDefaultTemplate($key);
196+
$this->entityManager->flush();
197+
198+
return $this->json($this->normalizer->normalize($template), Response::HTTP_CREATED);
199+
}
200+
119201
#[Route('/{templateId}', name: 'get_one', requirements: ['templateId' => '\d+'], methods: ['GET'])]
120202
#[OA\Get(
121203
path: '/api/v2/templates/{templateId}',

tests/Integration/Messaging/Controller/TemplateControllerTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,29 @@ public function testGetTemplatesReturnsTemplateData(): void
5757
self::assertArrayHasKey('title', $response['items'][0]);
5858
}
5959

60+
public function testListDefaultTemplatesWithValidSessionKeyReturnsOkay(): void
61+
{
62+
$this->authenticatedJsonRequest('GET', '/api/v2/templates/defaults');
63+
$this->assertHttpOkay();
64+
}
65+
66+
public function testCreateTemplateFromDefaultWithValidSessionKeyReturnsCreated(): void
67+
{
68+
$this->authenticatedJsonRequest('GET', '/api/v2/templates/defaults');
69+
$defaults = $this->getDecodedJsonResponseContent();
70+
71+
self::assertIsArray($defaults);
72+
self::assertNotEmpty($defaults);
73+
self::assertArrayHasKey('key', $defaults[0]);
74+
75+
$this->authenticatedJsonRequest('POST', '/api/v2/templates/defaults/' . $defaults[0]['key']);
76+
$this->assertHttpCreated();
77+
78+
$response = $this->getDecodedJsonResponseContent();
79+
self::assertArrayHasKey('id', $response);
80+
self::assertArrayHasKey('title', $response);
81+
}
82+
6083
public function testGetTemplateWithoutSessionKeyReturnsForbidden(): void
6184
{
6285
$this->loadFixtures([TemplateFixture::class]);

0 commit comments

Comments
 (0)