diff --git a/app/Http/Controllers/KasMasukController.php b/app/Http/Controllers/KasMasukController.php new file mode 100644 index 0000000..bf9d32e --- /dev/null +++ b/app/Http/Controllers/KasMasukController.php @@ -0,0 +1,71 @@ +json(KasMasuk::all(), Response::HTTP_OK); + } + + // **2. Create New Entry** + public function store(Request $request) + { + $request->validate([ + 'tanggal' => 'required|date', + 'deskripsi' => 'required|string', + 'jumlah' => 'required|numeric|min:0', + ]); + + $kasMasuk = KasMasuk::create($request->all()); + + return response()->json($kasMasuk, Response::HTTP_CREATED); + } + + // **3. Show Specific Entry** + public function show($id) + { + $kasMasuk = KasMasuk::find($id); + if (!$kasMasuk) { + return response()->json(['message' => 'Data tidak ditemukan'], Response::HTTP_NOT_FOUND); + } + return response()->json($kasMasuk, Response::HTTP_OK); + } + + // **4. Update Entry** + public function update(Request $request, $id) + { + $kasMasuk = KasMasuk::find($id); + if (!$kasMasuk) { + return response()->json(['message' => 'Data tidak ditemukan'], Response::HTTP_NOT_FOUND); + } + + $request->validate([ + 'tanggal' => 'sometimes|date', + 'deskripsi' => 'sometimes|string', + 'jumlah' => 'sometimes|numeric|min:0', + ]); + + $kasMasuk->update($request->all()); + + return response()->json($kasMasuk, Response::HTTP_OK); + } + + // **5. Delete Entry** + public function destroy($id) + { + $kasMasuk = KasMasuk::find($id); + if (!$kasMasuk) { + return response()->json(['message' => 'Data tidak ditemukan'], Response::HTTP_NOT_FOUND); + } + + $kasMasuk->delete(); + return response()->json(['message' => 'Data berhasil dihapus'], Response::HTTP_OK); + } +} \ No newline at end of file diff --git a/app/Models/KasMasuk.php b/app/Models/KasMasuk.php new file mode 100644 index 0000000..72bca8c --- /dev/null +++ b/app/Models/KasMasuk.php @@ -0,0 +1,13 @@ + + */ +class KasMasukFactory extends Factory +{ + public function definition() + { + return [ + 'tanggal' => $this->faker->date(), + 'deskripsi' => $this->faker->sentence(), + 'jumlah' => $this->faker->randomNumber(6), + ]; + } +} diff --git a/database/migrations/2025_02_13_134943_create_kas_masuks_table.php b/database/migrations/2025_02_13_134943_create_kas_masuks_table.php new file mode 100644 index 0000000..397a4bb --- /dev/null +++ b/database/migrations/2025_02_13_134943_create_kas_masuks_table.php @@ -0,0 +1,22 @@ +id(); + $table->date('tanggal'); + $table->string('deskripsi'); + $table->decimal('jumlah', 15, 2); + $table->timestamps(); + }); + } + + public function down() + { + Schema::dropIfExists('kas_masuks'); + } +}; diff --git a/routes/api.php b/routes/api.php index 889937e..df1ad13 100644 --- a/routes/api.php +++ b/routes/api.php @@ -2,6 +2,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; +use App\Http\Controllers\KasMasukController; /* |-------------------------------------------------------------------------- @@ -17,3 +18,6 @@ use Illuminate\Support\Facades\Route; Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); }); + +Route::apiResource('kas-masuk', KasMasukController::class); + diff --git a/tests/Unit/KasMasukTest.php b/tests/Unit/KasMasukTest.php new file mode 100644 index 0000000..2169bfc --- /dev/null +++ b/tests/Unit/KasMasukTest.php @@ -0,0 +1,77 @@ +count(3)->create(); + + $response = $this->getJson('/api/kas-masuk'); + + $response->assertStatus(200) + ->assertJsonCount(3); + } + + /** @test */ + public function it_can_create_a_kas_masuk_entry() + { + $data = [ + 'tanggal' => now()->toDateString(), + 'deskripsi' => 'Pemasukan dari pelanggan', + 'jumlah' => 1000000, + ]; + + $response = $this->postJson('/api/kas-masuk', $data); + + $response->assertStatus(201) + ->assertJsonFragment(['deskripsi' => 'Pemasukan dari pelanggan']); + } + + /** @test */ + public function it_can_get_a_specific_kas_masuk_entry() + { + $kasMasuk = KasMasuk::factory()->create(); + + $response = $this->getJson("/api/kas-masuk/{$kasMasuk->id}"); + + $response->assertStatus(200) + ->assertJsonFragment(['deskripsi' => $kasMasuk->deskripsi]); + } + + /** @test */ + public function it_can_update_a_kas_masuk_entry() + { + $kasMasuk = KasMasuk::factory()->create(); + + $updateData = [ + 'deskripsi' => 'Pemasukan dari investasi', + 'jumlah' => 2000000 + ]; + + $response = $this->putJson("/api/kas-masuk/{$kasMasuk->id}", $updateData); + + $response->assertStatus(200) + ->assertJsonFragment(['deskripsi' => 'Pemasukan dari investasi']); + } + + /** @test */ + public function it_can_delete_a_kas_masuk_entry() + { + $kasMasuk = KasMasuk::factory()->create(); + + $response = $this->deleteJson("/api/kas-masuk/{$kasMasuk->id}"); + + $response->assertStatus(200); + $this->assertDatabaseMissing('kas_masuks', ['id' => $kasMasuk->id]); + } +}