ReplaceByVariablesTest.php 2.42 KB
<?php

namespace Tests\Unit;

use App\Models\Account;
use App\Models\Campaigns;
use App\Models\Tokens;
use App\Models\User;
use App\Models\Variable;
use App\Service\StrReplaceByVariables;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class ReplaceByVariablesTest extends TestCase
{
    use RefreshDatabase;

    protected function setUp(): void
    {
        parent::setUp();

        $account = Account::create(['name' => 'Acme Corporation']);

        $this->user = factory(User::class)->create([
            'account_id' => $account->id,
            'first_name' => 'John',
            'last_name' => 'Doe',
            'email' => 'johndoe@example.com',
            'owner' => true,
        ]);

        $this->token = factory(Tokens::class)->create([
            'created_by' => $this->user->getKey()
        ]);

        $this->campaign = factory(Campaigns::class)->create([
            'external_id' => 1,
            'manage' => true,
            'token' => $this->token,
        ]);

        $this->variable = factory(Variable::class)->create([
            'name' => 'var',
            'default_value' => 'var value',
        ]);

        $this->campaign->variables()->sync([
            $this->variable->getKey() => [
                'value' => 'custom var value',
            ]
        ]);

        $this->variable_2 = factory(Variable::class)->create([
            'name' => 'vartwo',
            'default_value' => 'vartwo value',
        ]);

    }

    public function testReplaceByVariables()
    {
        $this->assertEquals(1, Tokens::count());
        $this->assertEquals(1, Campaigns::count());
        $this->assertEquals(2, Variable::count());
        $this->assertEquals(1, $this->campaign->variables->count());


        $variable_list = [];

        foreach (Variable::all() as $variable) {
            $campaign = $variable->campaigns()
                ->where('campaign_id', $this->campaign->getKey())
                ->first();

            $value = (
            $campaign
                ? $campaign->pivot->value
                : $variable->default_value
            );

            $variable_list[$variable->name] = $value;
        }

        $this->assertEquals('String "custom var value"', StrReplaceByVariables::getInstance('String "%var%"', $variable_list)->get());
        $this->assertEquals('String "vartwo value"', StrReplaceByVariables::getInstance('String "%vartwo%"', $variable_list)->get());


    }
}