Merge pull request 'Fix acceptance-criteria toggle request loop' (#74) from koda/fix-acceptance-criteria-toggle-loop into main
Reviewed-on: OpenSource/KanbanGit#74
This commit was merged in pull request #74.
This commit is contained in:
@@ -12,6 +12,7 @@ use App\Http\Requests\StoreProjectTicketRequest;
|
|||||||
use App\Http\Requests\UpdateProjectTicketRequest;
|
use App\Http\Requests\UpdateProjectTicketRequest;
|
||||||
use App\Models\Project;
|
use App\Models\Project;
|
||||||
use App\Models\Ticket;
|
use App\Models\Ticket;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
@@ -85,7 +86,7 @@ class ProjectTicketController extends Controller
|
|||||||
UpdateProjectTicketRequest $request,
|
UpdateProjectTicketRequest $request,
|
||||||
Project $project,
|
Project $project,
|
||||||
Ticket $ticket,
|
Ticket $ticket,
|
||||||
): RedirectResponse {
|
): RedirectResponse|JsonResponse {
|
||||||
|
|
||||||
$user = $request->user();
|
$user = $request->user();
|
||||||
abort_unless(
|
abort_unless(
|
||||||
@@ -105,6 +106,13 @@ class ProjectTicketController extends Controller
|
|||||||
? "{$ticket->ticket_key} was updated."
|
? "{$ticket->ticket_key} was updated."
|
||||||
: 'No ticket changes were detected.';
|
: 'No ticket changes were detected.';
|
||||||
|
|
||||||
|
if ($request->expectsJson()) {
|
||||||
|
return response()->json([
|
||||||
|
'message' => $statusMessage,
|
||||||
|
'updated' => $wasUpdated,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
return to_route('projects.tickets.show', [$project, $ticket])
|
return to_route('projects.tickets.show', [$project, $ticket])
|
||||||
->with('status', $statusMessage);
|
->with('status', $statusMessage);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -414,7 +414,7 @@ const persistAcceptanceCriteriaToggle = async (
|
|||||||
method: 'PATCH',
|
method: 'PATCH',
|
||||||
credentials: 'same-origin',
|
credentials: 'same-origin',
|
||||||
headers: {
|
headers: {
|
||||||
Accept: 'text/html, application/xhtml+xml',
|
Accept: 'application/json',
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'X-CSRF-TOKEN': csrfToken ?? '',
|
'X-CSRF-TOKEN': csrfToken ?? '',
|
||||||
'X-Requested-With': 'XMLHttpRequest',
|
'X-Requested-With': 'XMLHttpRequest',
|
||||||
|
|||||||
@@ -661,6 +661,52 @@ class ProjectTicketControllerTest extends TestCase
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_ticket_update_returns_json_for_ajax_requests(): void
|
||||||
|
{
|
||||||
|
$editor = User::factory()->create();
|
||||||
|
$project = Project::factory()->create([
|
||||||
|
'key' => 'CORE',
|
||||||
|
]);
|
||||||
|
|
||||||
|
app(InitializeProjectTicketMetadata::class)->handle($project);
|
||||||
|
|
||||||
|
$priority = $project->ticketPriorities()->firstOrFail();
|
||||||
|
$ticketType = $this->nonParentType($project);
|
||||||
|
$ticket = Ticket::factory()->create([
|
||||||
|
'project_id' => $project->id,
|
||||||
|
'sequence_number' => 1,
|
||||||
|
'ticket_key' => 'CORE-1',
|
||||||
|
'ticket_priority_id' => $priority->id,
|
||||||
|
'ticket_type_id' => $ticketType->id,
|
||||||
|
'title' => 'Acceptance criteria toggle test',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->syncProjectPermissions($project, $editor, ['write', 'view']);
|
||||||
|
|
||||||
|
$this->actingAs($editor)
|
||||||
|
->withHeaders([
|
||||||
|
'Accept' => 'application/json',
|
||||||
|
'X-Requested-With' => 'XMLHttpRequest',
|
||||||
|
])
|
||||||
|
->patch(route('projects.tickets.update', [$project, $ticket]), [
|
||||||
|
'acceptance_criteria' => [],
|
||||||
|
'blocked_comment' => $ticket->blocked_comment,
|
||||||
|
'description' => $ticket->description,
|
||||||
|
'field_values' => [],
|
||||||
|
'is_blocked' => $ticket->is_blocked,
|
||||||
|
'parent_ticket_id' => $ticket->parent_ticket_id,
|
||||||
|
'story_points' => $ticket->story_points,
|
||||||
|
'ticket_priority_id' => $priority->id,
|
||||||
|
'ticket_type_id' => $ticketType->id,
|
||||||
|
'title' => $ticket->title,
|
||||||
|
])
|
||||||
|
->assertOk()
|
||||||
|
->assertJson([
|
||||||
|
'message' => 'No ticket changes were detected.',
|
||||||
|
'updated' => false,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure non-parent tickets cannot be assigned as a parent target.
|
* Ensure non-parent tickets cannot be assigned as a parent target.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user