Skip to content

Commit d1ee790

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

2 files changed

Lines changed: 115 additions & 0 deletions

File tree

src/Messaging/Controller/TemplateController.php

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,98 @@ 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(
140+
type: 'array',
141+
items: new OA\Items(
142+
properties: [
143+
new OA\Property(property: 'key', type: 'string', example: 'system'),
144+
new OA\Property(property: 'name', type: 'string', example: 'System'),
145+
new OA\Property(property: 'description', type: 'string', example: 'Default system email'),
146+
new OA\Property(property: 'file', type: 'string', example: 'system.html'),
147+
],
148+
type: 'object'
149+
) )
150+
),
151+
new OA\Response(
152+
response: 403,
153+
description: 'Failure',
154+
content: new OA\JsonContent(ref: '#/components/schemas/UnauthorizedResponse')
155+
)
156+
]
157+
)]
158+
public function listDefaults(Request $request): JsonResponse
159+
{
160+
$this->requireAuthentication($request);
161+
162+
return $this->json($this->templateManager->listDefaults(), Response::HTTP_OK);
163+
}
164+
165+
#[Route('/defaults/{key}', name: 'create_default', methods: ['POST'])]
166+
#[OA\Post(
167+
path: '/api/v2/templates/defaults/{key}',
168+
description: '🚧 **Status: Beta** – This method is under development. Avoid using in production. ' .
169+
'Creates a new template from a default template key.',
170+
summary: 'Creates a template from a default template.',
171+
tags: ['templates'],
172+
parameters: [
173+
new OA\Parameter(
174+
name: 'php-auth-pw',
175+
description: 'Session key obtained from login',
176+
in: 'header',
177+
required: true,
178+
schema: new OA\Schema(type: 'string')
179+
),
180+
new OA\Parameter(
181+
name: 'key',
182+
description: 'Default template key',
183+
in: 'path',
184+
required: true,
185+
schema: new OA\Schema(type: 'string', enum: ['system', 'responsive'])
186+
),
187+
],
188+
responses: [
189+
new OA\Response(
190+
response: 201,
191+
description: 'Success',
192+
content: new OA\JsonContent(ref: '#/components/schemas/Template')
193+
),
194+
new OA\Response(
195+
response: 403,
196+
description: 'Failure',
197+
content: new OA\JsonContent(ref: '#/components/schemas/UnauthorizedResponse')
198+
)
199+
]
200+
)]
201+
public function createDefaultTemplate(Request $request, string $key): JsonResponse
202+
{
203+
$this->requireAuthentication($request);
204+
205+
$template = $this->templateManager->createDefaultTemplate($key);
206+
$this->entityManager->flush();
207+
208+
return $this->json($this->normalizer->normalize($template), Response::HTTP_CREATED);
209+
}
210+
119211
#[Route('/{templateId}', name: 'get_one', requirements: ['templateId' => '\d+'], methods: ['GET'])]
120212
#[OA\Get(
121213
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)