<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Al Shahriar</title>
    <description>The latest articles on DEV Community by Al Shahriar (@alshahriar042).</description>
    <link>https://dev.to/alshahriar042</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F861343%2Fada65b52-1b3d-4994-9bde-4f79fed0db5e.JPG</url>
      <title>DEV Community: Al Shahriar</title>
      <link>https://dev.to/alshahriar042</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alshahriar042"/>
    <language>en</language>
    <item>
      <title>Feature Test vs Unit Test: When to Use Which?</title>
      <dc:creator>Al Shahriar</dc:creator>
      <pubDate>Thu, 14 Aug 2025 16:34:55 +0000</pubDate>
      <link>https://dev.to/alshahriar042/feature-test-vs-unit-test-when-to-use-which-36lg</link>
      <guid>https://dev.to/alshahriar042/feature-test-vs-unit-test-when-to-use-which-36lg</guid>
      <description>&lt;p&gt;Testing is not just about finding bugs — it’s about building confidence in your code.&lt;br&gt;
As developers, we often hear “Unit Test” and “Feature Test”. &lt;br&gt;
But what’s the difference, and when should you use each?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unit Test&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Purpose: Test small, isolated pieces of code (functions, classes) without dependencies.&lt;br&gt;
Speed:  Super fast – no DB, no API calls.&lt;br&gt;
Best for: Business logic, utility functions, services.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function test_discount_calculation()
{
    $service = new DiscountService();
    $result = $service-&amp;gt;calculate(1000, 10);
    $this-&amp;gt;assertEquals(900, $result);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Think of it as testing a single brick, not the whole building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feature Test&lt;/strong&gt;&lt;br&gt;
Purpose: Test an entire feature end-to-end — from request → controller/service → database → response.&lt;br&gt;
Speed:  Slower – interacts with DB, queues, or APIs.&lt;br&gt;
Best for: Verifying complete workflows like “User Registration”, “Checkout”, “Password Reset”.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function test_user_registration()
{
    $response = $this-&amp;gt;postJson('/api/register', [
        'name' =&amp;gt; 'John Doe',
        'email' =&amp;gt; 'john@example.com',
        'password' =&amp;gt; 'Password@123',
        'password_confirmation' =&amp;gt; 'Password@123',
    ]);

    $response-&amp;gt;assertStatus(201);
    $this-&amp;gt;assertDatabaseHas('users', ['email' =&amp;gt; 'john@example.com']);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Think of it as testing the whole building — from the foundation to the roof.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>unittest</category>
      <category>featuretest</category>
    </item>
    <item>
      <title>A Step To Step Guide For Laravel Localization</title>
      <dc:creator>Al Shahriar</dc:creator>
      <pubDate>Mon, 01 May 2023 09:18:08 +0000</pubDate>
      <link>https://dev.to/alshahriar042/laravel-localization-2n5e</link>
      <guid>https://dev.to/alshahriar042/laravel-localization-2n5e</guid>
      <description>&lt;p&gt;Hello and welcome to this tutorial on Laravel  localization! In this tutorial, we'll be going over how to implement localization in your Laravel  project.&lt;/p&gt;

&lt;p&gt;Localization is the process of adapting your application to a specific locale or language. This is an important feature to include in your application if you want to reach a wider audience.&lt;/p&gt;

&lt;p&gt;Step 1: Install Laravel&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer create-project laravel/laravel:^9.0 localization

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2: Create Controller &lt;br&gt;
&lt;code&gt;php artisan make:controller LocalizationController --invokable&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
public function __invoke($langVal)
    {
       Session::put("locale",$langVal);
       return response()-&amp;gt;json(['success'=&amp;gt;'Language change 
       successfully.']);

    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3: Make a route in &lt;code&gt;web.php&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Route::get('/', function () {
    return view('home');
});

Route::get('lang/{langVal}', LocalizationController::class);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 4: Make a MiddleWare &lt;/p&gt;

&lt;p&gt;&lt;code&gt;php artisan make:middleware Localization  &lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function handle(Request $request, Closure $next)
    {
        if(Session::has("locale"))
            App::setLocale(Session::get("locale"));
        else
            App::setLocale(config("app.locale"));

        return $next($request);
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add &lt;code&gt;Localization&lt;/code&gt;Middleware In  &lt;code&gt;Kernal.php&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  'web' =&amp;gt; [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\Localization::class,

        ],

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 5: Create a json File in &lt;code&gt;lang/en.json&lt;/code&gt; &amp;amp; &lt;code&gt;lang/bn.json&lt;br&gt;
&lt;/code&gt;bn for bangla and en for english. Always Use Same Key for both language. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;en.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{

    "Home" : "WellCome To My Laravel Localization BLog",
    "Contact" :"0181285****"


}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;bn.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{

    "Home" : "লারাভেল লোকালাইজেশন ব্লগ এ আপনাকে স্বাগতম",
    "Contact" :"০১৮১২৮৫****"

}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Call Lang file in Blade&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;lt;p&amp;gt;{{ __('Home') }}&amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;{{ __('Contact') }}&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Language Shifting Toogle Button Code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;div class="form-check form-switch d-flex align-items-center gap-2 languge-content"&amp;gt;
        &amp;lt;p class="language-text"&amp;gt;English&amp;lt;/p&amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;input class="form-check-input language-btn ms-0 mt-0 languageChange" id="languageChange"
                type="checkbox" {{ Session::get('locale') == 'bn' ? 'checked' : '' }} /&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;p class="language-text"&amp;gt;বাংলা&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get Value from Toogle Button and Pass Value to Change Language&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;lt;script&amp;gt;
    $('.languageChange').click(function() {
        var mode = $(this).prop('checked');
        if (mode == true) {
            var langVal = 'bn';
        } else {
            var langVal = 'en';
        }

        $.ajax({
            type: 'GET',
            url: '/lang/' + langVal,
            success: function(data) {
                location.reload();
                console.log(langVal);

            },
            error: function(data) {
                console.log('Something went wrong.');
            }
        });
    });
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here Is full Code &lt;br&gt;
Step 6 : Create a blade file &lt;code&gt;home.blade.php&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
  &amp;lt;meta charset="UTF-8"&amp;gt;
  &amp;lt;title&amp;gt;Localization Practice&amp;lt;/title&amp;gt;
  &amp;lt;style&amp;gt;
    /* Define styles for the header and toggle button */
    header {
      display: flex;
      justify-content: space-between;
      align-items: center;
      background-color: #333;
      color: #fff;
      padding: 10px;
    }

    #toggle {
      background-color: #fff;
      color: #333;
      border: none;
      padding: 5px 10px;
      cursor: pointer;
    }
  &amp;lt;/style&amp;gt;
&amp;lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.6/js/standalone/selectize.min.js"
    integrity="sha256-+C0A5Ilqmu4QcSPxrlGpaZxJ04VjsRjKu+G82kl5UJk=" crossorigin="anonymous"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;link rel="stylesheet"
    href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.6/css/selectize.bootstrap3.min.css"
    integrity="sha256-ze/OEYGcFbPRmvCnrSeKbRTtjG4vGLHXgOqsyLFTRjg=" crossorigin="anonymous" /&amp;gt;
&amp;lt;link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" /&amp;gt;

&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;header&amp;gt;
    &amp;lt;h1&amp;gt;Localization Practice&amp;lt;/h1&amp;gt;
    &amp;lt;div class="form-check form-switch d-flex align-items-center gap-2 languge-content"&amp;gt;
        &amp;lt;p class="language-text"&amp;gt;English&amp;lt;/p&amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;input class="form-check-input language-btn ms-0 mt-0 languageChange" id="languageChange"
                type="checkbox" {{ Session::get('locale') == 'bn' ? 'checked' : '' }} /&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;p class="language-text"&amp;gt;বাংলা&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;  &amp;lt;/header&amp;gt;

  &amp;lt;main&amp;gt;
    &amp;lt;p&amp;gt;{{ __('Home') }}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;{{ __('Contact') }}&amp;lt;/p&amp;gt;


  &amp;lt;/main&amp;gt;
  &amp;lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"&amp;gt;&amp;lt;/script&amp;gt;

  &amp;lt;script&amp;gt;
    $('.languageChange').click(function() {
        var mode = $(this).prop('checked');
        if (mode == true) {
            var langVal = 'bn';
        } else {
            var langVal = 'en';
        }

        $.ajax({
            type: 'GET',
            url: '/lang/' + langVal,
            success: function(data) {
                location.reload();
                console.log(langVal);

            },
            error: function(data) {
                console.log('Something went wrong.');
            }
        });
    });
&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is The Visual&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MC_wAQSp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yrmap8bjuhyiovvazk1b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MC_wAQSp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yrmap8bjuhyiovvazk1b.png" alt="Image description" width="800" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--31sMvplw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c4yirim4qpe4qi56fp12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--31sMvplw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c4yirim4qpe4qi56fp12.png" alt="Image description" width="800" height="185"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>localization</category>
      <category>sotfware</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
