Improve test coverage for API.

This commit is contained in:
James Cole
2018-12-16 13:55:19 +01:00
parent 746bd2ce92
commit 89942ee49c
32 changed files with 1534 additions and 823 deletions

View File

@@ -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);
}
}