mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-31 05:31:10 -04:00 
			
		
		
		
	build version 400
This commit is contained in:
		| @ -1,220 +1,144 @@ | ||||
| <?php | ||||
| namespace Tests\Feature; | ||||
|  | ||||
| use Tests\TestCase; | ||||
| use Illuminate\Foundation\Testing\WithFaker; | ||||
| use Illuminate\Foundation\Testing\RefreshDatabase; | ||||
| use Crater\User; | ||||
| use Laravel\Passport\Passport; | ||||
| use SettingsSeeder; | ||||
| use Crater\Http\Controllers\V1\Settings\CompanyController; | ||||
| use Crater\Http\Requests\CompanyRequest; | ||||
| use Crater\Http\Requests\ProfileRequest; | ||||
| use Crater\Models\User; | ||||
| use Illuminate\Support\Facades\Artisan; | ||||
| use Laravel\Sanctum\Sanctum; | ||||
| use function Pest\Laravel\{postJson, getJson, putJson}; | ||||
|  | ||||
| class CompanySettingTest extends TestCase | ||||
| { | ||||
|     use RefreshDatabase; | ||||
| beforeEach(function () { | ||||
|     Artisan::call('db:seed', ['--class' => 'DatabaseSeeder', '--force' => true]); | ||||
|     Artisan::call('db:seed', ['--class' => 'DemoSeeder', '--force' => true]); | ||||
|  | ||||
|     protected $user; | ||||
|     $user = User::find(1); | ||||
|     $this->withHeaders([ | ||||
|         'company' => $user->company_id, | ||||
|     ]); | ||||
|     Sanctum::actingAs( | ||||
|         $user, | ||||
|         ['*'] | ||||
|     ); | ||||
| }); | ||||
|  | ||||
|     public function setUp(): void | ||||
|     { | ||||
|         parent::setUp(); | ||||
|         $this->seed(); | ||||
|         $this->seed(SettingsSeeder::class); | ||||
|         $user = User::find(1); | ||||
|         $this->withHeaders([ | ||||
|             'company' => $user->company_id, | ||||
| test('get profile', function () { | ||||
|     $response = getJson('api/v1/me'); | ||||
|  | ||||
|     $response->assertOk(); | ||||
| }); | ||||
|  | ||||
|  | ||||
| test('update profile using a form request', function () { | ||||
|     $this->assertActionUsesFormRequest( | ||||
|         CompanyController::class, | ||||
|         'updateProfile', | ||||
|         ProfileRequest::class | ||||
|     ); | ||||
| }); | ||||
|  | ||||
| test('update profile', function () { | ||||
|     $user = [ | ||||
|         'name' => 'John Doe', | ||||
|         'password' => 'admin@123', | ||||
|         'email' => 'admin@crater.in' | ||||
|     ]; | ||||
|  | ||||
|     $response = putJson('api/v1/me', $user); | ||||
|  | ||||
|     $response->assertOk(); | ||||
|  | ||||
|     $this->assertDatabaseHas('users', [ | ||||
|         'name' => $user['name'], | ||||
|         'email' => $user['email'] | ||||
|     ]); | ||||
| }); | ||||
|  | ||||
| test('update company using a form request', function () { | ||||
|     $this->assertActionUsesFormRequest( | ||||
|         CompanyController::class, | ||||
|         'updateCompany', | ||||
|         CompanyRequest::class | ||||
|     ); | ||||
| }); | ||||
|  | ||||
| test('update company', function () { | ||||
|     $company = [ | ||||
|         'name' => 'XYZ', | ||||
|         'country_id' => 2, | ||||
|         'state' => 'city', | ||||
|         'city' => 'state', | ||||
|         'address_street_1' => 'test1', | ||||
|         'address_street_2' => 'test2', | ||||
|         'phone' => '1234567890', | ||||
|         'zip' => '112233' | ||||
|     ]; | ||||
|  | ||||
|     $response = putJson('api/v1/company', $company); | ||||
|  | ||||
|     $response->assertOk(); | ||||
|  | ||||
|     $this->assertDatabaseHas('companies', [ | ||||
|         'name' => $company['name'] | ||||
|     ]); | ||||
|  | ||||
|     $this->assertDatabaseHas('addresses', [ | ||||
|         'country_id' => $company['country_id'], | ||||
|         'state' => $company['state'], | ||||
|         'city' => $company['city'], | ||||
|         'address_street_1' => $company['address_street_1'], | ||||
|         'address_street_2' => $company['address_street_2'], | ||||
|         'phone' => $company['phone'], | ||||
|         'zip' => $company['zip'] | ||||
|     ]); | ||||
| }); | ||||
|  | ||||
| test('update settings', function () { | ||||
|     $settings = [ | ||||
|         'currency'=> 1, | ||||
|         'time_zone' => 'Asia/Kolkata', | ||||
|         'language' => 'en', | ||||
|         'fiscal_year' => '1-12', | ||||
|         'carbon_date_format' => 'Y/m/d', | ||||
|         'moment_date_format' => 'YYYY/MM/DD', | ||||
|         'notification_email' => 'noreply@crater.in', | ||||
|         'notify_invoice_viewed' => 'YES', | ||||
|         'notify_estimate_viewed' => 'YES', | ||||
|         'tax_per_item' => 'YES', | ||||
|         'discount_per_item' => 'YES' | ||||
|     ]; | ||||
|  | ||||
|     $response = postJson('/api/v1/company/settings', ['settings' => $settings]); | ||||
|  | ||||
|     $response->assertOk() | ||||
|         ->assertJson([ | ||||
|             'success' => true | ||||
|         ]); | ||||
|  | ||||
|     foreach ($settings as $key => $value) { | ||||
|         $this->assertDatabaseHas('company_settings', [ | ||||
|             'option' => $key, | ||||
|             'value' => $value | ||||
|         ]); | ||||
|         Passport::actingAs( | ||||
|             $user, | ||||
|             ['*'] | ||||
|         ); | ||||
|     } | ||||
| }); | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testGetProfile() | ||||
|     { | ||||
|         $response = $this->json('GET', 'api/settings/profile'); | ||||
| test('get notification email settings', function () { | ||||
|     $data['settings'] = [ | ||||
|         'currency', | ||||
|         'time_zone', | ||||
|         'language', | ||||
|         'fiscal_year', | ||||
|         'carbon_date_format', | ||||
|         'moment_date_format', | ||||
|         'notification_email', | ||||
|         'notify_invoice_viewed', | ||||
|         'notify_estimate_viewed', | ||||
|         'tax_per_item', | ||||
|         'discount_per_item' | ||||
|     ]; | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|     $response = getJson('/api/v1/company/settings?'.http_build_query($data)); | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testUpdateProfile() | ||||
|     { | ||||
|         $user = [ | ||||
|             'name' => 'John Doe', | ||||
|             'password' => 'admin@123', | ||||
|             'email' => 'admin@crater.in' | ||||
|         ]; | ||||
|  | ||||
|         $response = $this->json('PUT', 'api/settings/profile', $user); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testGetUpdateCompanyDetails() | ||||
|     { | ||||
|         $response = $this->json('GET', 'api/settings/company'); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testUpdateCompany() | ||||
|     { | ||||
|         $company = [ | ||||
|             'name' => 'XYZ', | ||||
|             'country_id' => 2, | ||||
|             'state' => 'city', | ||||
|             'city' => 'state', | ||||
|             'address_street_1' => 'test1', | ||||
|             'address_street_2' => 'test2', | ||||
|             'phone' => '1234567890', | ||||
|             'zip' => '112233' | ||||
|         ]; | ||||
|  | ||||
|         $response = $this->json('POST', 'api/settings/company', $company); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|         $company2 = $response->decodeResponseJson()['user']['company']; | ||||
|         $address2 = $response->decodeResponseJson()['user']['addresses'][0]; | ||||
|         $this->assertEquals($company['name'], $company2['name']); | ||||
|         $this->assertEquals($company['country_id'], $address2['country_id']); | ||||
|         $this->assertEquals($company['state'], $address2['state']); | ||||
|         $this->assertEquals($company['city'], $address2['city']); | ||||
|         $this->assertEquals($company['address_street_1'], $address2['address_street_1']); | ||||
|         $this->assertEquals($company['address_street_2'], $address2['address_street_2']); | ||||
|         $this->assertEquals($company['phone'], $address2['phone']); | ||||
|         $this->assertEquals($company['zip'], $address2['zip']); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testGetSettings() | ||||
|     { | ||||
|         $response = $this->json('GET', 'api/settings/general'); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testUpdateSettings() | ||||
|     { | ||||
|         $settings = [ | ||||
|             'currency'           => 1, | ||||
|             'time_zone'          => 'Asia/Kolkata', | ||||
|             'language'           => 'en', | ||||
|             'fiscal_year'        => '1-12', | ||||
|             'carbon_date_format' => 'Y/m/d', | ||||
|             'moment_date_format' => 'YYYY/MM/DD' | ||||
|         ]; | ||||
|  | ||||
|         $response = $this->json('PUT', 'api/settings/general', $settings); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testUpdateNotificationEmailSettings() | ||||
|     { | ||||
|         $settings = [ | ||||
|             'key' => 'notification_email', | ||||
|             'value' => 'noreply@crater.in' | ||||
|         ]; | ||||
|  | ||||
|         $response = $this->json('PUT', 'api/settings/update-setting', $settings); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testGetNotificationEmailSettings() | ||||
|     { | ||||
|         $response = $this->json('GET', 'api/settings/get-setting?key=notification_email'); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testUpdateNotificationInvoiceViewedSettings() | ||||
|     { | ||||
|         $settings = [ | ||||
|             'key' => 'notify_invoice_viewed', | ||||
|             'value' => 'YES' | ||||
|         ]; | ||||
|  | ||||
|         $response = $this->json('PUT', 'api/settings/update-setting', $settings); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testGetNotificationInvoiceViewedSettings() | ||||
|     { | ||||
|         $response = $this->json('GET', 'api/settings/get-setting?key=notify_invoice_viewed'); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testUpdateNotificationEstimateViewedSettings() | ||||
|     { | ||||
|         $settings = [ | ||||
|             'key' => 'notify_estimate_viewed', | ||||
|             'value' => 'YES' | ||||
|         ]; | ||||
|  | ||||
|         $response = $this->json('PUT', 'api/settings/update-setting', $settings); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testGetNotificationEstimateViewedSettings() | ||||
|     { | ||||
|         $response = $this->json('GET', 'api/settings/get-setting?key=notify_estimate_viewed'); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testUpdateTaxPerItemSetting() | ||||
|     { | ||||
|         $settings = [ | ||||
|             'key' => 'tax_per_item', | ||||
|             'value' => 'YES' | ||||
|         ]; | ||||
|  | ||||
|         $response = $this->json('PUT', 'api/settings/update-setting', $settings); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testGetTaxPerItemSetting() | ||||
|     { | ||||
|         $response = $this->json('GET', 'api/settings/get-setting?key=tax_per_item'); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testUpdateDiscountPerItemSetting() | ||||
|     { | ||||
|         $settings = [ | ||||
|             'key' => 'discount_per_item', | ||||
|             'value' => 'YES' | ||||
|         ]; | ||||
|  | ||||
|         $response = $this->json('PUT', 'api/settings/update-setting', $settings); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testGetDiscountPerItemSetting() | ||||
|     { | ||||
|         $response = $this->json('GET', 'api/settings/get-setting?key=discount_per_item'); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
| } | ||||
|     $response->assertOk(); | ||||
| }); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user