diff --git a/app/Http/Controllers/BankTransactionRuleController.php b/app/Http/Controllers/BankTransactionRuleController.php index c9c8b04f0d9e..1f8ae13b2bd6 100644 --- a/app/Http/Controllers/BankTransactionRuleController.php +++ b/app/Http/Controllers/BankTransactionRuleController.php @@ -30,6 +30,7 @@ use App\Models\BankTransactionRule; use App\Repositories\BankTransactionRepository; use App\Repositories\BankTransactionRuleRepository; use App\Services\Bank\BankMatchingService; +use App\Transformers\BankTransactionRuleTransformer; use App\Transformers\BankTransactionTransformer; use App\Utils\Traits\MakesHash; use Illuminate\Http\Request; @@ -42,7 +43,7 @@ class BankTransactionRuleController extends BaseController protected $entity_type = BankTransactionRule::class; - protected $entity_transformer = BankTransactionTransformer::class; + protected $entity_transformer = BankTransactionRuleTransformer::class; protected $bank_transaction_repo; diff --git a/app/Policies/BankTransactionRulePolicy.php b/app/Policies/BankTransactionRulePolicy.php new file mode 100644 index 000000000000..933aed306f2e --- /dev/null +++ b/app/Policies/BankTransactionRulePolicy.php @@ -0,0 +1,31 @@ +isAdmin(); + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 9b9f779eeb9d..eef723dcaab3 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -15,6 +15,7 @@ use App\Models\Activity; use App\Models\Bank; use App\Models\BankIntegration; use App\Models\BankTransaction; +use App\Models\BankTransactionRule; use App\Models\Client; use App\Models\Company; use App\Models\CompanyGateway; @@ -45,6 +46,7 @@ use App\Models\Webhook; use App\Policies\ActivityPolicy; use App\Policies\BankIntegrationPolicy; use App\Policies\BankTransactionPolicy; +use App\Policies\BankTransactionRulePolicy; use App\Policies\ClientPolicy; use App\Policies\CompanyGatewayPolicy; use App\Policies\CompanyPolicy; @@ -86,6 +88,7 @@ class AuthServiceProvider extends ServiceProvider Activity::class => ActivityPolicy::class, BankIntegration::class => BankIntegrationPolicy::class, BankTransaction::class => BankTransactionPolicy::class, + BankTransactionRule::class => BankTransactionRulePolicy::class, Client::class => ClientPolicy::class, Company::class => CompanyPolicy::class, CompanyToken::class => CompanyTokenPolicy::class, diff --git a/app/Repositories/BankTransactionRuleRepository.php b/app/Repositories/BankTransactionRuleRepository.php index cfc5d7579168..52ae23dbdc8c 100644 --- a/app/Repositories/BankTransactionRuleRepository.php +++ b/app/Repositories/BankTransactionRuleRepository.php @@ -28,7 +28,7 @@ class BankTransactionRuleRepository extends BaseRepository $bank_transaction_rule->save(); - return $bank_transaction_rule + return $bank_transaction_rule; } } diff --git a/database/factories/BankTransactionRuleFactory.php b/database/factories/BankTransactionRuleFactory.php new file mode 100644 index 000000000000..24a5a38fb297 --- /dev/null +++ b/database/factories/BankTransactionRuleFactory.php @@ -0,0 +1,31 @@ +$this->faker->name(), + ]; + } +} diff --git a/routes/api.php b/routes/api.php index d601bf2bd942..e20d1315f290 100644 --- a/routes/api.php +++ b/routes/api.php @@ -14,9 +14,10 @@ use App\Http\Controllers\AccountController; use App\Http\Controllers\ActivityController; use App\Http\Controllers\Auth\ForgotPasswordController; use App\Http\Controllers\Auth\LoginController; -use App\Http\Controllers\Bank\YodleeController; use App\Http\Controllers\BankIntegrationController; use App\Http\Controllers\BankTransactionController; +use App\Http\Controllers\BankTransactionRuleController; +use App\Http\Controllers\Bank\YodleeController; use App\Http\Controllers\BaseController; use App\Http\Controllers\ChartController; use App\Http\Controllers\ClientController; @@ -119,6 +120,9 @@ Route::group(['middleware' => ['throttle:300,1', 'api_db', 'token_auth', 'locale Route::post('bank_transactions/bulk', [BankTransactionController::class, 'bulk'])->name('bank_transactions.bulk'); Route::post('bank_transactions/match', [BankTransactionController::class, 'match'])->name('bank_transactions.match'); + Route::resource('bank_transaction_rules', BankTransactionRuleController::class); // name = (clients. index / create / show / update / destroy / edit + Route::post('bank_transaction_rules/bulk', [BankTransactionRuleController::class, 'bulk'])->name('bank_transaction_rules.bulk'); + Route::post('check_subdomain', [SubdomainController::class, 'index'])->name('check_subdomain'); Route::get('ping', [PingController::class, 'index'])->name('ping'); Route::get('health_check', [PingController::class, 'health'])->name('health_check'); diff --git a/tests/Feature/BankTransactionRuleApiTest.php b/tests/Feature/BankTransactionRuleApiTest.php new file mode 100644 index 000000000000..30ff202c0644 --- /dev/null +++ b/tests/Feature/BankTransactionRuleApiTest.php @@ -0,0 +1,102 @@ +makeTestData(); + + Session::start(); + + $this->faker = \Faker\Factory::create(); + + Model::reguard(); + } + + public function testBankTransactionRuleGet() + { + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->get('/api/v1/bank_transaction_rules/'.$this->encodePrimaryKey($this->bank_transaction_rule->id)); + + $response->assertStatus(200); + } + + public function testBankTransactionRuleArchived() + { + $data = [ + 'ids' => [$this->encodePrimaryKey($this->bank_transaction_rule->id)], + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/bank_transaction_rules/bulk?action=archive', $data); + + $arr = $response->json(); + + $this->assertNotNull($arr['data'][0]['archived_at']); + } + + public function testBankTransactionRuleRestored() + { + $data = [ + 'ids' => [$this->encodePrimaryKey($this->bank_transaction_rule->id)], + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/bank_transaction_rules/bulk?action=restore', $data); + + $arr = $response->json(); + + $this->assertEquals(0, $arr['data'][0]['archived_at']); + } + + public function testBankTransactionRuleDeleted() + { + $data = [ + 'ids' => [$this->encodePrimaryKey($this->bank_transaction_rule->id)], + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/bank_transaction_rules/bulk?action=delete', $data); + + $arr = $response->json(); + + $this->assertTrue($arr['data'][0]['is_deleted']); + } +} diff --git a/tests/MockAccountData.php b/tests/MockAccountData.php index 0ccb86849bc7..2c62a670e04c 100644 --- a/tests/MockAccountData.php +++ b/tests/MockAccountData.php @@ -26,6 +26,7 @@ use App\Jobs\Company\CreateCompanyTaskStatuses; use App\Models\Account; use App\Models\BankIntegration; use App\Models\BankTransaction; +use App\Models\BankTransactionRule; use App\Models\Client; use App\Models\ClientContact; use App\Models\Company; @@ -153,6 +154,11 @@ trait MockAccountData */ public $bank_transaction; + /** + * @var + */ + public $bank_transaction_rule; + /** * @var */ @@ -572,6 +578,11 @@ trait MockAccountData 'bank_integration_id' => $this->bank_integration->id, ]); + $this->bank_transaction_rule = BankTransactionRule::factory()->create([ + 'user_id' => $user_id, + 'company_id' => $this->company->id, + ]); + $invitations = CreditInvitation::whereCompanyId($this->credit->company_id) ->whereCreditId($this->credit->id);