mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-28 12:11:08 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			627 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			627 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace Tests\Feature;
 | |
| 
 | |
| use Tests\TestCase;
 | |
| use Illuminate\Foundation\Testing\WithFaker;
 | |
| use Illuminate\Foundation\Testing\RefreshDatabase;
 | |
| use Crater\User;
 | |
| use Crater\Estimate;
 | |
| use Crater\Invoice;
 | |
| use Crater\EstimateItem;
 | |
| use Crater\Tax;
 | |
| use Laravel\Passport\Passport;
 | |
| use SettingsSeeder;
 | |
| 
 | |
| class EstimateTest extends TestCase
 | |
| {
 | |
|     use RefreshDatabase;
 | |
| 
 | |
|     protected $user;
 | |
| 
 | |
|     public function setUp(): void
 | |
|     {
 | |
|         parent::setUp();
 | |
|         $this->seed();
 | |
|         $this->seed(SettingsSeeder::class);
 | |
|         $user = User::find(1);
 | |
|         $this->withHeaders([
 | |
|             'company' => $user->company_id,
 | |
|         ]);
 | |
|         Passport::actingAs(
 | |
|             $user,
 | |
|             ['*']
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testGetEstimates()
 | |
|     {
 | |
|         $response = $this->json('GET', 'api/estimates?page=1');
 | |
| 
 | |
|         $response->assertOk();
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testGetCreateEstimateData()
 | |
|     {
 | |
|         $response = $this->json('GET', 'api/estimates/create');
 | |
| 
 | |
|         $response->assertOk();
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateEstimate()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->raw([
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ],
 | |
|             'taxes' => [
 | |
|                 factory(Tax::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates', $estimate);
 | |
| 
 | |
|         $newEstimate = $response->decodeResponseJson()['estimate'];
 | |
| 
 | |
|         $response->assertOk();
 | |
|         $this->assertEquals($estimate['estimate_number'], $newEstimate['estimate_number']);
 | |
|         $this->assertEquals($estimate['user_id'], $newEstimate['user_id']);
 | |
|         $this->assertEquals($estimate['estimate_template_id'], $newEstimate['estimate_template_id']);
 | |
|         $this->assertEquals($estimate['sub_total'], $newEstimate['sub_total']);
 | |
|         $this->assertEquals($estimate['total'], $newEstimate['total']);
 | |
|         $this->assertEquals($estimate['discount'], $newEstimate['discount']);
 | |
|         $this->assertEquals($estimate['discount_type'], $newEstimate['discount_type']);
 | |
|         $this->assertEquals($estimate['discount_val'], $newEstimate['discount_val']);
 | |
|         $this->assertEquals($estimate['tax'], $newEstimate['tax']);
 | |
|         $this->assertEquals($estimate['notes'], $newEstimate['notes']);
 | |
|         $this->assertEquals($estimate['items'][0]['name'], $newEstimate['items'][0]['name']);
 | |
|         $this->assertEquals($estimate['items'][0]['description'], $newEstimate['items'][0]['description']);
 | |
|         $this->assertEquals($estimate['items'][0]['price'], $newEstimate['items'][0]['price']);
 | |
|         $this->assertEquals($estimate['items'][0]['quantity'], $newEstimate['items'][0]['quantity']);
 | |
|         $this->assertEquals($estimate['items'][0]['discount_type'], $newEstimate['items'][0]['discount_type']);
 | |
|         $this->assertEquals($estimate['items'][0]['discount'], $newEstimate['items'][0]['discount']);
 | |
|         $this->assertEquals($estimate['items'][0]['total'], $newEstimate['items'][0]['total']);
 | |
|         $this->assertEquals($estimate['taxes'][0]['tax_type_id'], $newEstimate['taxes'][0]['tax_type_id']);
 | |
|         $this->assertEquals($estimate['taxes'][0]['percent'], $newEstimate['taxes'][0]['percent']);
 | |
|         $this->assertEquals($estimate['taxes'][0]['amount'], $newEstimate['taxes'][0]['amount']);
 | |
|         $this->assertEquals($estimate['taxes'][0]['name'], $newEstimate['taxes'][0]['name']);
 | |
|         $this->assertEquals($newEstimate['id'], $newEstimate['taxes'][0]['estimate_id']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateEstimateEstimateDateRequired()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->raw([
 | |
|             'estimate_date' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates', $estimate);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['estimate_date']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateEstimateExpiryDateRequired()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->raw([
 | |
|             'expiry_date' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates', $estimate);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['expiry_date']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateEstimateRequiresEstimateNumber()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->raw([
 | |
|             'estimate_number' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates', $estimate);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['estimate_number']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateEstimateRequiresUser()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->raw([
 | |
|             'user_id' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates', $estimate);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['user_id']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateEstimateRequiresDiscount()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->raw([
 | |
|             'discount' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates', $estimate);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['discount']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateEstimateRequiresTemplate()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->raw([
 | |
|             'estimate_template_id' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates', $estimate);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['estimate_template_id']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateEstimateRequiresItems()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->raw(['items' => []]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates', $estimate);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['items']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateEstimateRequiresItemsName()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->raw([
 | |
|             'items' => [factory(EstimateItem::class)->raw(['name' => ''])]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates', $estimate);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['items.0.name']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateEstimateRequiresItemsQuantity()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->raw([
 | |
|             'items' => [factory(EstimateItem::class)->raw(['quantity' => null])]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates', $estimate);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['items.0.quantity']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateEstimateRequiresItemsPrice()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->raw([
 | |
|             'items' => [factory(EstimateItem::class)->raw(['price' => null])]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates', $estimate);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['items.0.price']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testGetEditEstimateData()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('GET', 'api/estimates/'.$estimate->id.'/edit');
 | |
| 
 | |
|         $response->assertOk();
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testUpdateEstimate()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $estimate2 = factory(Estimate::class)->raw([
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ],
 | |
|             'taxes' => [
 | |
|                 factory(Tax::class)->raw([
 | |
|                     'tax_type_id' => $estimate->taxes[0]->tax_type_id
 | |
|                 ])
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('PUT', 'api/estimates/'.$estimate->id, $estimate2);
 | |
| 
 | |
|         $newEstimate = $response->decodeResponseJson()['estimate'];
 | |
| 
 | |
|         $response->assertOk();
 | |
|         $this->assertEquals($estimate2['estimate_number'], $newEstimate['estimate_number']);
 | |
|         $this->assertEquals($estimate2['user_id'], $newEstimate['user_id']);
 | |
|         $this->assertEquals($estimate2['estimate_template_id'], $newEstimate['estimate_template_id']);
 | |
|         $this->assertEquals($estimate2['sub_total'], $newEstimate['sub_total']);
 | |
|         $this->assertEquals($estimate2['total'], $newEstimate['total']);
 | |
|         $this->assertEquals($estimate2['discount'], $newEstimate['discount']);
 | |
|         $this->assertEquals($estimate2['discount_type'], $newEstimate['discount_type']);
 | |
|         $this->assertEquals($estimate2['discount_val'], $newEstimate['discount_val']);
 | |
|         $this->assertEquals($estimate2['tax'], $newEstimate['tax']);
 | |
|         $this->assertEquals($estimate2['notes'], $newEstimate['notes']);
 | |
|         $this->assertEquals($estimate2['items'][0]['name'], $newEstimate['items'][0]['name']);
 | |
|         $this->assertEquals($estimate2['items'][0]['description'], $newEstimate['items'][0]['description']);
 | |
|         $this->assertEquals($estimate2['items'][0]['price'], $newEstimate['items'][0]['price']);
 | |
|         $this->assertEquals($estimate2['items'][0]['quantity'], $newEstimate['items'][0]['quantity']);
 | |
|         $this->assertEquals($estimate2['items'][0]['discount_type'], $newEstimate['items'][0]['discount_type']);
 | |
|         $this->assertEquals($estimate2['items'][0]['discount'], $newEstimate['items'][0]['discount']);
 | |
|         $this->assertEquals($estimate2['items'][0]['total'], $newEstimate['items'][0]['total']);
 | |
|         $this->assertEquals($estimate2['taxes'][0]['tax_type_id'], $newEstimate['taxes'][0]['tax_type_id']);
 | |
|         $this->assertEquals($estimate2['taxes'][0]['percent'], $newEstimate['taxes'][0]['percent']);
 | |
|         $this->assertEquals($estimate2['taxes'][0]['amount'], $newEstimate['taxes'][0]['amount']);
 | |
|         $this->assertEquals($estimate2['taxes'][0]['name'], $newEstimate['taxes'][0]['name']);
 | |
|         $this->assertEquals($newEstimate['id'], $newEstimate['taxes'][0]['estimate_id']);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /** @test */
 | |
|     public function testUpdateEstimateEstimateDateRequired()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $estimate2 = factory(Estimate::class)->raw([
 | |
|             'estimate_date' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('PUT', 'api/estimates/'.$estimate->id, $estimate2);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['estimate_date']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testUpdateEstimateExpiryDateRequired()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $estimate2 = factory(Estimate::class)->raw([
 | |
|             'expiry_date' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('PUT', 'api/estimates/'.$estimate->id, $estimate2);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['expiry_date']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testUpdateEstimateRequiresEstimateNumber()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $estimate2 = factory(Estimate::class)->raw([
 | |
|             'estimate_number' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('PUT', 'api/estimates/'.$estimate->id, $estimate2);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['estimate_number']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testUpdateEstimateRequiresUser()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $estimate2 = factory(Estimate::class)->raw([
 | |
|             'user_id' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('PUT', 'api/estimates/'.$estimate->id, $estimate2);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['user_id']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testUpdateEstimateRequiresDiscount()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $estimate2 = factory(Estimate::class)->raw([
 | |
|             'discount' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('PUT', 'api/estimates/'.$estimate->id, $estimate2);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['discount']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testUpdateEstimateRequiresTemplate()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $estimate2 = factory(Estimate::class)->raw([
 | |
|             'estimate_template_id' => '',
 | |
|             'items' => [
 | |
|                 factory(EstimateItem::class)->raw()
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('PUT', 'api/estimates/'.$estimate->id, $estimate2);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['estimate_template_id']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testUpdateEstimateRequiresItems()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $estimate2 = factory(Estimate::class)->raw(['items' => []]);
 | |
| 
 | |
|         $response = $this->json('PUT', 'api/estimates/'.$estimate->id, $estimate2);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['items']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testUpdateEstimateRequiresItemsName()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $estimate2 = factory(Estimate::class)->raw([
 | |
|             'items' => [factory(EstimateItem::class)->raw(['name' => ''])]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('PUT', 'api/estimates/'.$estimate->id, $estimate2);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['items.0.name']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testUpdateEstimateRequiresItemsQuantity()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $estimate2 = factory(Estimate::class)->raw([
 | |
|             'items' => [factory(EstimateItem::class)->raw(['quantity' => null])]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('PUT', 'api/estimates/'.$estimate->id, $estimate2);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['items.0.quantity']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testUpdateEstimateRequiresItemsPrice()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $estimate2 = factory(Estimate::class)->raw([
 | |
|             'items' => [factory(EstimateItem::class)->raw(['price' => null])]
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('PUT', 'api/estimates/'.$estimate->id, $estimate2);
 | |
| 
 | |
|         $response->assertStatus(422)->assertJsonValidationErrors(['items.0.price']);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testDeleteEstimate()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('DELETE', 'api/estimates/'.$estimate->id);
 | |
| 
 | |
|         $response
 | |
|             ->assertOk()
 | |
|             ->assertJson([
 | |
|                 'success' => 'Estimate deleted successfully'
 | |
|             ]);
 | |
| 
 | |
|         $deleted = Estimate::find($estimate->id);
 | |
| 
 | |
|         $this->assertNull($deleted);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testSearchEstimates()
 | |
|     {
 | |
|         $filters = [
 | |
|             'page' => 1,
 | |
|             'limit' => 15,
 | |
|             'search' => 'doe',
 | |
|             'from_date' => '01/09/2019',
 | |
|             'to_date' => '11/09/2019',
 | |
|             'estimate_number' => '000003'
 | |
|         ];
 | |
| 
 | |
|         $queryString = http_build_query($filters, '', '&');
 | |
| 
 | |
|         $response = $this->json('GET', 'api/estimates?'.$queryString);
 | |
| 
 | |
|         $response->assertOk();
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testSendEstimateToCustomer()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $data = [
 | |
|             'id' => $estimate->id
 | |
|         ];
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates/send', $data);
 | |
| 
 | |
|         $response
 | |
|             ->assertOk()
 | |
|             ->assertJson([
 | |
|                 'success' => true
 | |
|             ]);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testEstimateMarkAsAccepted()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $data = [
 | |
|             'id' => $estimate->id
 | |
|         ];
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates/accept', $data);
 | |
| 
 | |
|         $response
 | |
|             ->assertOk()
 | |
|             ->assertJson([
 | |
|                 'success' => true
 | |
|             ]);
 | |
| 
 | |
|         $estimate2 = Estimate::find($estimate->id);
 | |
|         $this->assertEquals($estimate2->status, Estimate::STATUS_ACCEPTED);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testEstimateMarkAsRejected()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $data = [
 | |
|             'id' => $estimate->id
 | |
|         ];
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates/reject', $data);
 | |
| 
 | |
|         $response
 | |
|             ->assertOk()
 | |
|             ->assertJson([
 | |
|                 'success' => true
 | |
|             ]);
 | |
| 
 | |
|         $estimate2 = Estimate::find($estimate->id);
 | |
|         $this->assertEquals($estimate2->status, Estimate::STATUS_REJECTED);
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testCreateInvoiceFromEstimate()
 | |
|     {
 | |
|         $estimate = factory(Estimate::class)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $invoice = factory(Invoice::class)->create([
 | |
|             'invoice_date' => '1988-07-18',
 | |
|             'due_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates/'.$estimate->id.'/convert-to-invoice');
 | |
| 
 | |
|         $response->assertOk();
 | |
|     }
 | |
| 
 | |
|     /** @test */
 | |
|     public function testDeleteMultipleEstimates()
 | |
|     {
 | |
|         $estimates = factory(Estimate::class, 3)->create([
 | |
|             'estimate_date' => '1988-07-18',
 | |
|             'expiry_date' => '1988-08-18',
 | |
|         ]);
 | |
| 
 | |
|         $ids = $estimates->pluck('id');
 | |
| 
 | |
|         $data = [
 | |
|             'id' => $ids
 | |
|         ];
 | |
| 
 | |
|         $response = $this->json('POST', 'api/estimates/delete', $data);
 | |
| 
 | |
|         $response
 | |
|             ->assertOk()
 | |
|             ->assertJson([
 | |
|                 'success' => true
 | |
|             ]);
 | |
|     }
 | |
| }
 |