-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCategoryTest.php
More file actions
94 lines (80 loc) · 2.47 KB
/
CategoryTest.php
File metadata and controls
94 lines (80 loc) · 2.47 KB
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
<?php
namespace Tests\Feature;
use App\Category;
use App\Transaction;
use App\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\Passport\Passport;
use Tests\TestCase;
class CategoryTest extends TestCase
{
use RefreshDatabase;
public function test_users_have_their_own_categories_copies()
{
factory(Category::class, 5)->create();
// TODO replace with user creation endpoint
Passport::actingAs($user = factory(User::class)->create());
$this->assertEquals(5, Category::whereNull('user_id')->count());
$this->assertEquals(5, Category::where('user_id', $user->id)->count());
}
public function test_can_get_categories_list()
{
factory(Category::class, 5)->create();
$this->passportAs($user = factory(User::class)->create())
->get('api/categories')
->assertSuccessful()
->assertJsonPaths('*.user_id', $user->id)
->assertJsonCount(5)
->assertJsonStructure([
[
'id',
'name',
'type',
],
]);
}
/**
* @dataProvider typesCountProvider
*
* @param int $type
* @param int $count
*/
public function test_can_filter_categories_per_type($type, $count)
{
factory(Category::class, $count)->attachTo([
'type' => $type,
], $user = factory(User::class)->create());
$this->passportAs($user)
->get('api/categories?type='.$type)
->assertSuccessful()
->assertJsonCount($count);
}
public function test_can_sort_categories_based_on_usage()
{
$transactionsPerCategory = [
1 => 5,
2 => 3,
3 => 7,
];
$user = factory(User::class)->create();
foreach ($transactionsPerCategory as $count) {
factory(Transaction::class, $count)->attachTo([
'category_id' => factory(Category::class)->attachTo([], $user)->id,
], $user);
}
$this->passportAs($user)
->get('api/categories?sort=usage')
->assertSuccessful()
->assertJsonPath('*.id', [3, 1, 2]);
}
public function typesCountProvider()
{
return [
// type, count
[Category::INCOME_TYPE, 3],
[Category::EXPENSES_TYPE, 2],
[Category::TRANSFER_TYPE, 4],
[999, 0],
];
}
}