first work on to do orders

This commit is contained in:
2020-04-24 08:10:54 +02:00
parent c6b94aa1f1
commit 0c89550dfe
6 changed files with 163 additions and 5 deletions

View File

@@ -34,7 +34,7 @@ class ToDoItemsTest extends TestCase
'attributes' => [
'data' => [
'name' => $toDo->name,
'order' => 0,
'order' => 1,
]
],
],
@@ -78,6 +78,11 @@ class ToDoItemsTest extends TestCase
[
'data' => [
'to_do_id' => $toDoList->toDos[0]->id,
'attributes' => [
'data' => [
'name' => $toDoList->toDos[0]->name,
]
]
]
]
],
@@ -89,6 +94,87 @@ class ToDoItemsTest extends TestCase
]);
}
/** @test */
public function a_new_to_do_must_have_order_of_the_previous_to_do()
{
$this->actingAs($user = factory(User::class)->create(), 'api');
$toDoList = factory(ToDoList::class)->create(['id' => 123, 'user_id' => $user->id]);
$toDo = factory(ToDo::class)->create(['to_do_list_id' => 123]);
$response = $this->post('/api/to-do-lists/123/to-do', [
'name' => 'New To Do'
])->assertStatus(201);
$toDo = ToDo::first();
$newToDo = ToDo::orderBy('id', 'desc')->first();
$this->assertEquals('New To Do', $newToDo->name);
$this->assertEquals($toDo->order + 1, $newToDo->order);
}
/** @test */
public function a_second_to_do_as_next_order_of_list()
{
$this->actingAs($user = factory(User::class)->create(), 'api');
$toDoList = factory(ToDoList::class)->create(['id' => 123, 'user_id' => $user->id]);
$this->post('/api/to-do-lists/123/to-do', ['name' => 'Test name to do']);
$this->post('/api/to-do-lists/123/to-do', ['name' => 'Test 2 name to do']);
$this->post('/api/to-do-lists/123/to-do', ['name' => 'Test 3 name to do']);
$response = $this->get('/api/to-do-lists/' . $toDoList->id );
$response->assertJson([
'data' => [
'to_do_list_id' => $toDoList->id,
'attributes' => [
'data' => [
'name' => $toDoList->name,
'last_updated' => $toDoList->updated_at->diffForHumans(),
'to_dos' => [
'data' => [
[
'data' => [
'to_do_id' => $toDoList->toDos[0]->id,
'attributes' => [
'data' => [
'name' => $toDoList->toDos[0]->name,
'order' => 1,
]
]
],
],
[
'data' => [
'to_do_id' => $toDoList->toDos[1]->id,
'attributes' => [
'data' => [
'name' => $toDoList->toDos[1]->name,
'order' => 2,
]
]
]
],
[
'data' => [
'to_do_id' => $toDoList->toDos[2]->id,
'attributes' => [
'data' => [
'name' => $toDoList->toDos[2]->name,
'order' => 3,
]
]
]
]
],
'to_dos_count' => 3,
]
]
],
]
]);
}
/** @test */
public function a_to_do_can_be_patch()
{
@@ -101,7 +187,6 @@ class ToDoItemsTest extends TestCase
]);
$toDoList = $toDoList->fresh();
// $toDoList = ToDoList::first();
$response = $this->patch('/api/to-do-lists/123/to-do/'. $toDoList->toDos[0]->id, [
'name' => 'To Do update'
@@ -121,4 +206,47 @@ class ToDoItemsTest extends TestCase
]
]);
}
/** @test */
public function only_the_owner_can_patch_the_to_do()
{
$user = factory(User::class)->create();
$toDoList = factory(ToDoList::class)->create(['id' => 123, 'user_id' => $user->id]);
$toDo = factory(ToDo::class)->create(['to_do_list_id' => 123, 'name' => 'Test name to do']);
$this->actingAs($anotherUser = factory(User::class)->create(), 'api');
$this->patch('/api/to-do-lists/'. $toDoList->id .'/to-do/'. $toDoList->toDos[0]->id, ['name' => 'Name changed'])
->assertStatus(403);
}
/** @test */
public function a_to_do_list_can_be_delete()
{
$this->withoutExceptionHandling();
$this->actingAs($user = factory(User::class)->create(), 'api');
$toDoList = factory(ToDoList::class)->create(['user_id' => $user->id]);
$toDo = factory(ToDo::class)->create(['to_do_list_id' => $toDoList->id]);
$response = $this->delete('/api/to-do-lists/'. $toDoList->id . '/to-do/' . $toDo->id);
$this->assertCount(0, ToDo::all());
$response->assertStatus(204);
}
/** @test */
public function only_the_owner_can_delete_the_to_do_list()
{
$user = factory(User::class)->create();
$toDoList = factory(ToDoList::class)->create(['user_id' => $user->id]);
$toDo = factory(ToDo::class)->create(['to_do_list_id' => $toDoList->id]);
$this->actingAs($anotherUser = factory(User::class)->create(), 'api');
$response = $this->delete('/api/to-do-lists/'. $toDoList->id . '/to-do/' . $toDo->id);
$response->assertStatus(403);
}
}