mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Improve test coverage for API.
This commit is contained in:
@@ -31,6 +31,8 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||
use FireflyIII\Transformers\CategoryTransformer;
|
||||
use FireflyIII\Transformers\TransactionTransformer;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Support\Collection;
|
||||
use Laravel\Passport\Passport;
|
||||
@@ -71,7 +73,7 @@ class CategoryControllerTest extends TestCase
|
||||
$category = $this->user()->categories()->first();
|
||||
|
||||
// call API
|
||||
$response = $this->delete('/api/v1/categories/' . $category->id);
|
||||
$response = $this->delete(route('api.v1.categories.delete', $category->id));
|
||||
$response->assertStatus(204);
|
||||
}
|
||||
|
||||
@@ -82,18 +84,19 @@ class CategoryControllerTest extends TestCase
|
||||
*/
|
||||
public function testIndex(): void
|
||||
{
|
||||
$categories = $this->user()->categories()->get();
|
||||
// mock stuff:
|
||||
$repository = $this->mock(CategoryRepositoryInterface::class);
|
||||
$repository = $this->mock(CategoryRepositoryInterface::class);
|
||||
$transformer = $this->mock(CategoryTransformer::class);
|
||||
|
||||
// mock transformer
|
||||
$transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once();
|
||||
|
||||
// mock calls:
|
||||
$repository->shouldReceive('setUser')->once();
|
||||
$repository->shouldReceive('getCategories')->once()->andReturn($categories);
|
||||
$repository->shouldReceive('setUser')->atLeast()->once();
|
||||
$repository->shouldReceive('getCategories')->once()->andReturn(new Collection);
|
||||
|
||||
// call API
|
||||
$response = $this->get('/api/v1/categories');
|
||||
$response = $this->get(route('api.v1.categories.index'));
|
||||
$response->assertStatus(200);
|
||||
$response->assertSee($categories->first()->name);
|
||||
$response->assertHeader('Content-Type', 'application/vnd.api+json');
|
||||
}
|
||||
|
||||
@@ -106,15 +109,21 @@ class CategoryControllerTest extends TestCase
|
||||
{
|
||||
$category = $this->user()->categories()->first();
|
||||
// mock stuff:
|
||||
$repository = $this->mock(CategoryRepositoryInterface::class);
|
||||
$repository = $this->mock(CategoryRepositoryInterface::class);
|
||||
$transformer = $this->mock(CategoryTransformer::class);
|
||||
|
||||
// mock calls:
|
||||
$repository->shouldReceive('setUser')->once();
|
||||
// mock transformer
|
||||
$transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once();
|
||||
$transformer->shouldReceive('setCurrentScope')->withAnyArgs()->atLeast()->once()->andReturnSelf();
|
||||
$transformer->shouldReceive('getDefaultIncludes')->withAnyArgs()->atLeast()->once()->andReturn([]);
|
||||
$transformer->shouldReceive('getAvailableIncludes')->withAnyArgs()->atLeast()->once()->andReturn([]);
|
||||
$transformer->shouldReceive('transform')->atLeast()->once()->andReturn(['id' => 5]);
|
||||
|
||||
// call API
|
||||
$response = $this->get('/api/v1/categories/' . $category->id);
|
||||
$response = $this->get(route('api.v1.categories.show', [$category->id]));
|
||||
$response->assertStatus(200);
|
||||
$response->assertSee($category->name);
|
||||
$response->assertHeader('Content-Type', 'application/vnd.api+json');
|
||||
}
|
||||
|
||||
@@ -130,7 +139,15 @@ class CategoryControllerTest extends TestCase
|
||||
$category = $this->user()->categories()->first();
|
||||
|
||||
// mock stuff:
|
||||
$repository = $this->mock(CategoryRepositoryInterface::class);
|
||||
$repository = $this->mock(CategoryRepositoryInterface::class);
|
||||
$transformer = $this->mock(CategoryTransformer::class);
|
||||
|
||||
// mock transformer
|
||||
$transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once();
|
||||
$transformer->shouldReceive('setCurrentScope')->withAnyArgs()->atLeast()->once()->andReturnSelf();
|
||||
$transformer->shouldReceive('getDefaultIncludes')->withAnyArgs()->atLeast()->once()->andReturn([]);
|
||||
$transformer->shouldReceive('getAvailableIncludes')->withAnyArgs()->atLeast()->once()->andReturn([]);
|
||||
$transformer->shouldReceive('transform')->atLeast()->once()->andReturn(['id' => 5]);
|
||||
|
||||
// mock calls:
|
||||
$repository->shouldReceive('setUser')->once();
|
||||
@@ -143,10 +160,9 @@ class CategoryControllerTest extends TestCase
|
||||
];
|
||||
|
||||
// test API
|
||||
$response = $this->post('/api/v1/categories', $data);
|
||||
$response = $this->post(route('api.v1.categories.store'), $data);
|
||||
$response->assertStatus(200);
|
||||
$response->assertJson(['data' => ['type' => 'categories', 'links' => true],]);
|
||||
$response->assertSee($category->name); // the amount
|
||||
$response->assertHeader('Content-Type', 'application/vnd.api+json');
|
||||
}
|
||||
|
||||
@@ -158,6 +174,7 @@ class CategoryControllerTest extends TestCase
|
||||
public function testTransactionsBasic(): void
|
||||
{
|
||||
$category = $this->user()->categories()->first();
|
||||
$transformer = $this->mock(TransactionTransformer::class);
|
||||
$repository = $this->mock(JournalRepositoryInterface::class);
|
||||
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
|
||||
$collector = $this->mock(TransactionCollectorInterface::class);
|
||||
@@ -183,7 +200,8 @@ class CategoryControllerTest extends TestCase
|
||||
$collector->shouldReceive('getPaginatedTransactions')->andReturn($paginator);
|
||||
|
||||
|
||||
// mock some calls:
|
||||
// mock transformer
|
||||
$transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once();
|
||||
|
||||
// test API
|
||||
$response = $this->get(route('api.v1.categories.transactions', [$category->id]));
|
||||
@@ -208,6 +226,7 @@ class CategoryControllerTest extends TestCase
|
||||
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
|
||||
$billRepos = $this->mock(BillRepositoryInterface::class);
|
||||
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
|
||||
$transformer = $this->mock(TransactionTransformer::class);
|
||||
|
||||
$categoryRepos->shouldReceive('setUser')->atLeast()->once();
|
||||
$billRepos->shouldReceive('setUser');
|
||||
@@ -226,6 +245,9 @@ class CategoryControllerTest extends TestCase
|
||||
$collector->shouldReceive('setRange')->andReturnSelf();
|
||||
$collector->shouldReceive('getPaginatedTransactions')->andReturn($paginator);
|
||||
|
||||
// mock transformer
|
||||
$transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once();
|
||||
|
||||
$response = $this->get(
|
||||
route('api.v1.categories.transactions', [$category->id]) . '?' . http_build_query(['start' => '2018-01-01', 'end' => '2018-01-31'])
|
||||
);
|
||||
@@ -245,11 +267,18 @@ class CategoryControllerTest extends TestCase
|
||||
public function testUpdate(): void
|
||||
{
|
||||
// mock repositories
|
||||
$repository = $this->mock(CategoryRepositoryInterface::class);
|
||||
|
||||
$repository = $this->mock(CategoryRepositoryInterface::class);
|
||||
$transformer = $this->mock(CategoryTransformer::class);
|
||||
/** @var Category $category */
|
||||
$category = $this->user()->categories()->first();
|
||||
|
||||
// mock transformer
|
||||
$transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once();
|
||||
$transformer->shouldReceive('setCurrentScope')->withAnyArgs()->atLeast()->once()->andReturnSelf();
|
||||
$transformer->shouldReceive('getDefaultIncludes')->withAnyArgs()->atLeast()->once()->andReturn([]);
|
||||
$transformer->shouldReceive('getAvailableIncludes')->withAnyArgs()->atLeast()->once()->andReturn([]);
|
||||
$transformer->shouldReceive('transform')->atLeast()->once()->andReturn(['id' => 5]);
|
||||
|
||||
// mock calls:
|
||||
$repository->shouldReceive('setUser');
|
||||
$repository->shouldReceive('update')->once()->andReturn($category);
|
||||
@@ -261,11 +290,10 @@ class CategoryControllerTest extends TestCase
|
||||
];
|
||||
|
||||
// test API
|
||||
$response = $this->put('/api/v1/categories/' . $category->id, $data, ['Accept' => 'application/json']);
|
||||
$response = $this->put(route('api.v1.categories.update', $category->id), $data, ['Accept' => 'application/json']);
|
||||
$response->assertStatus(200);
|
||||
$response->assertJson(['data' => ['type' => 'categories', 'links' => true],]);
|
||||
$response->assertHeader('Content-Type', 'application/vnd.api+json');
|
||||
$response->assertSee($category->name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user