Guest User Unit Test
user_6716235
php
a year ago
18 kB
8
Indexable
<?php
namespace Tests\Feature;
use App\Enums\AttributeType;
use App\Models\Attribute;
use App\Models\AttributeValue;
use App\Models\Currency;
use App\Models\Domain;
use App\Models\ServiceCategory;
use App\Models\Skill;
use Carbon\Carbon;
use Tests\TestCase;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
class GuestUserTest extends TestCase
{
/**
* A basic feature test to verify guest user login functionality.
*
* This test checks if a guest user can successfully log in by making a GET request
* to the '/api/v1/guest/login' endpoint. It then validates the response structure and
* content to ensure that the login process is functioning correctly.
*
* Steps:
* 1. Make a GET request to the '/api/v1/guest/login' endpoint with 'Accept' header set to 'application/json'.
* 2. Decode the JSON response to an associative array.
* 3. Assert that the 'success' field in the response is true.
* 4. Assert that the 'access_token' field in the response is not empty.
* 5. Assert that the 'refresh_token' field in the response is not empty.
*
* @return void
*/
public function test_guest_user_login()
{
// Make a GET request to the guest login endpoint with JSON headers
$response = $this->withHeaders([
'Accept' => 'application/json',
])->get('/api/v1/guest/login');
// Decode the JSON response content to an associative array
$response = json_decode($response->content(), true);
// Assert that the 'success' field is true, indicating a successful login
$this->assertEquals($response['success'], true);
// Assert that the 'access_token' is not empty, ensuring it is present in the response
$this->assertNotEmpty($response['access_token']);
// Assert that the 'refresh_token' is not empty, ensuring it is present in the response
$this->assertNotEmpty($response['refresh_token']);
return $response;
}
/**
* This test depends on the successful execution of the test_guest_user_login method.
* It uses the response (specifically the access token) from the login test.
*
* @depends test_guest_user_login
*/
public function test_guest_user_add_service_category(array $userData)
{
// Retrieve the first ServiceCategory record from the guest database.
$serviceCategory = ServiceCategory::first();
// Retrieve the first Currency record from the guest database.
$currency = Currency::first();
// Retrieve the first Domain record from the guest database.
$domain = Domain::first();
// Retrieve the IDs of the first two skills related to the service category from the guest database.
$skills = Skill::where('service_category_id', $serviceCategory->id)
->limit(2)
->pluck('id')
->toArray();
// Make a POST request to the '/api/v1/service-categories/{id}/attach' endpoint
// to attach a service category to the guest user with additional details.
// The request includes headers for 'Accept' and 'Authorization', using the access token
// obtained from the previous test (test_guest_user_login).
$response = $this->withHeaders([
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $userData['access_token'],
])->post('/api/v1/service-categories/' . $serviceCategory->id . '/attach', [
'description' => 'Over 10,000 flight hours', // Description of the service category
'currency_type' => $currency->id, // ID of the currency type
'rate' => 10, // Rate for the service
'domain_id' => $domain->id, // ID of the domain
'latitude' => '23.783731', // Latitude for the location
'longitude' => '90.417441', // Longitude for the location
'radius' => '100', // Radius of the service availability
'is_published' => 1, // Indicates if the service is published
'skills' => $skills // Array of skill IDs related to the service category
]);
// Decode the JSON response content to an associative array for easier assertions.
$response = json_decode($response->content(), true);
// Assert that the response contains a 'status' key.
$this->assertArrayHasKey('status', $response);
// Assert that the 'status' key in the response has a value of 'Success'.
$this->assertEquals('Success', $response['status']);
}
/**
* This test depends on the successful execution of the test_guest_user_login method.
* It uses the response (specifically the access token) from the login test.
*
* @depends test_guest_user_login
*/
public function test_guest_user_add_surname(array $userData)
{
// Make a POST request to the '/api/v1/attributes/attach_surname' endpoint
// to attach a surname to the guest user's profile.
// The request includes headers for 'Accept' and 'Authorization', using the access token
// obtained from the previous test (test_guest_user_login).
$response = $this->withHeaders([
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $userData['access_token'],
])->post('/api/v1/attributes/attach_surname', [
'first_name' => 'John', // Guest user's first name
'last_name' => 'Doe', // Guest user's last name (surname)
'is_visible_on_profile' => 1 // Flag indicating if the surname is visible on the profile
]);
// Decode the JSON response content to an associative array for easier assertions.
$response = json_decode($response->content(), true);
// Assert that the response contains a 'status' key.
$this->assertArrayHasKey('status', $response);
// Assert that the 'status' key in the response has a value of 'Success'.
$this->assertEquals('Success', $response['status']);
}
/**
* This test depends on the successful execution of the test_guest_user_login method.
* It uses the response (specifically the access token) from the login test.
*
* @depends test_guest_user_login
*/
public function test_guest_user_add_unit_attribute(array $userData)
{
// Retrieve the 'Weight' attribute from the guest database.
// AttributeType::Weight->value is assumed to return the ID of the 'Weight' attribute.
$attribute = Attribute::where('id', AttributeType::Weight->value)
->first();
// Make a POST request to the '/api/v1/attributes/attach_unit_value' endpoint
// to attach a unit value (e.g., weight) to the guest user's profile.
// The request includes headers for 'Accept' and 'Authorization', using the access token
// obtained from the previous test (test_guest_user_login).
$response = $this->withHeaders([
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $userData['access_token'],
])->post('/api/v1/attributes/attach_unit_value', [
'attributes_id' => $attribute->id, // ID of the 'Weight' attribute
'unit' => 'Kg', // Unit of measurement (Kilograms)
'value' => '60', // Value associated with the unit (e.g., 60 Kg)
'is_visible_on_profile' => 1 // Flag indicating if this attribute is visible on the profile
]);
// Decode the JSON response content to an associative array for easier assertions.
$response = json_decode($response->content(), true);
// Assert that the response contains a 'status' key.
$this->assertArrayHasKey('status', $response);
// Assert that the 'status' key in the response has a value of 'Success'.
$this->assertEquals('Success', $response['status']);
}
/**
* This test depends on the successful execution of the test_guest_user_login method.
* It uses the response (specifically the access token) from the login test.
*
* @depends test_guest_user_login
*/
public function test_guest_user_add_social_link(array $userData)
{
// Retrieve the first service category from the guest database.
$serviceCategory = ServiceCategory::first();
// Retrieve the attribute related to social links from the guest database.
$attributes = Attribute::where('id', AttributeType::SocialLinks->value)->first();
// Retrieve the IDs of the social link attributes from the guest database.
$attributeValue = AttributeValue::where('attributes_id', $attributes->id)
->whereIn('value', ['Facebook', 'Github'])
->pluck('id')
->toArray();
// Make a POST request to the '/api/v1/attributes/attach_social_links' endpoint
// to attach social links to a service category in the guest user's profile.
$response = $this->withHeaders([
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $userData['access_token'],
])->post('/api/v1/attributes/attach_social_links', [
'service_category_id' => $serviceCategory->id, // ID of the service category
'attribute_value_id_list' => $attributeValue, // List of attribute value IDs (e.g., Facebook, Github)
'values' => ['John', 'Doe'], // Social links to be attached
'is_visible_on_profile' => 1 // Flag indicating if the links should be visible on the profile
]);
// Decode the JSON response content to an associative array for easier assertions.
$response = json_decode($response->content(), true);
// Assert that the response contains a 'status' key.
$this->assertArrayHasKey('status', $response);
// Assert that the 'status' key in the response has a value of 'Success'.
$this->assertEquals('Success', $response['status']);
}
/**
* This test depends on the successful execution of the test_guest_user_login method.
* It uses the response (specifically the access token) from the login test.
*
* @depends test_guest_user_login
*/
public function test_guest_user_add_qualification(array $userData)
{
// Retrieve the first service category from the guest database.
$serviceCategory = ServiceCategory::first();
// Make a POST request to the '/api/v1/attributes/attach_qualifications' endpoint
// to attach qualifications to a service category in the guest user's profile.
$response = $this->withHeaders([
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $userData['access_token'],
])->post('/api/v1/attributes/attach_qualifications', [
'service_category_id' => $serviceCategory->id, // ID of the service category
'highlight_of_qualification' => ['Qualification1', 'Qualification2'], // List of qualifications
'is_visible_on_profile' => 1 // Flag indicating if the qualifications should be visible on the profile
]);
// Decode the JSON response content to an associative array for easier assertions.
$response = json_decode($response->content(), true);
// Assert that the response contains a 'status' key.
$this->assertArrayHasKey('status', $response);
// Assert that the 'status' key in the response has a value of 'Success'.
$this->assertEquals('Success', $response['status']);
}
/**
* @depends test_guest_user_login
*/
public function test_guest_user_add_attachment(array $userData)
{
// Prepare the file to be uploaded
$file = UploadedFile::fake()->create('sample.pdf', 100); // 100 KB file
// Fake the public disk for testing
Storage::fake('public');
// Retrieve the attribute by ID (ensure this is the correct ID and attribute)
$attribute = Attribute::where('id', AttributeType::CreditScore->value)
->firstOrFail();
// Make the POST request with the file attachment
$response = $this->withHeaders([
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $userData['access_token'],
])->post('/api/v1/attributes/attach_attachment', [
'attributes_id' => $attribute->id,
'attach_file' => $file,
'value' => '40',
'unit' => 'USD',
'is_visible_on_profile' => 1
]);
// Decode the JSON response content to an associative array for easier assertions
$response = json_decode($response->content(), true);
// Assert that the response contains a 'status' key
$this->assertArrayHasKey('status', $response);
// Assert that the 'status' key in the response has a value of 'Success'
$this->assertEquals('Success', $response['status']);
}
/**
* This test depends on the successful execution of the test_guest_user_login method.
* It uses the response (specifically the access token) from the login test.
*
* @depends test_guest_user_login
*/
public function test_guest_user_add_project(array $userData)
{
// Retrieve the first service category from the guest database.
$serviceCategory = ServiceCategory::first();
// Make a POST request to the '/api/v1/attributes/attach_projects' endpoint
// to attach projects to a service category in the guest user's profile.
$response = $this->withHeaders([
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $userData['access_token'],
])->post('/api/v1/attributes/attach_projects', [
'service_category_id' => $serviceCategory->id, // ID of the service category
'projects' => ['Project1', 'Project2'], // List of projects
'is_visible_on_profile' => 1 // Flag indicating if the projects should be visible on the profile
]);
// Decode the JSON response content to an associative array for easier assertions.
$response = json_decode($response->content(), true);
// Assert that the response contains a 'status' key.
$this->assertArrayHasKey('status', $response);
// Assert that the 'status' key in the response has a value of 'Success'.
$this->assertEquals('Success', $response['status']);
}
/**
* This test depends on the successful execution of the test_guest_user_login method.
* It uses the response (specifically the access token) from the login test.
*
* @depends test_guest_user_login
*/
public function test_guest_user_add_education(array $userData)
{
// Make a POST request to the '/api/v1/educations' endpoint to add education details.
// The request includes headers for 'Accept' and 'Authorization', using the access token
// obtained from the previous test (test_guest_user_login).
$response = $this->withHeaders([
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $userData['access_token'],
])->post('/api/v1/educations', [
'school' => 'University of Oxford', // Name of the school
'field_of_study' => 'Computer Science', // Field of study
'starting_date' => Carbon::now()->subYears(5)->format('Y-m-d'), // Starting date, 5 years ago from now
'ending_date' => Carbon::now()->subYears(1)->format('Y-m-d'), // Ending date, also 1 years ago (same as starting)
]);
// Decode the JSON response content to an associative array for easier assertions.
$response = json_decode($response->content(), true);
// Assert that the response contains a 'status' key.
$this->assertArrayHasKey('status', $response);
// Assert that the 'status' key in the response has a value of 'Success'.
$this->assertEquals('Success', $response['status']);
}
/**
* This test depends on the successful execution of the test_guest_user_login method.
* It uses the response (specifically the access token) from the login test.
*
* @depends test_guest_user_login
*/
public function test_guest_user_add_experience(array $userData)
{
$serviceCategory = ServiceCategory::first();
// Make a POST request to the '/api/v1/service-categories/{id}/experiences' endpoint
// to add an experience under the first service category.
// The request includes headers for 'Accept' and 'Authorization', using the access token
// obtained from the previous test (test_guest_user_login).
$response = $this->withHeaders([
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $userData['access_token'],
])->post('/api/v1/service-categories/' . $serviceCategory['id'] . '/experiences', [
'organization' => 'Oracle Corporation', // Name of the organization
'position' => 'Laravel Developer', // Position held at the organization
'location' => 'Austin, Texas, United States', // Location of the organization
'starting_date' => Carbon::now()->subYears(5)->format('Y-m-d'), // Start date, 5 years ago
'ending_date' => Carbon::now()->subYears(3)->format('Y-m-d'), // End date, 3 years ago
'responsibilities' => ['Develop Api', 'Unit Testing'] // List of responsibilities
]);
// Decode the JSON response content to an associative array for easier assertions.
$response = json_decode($response->content(), true);
// Assert that the response contains a 'status' key.
$this->assertArrayHasKey('status', $response);
// Assert that the 'status' key in the response has a value of 'Success'.
$this->assertEquals('Success', $response['status']);
}
}
Editor is loading...
Leave a Comment