Commit e7710efc by Vladislav

#19462 Добавление в настройки городов переменных

1 parent 5c158ca1
......@@ -111,6 +111,17 @@ class Campaigns extends Model
{
parent::boot();
static::created(function(Campaigns $campaign)
{
if ($campaign->manage) {
Dictionary::whereNotNull('token_id')->each(function (Dictionary $dictionary) use ($campaign) {
$campaign->dictionaries()->syncWithoutDetaching([
$dictionary->getKey() => DictionaryCampaign::copyPropertyInCampaign($campaign),
]);
});
}
});
static::updated(function(Campaigns $campaign)
{
if ($campaign->manage !== $campaign->getOriginal('manage')) {
......
......@@ -8,6 +8,7 @@ use App\Models\Dictionary;
use App\Models\Tokens;
use App\Models\User;
use App\Models\Organization;
use App\Models\Variable;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
......@@ -50,11 +51,6 @@ class CityTest extends TestCase
'token' => $this->token_main->getKey(),
]);
factory(Campaigns::class, 2)->create([
'manage' => false,
'token' => $this->token_main->getKey(),
]);
factory(Dictionary::class, 10)->create([
'type' => Dictionary::CITY,
]);
......@@ -62,12 +58,13 @@ class CityTest extends TestCase
public function test_add_city_and_variables()
{
$ids = Dictionary::all()->pluck('id');
$dictionary_ids = Dictionary::all()->pluck('id');
$campaign_ids = Campaigns::all()->pluck('id');
$this->actingAs($this->user)
->post(route('token.city.store', [
'token' => $this->token->id,
'city' => $ids[0]
'city' => $dictionary_ids[0]
]))
->assertStatus(302);
......@@ -80,7 +77,7 @@ class CityTest extends TestCase
$this->actingAs($this->user)
->post(route('token.city.store', [
'token' => $this->token->id,
'city' => $ids[1]
'city' => $dictionary_ids[1]
]))
->assertStatus(302);
......@@ -93,7 +90,7 @@ class CityTest extends TestCase
$this->actingAs($this->user)
->post(route('token.city.store', [
'token' => $this->token->id,
'city' => $ids[2]
'city' => $dictionary_ids[2]
]))
->assertStatus(302);
......@@ -104,12 +101,11 @@ class CityTest extends TestCase
}
$camp = $this->token->cities[0]->campaigns[0];
$this->actingAs($this->user)
->post(route('token.campaign.variable.add', [
'token' => $this->token->id,
'dictionary_id' => $this->token->cities[0]->getKey(),
'campaign_id' => $camp->id
'campaign_id' => $campaign_ids[0]
]), [
'variable' => 'add',
'name' => 'test',
......@@ -118,16 +114,17 @@ class CityTest extends TestCase
])
->assertStatus(302);
$this->assertEquals(1, Variable::count());
foreach ($this->token->cities as $city) {
foreach ($city->campaigns as $campaign) {
if ($campaign->id == $camp->id) {
if ($campaign->id == $campaign_ids[0]) {
$this->assertEquals(1, $campaign->dictionaryCampaignVariables->count());
} else {
$this->assertEquals(0, $campaign->dictionaryCampaignVariables->count());
}
foreach ($campaign->dictionaryCampaignVariables as $var) {
if ($campaign->id == $camp->id) {
if ($campaign->id == $campaign_ids[0]) {
$this->assertEquals('test_value', $var->value);
} else {
$this->assertEquals('default', $var->value);
......@@ -136,39 +133,62 @@ class CityTest extends TestCase
}
}
$campaign_new = factory(Campaigns::class)->create([
'manage' => true,
'token' => $this->token_main->getKey(),
]);
$campaign_ids[] = $campaign_new->getKey();
$this->token->load('cities.campaigns');
$this->assertEquals(3, $this->token->cities->count());
foreach ($this->token->cities as $city) {
$this->assertEquals(3, $city->campaigns->count());
}
$this->actingAs($this->user)
->post(route('token.city.store', [
'token' => $this->token2->id,
'city' => $ids[2]
]))
->post(route('token.campaign.variable.add', [
'token' => $this->token->id,
'dictionary_id' => $this->token->cities[0]->getKey(),
'campaign_id' => $campaign_ids[1]
]), [
'variable' => 'add',
'name' => 'testtwo',
'default_value' => 'default_2',
'value' => 'test_value_2'
])
->assertStatus(302);
$this->token2->load('cities.campaigns');
$this->assertEquals(1, $this->token2->cities->count());
foreach ($this->token2->cities as $city) {
$this->assertEquals(2, $city->campaigns->count());
}
$this->assertEquals(2, Variable::count());
foreach ($this->token2->cities as $city) {
foreach ($this->token->cities as $city) {
foreach ($city->campaigns as $campaign) {
$campaign->load('dictionaryCampaignVariables');
if ($campaign->id == $camp->id) {
if ($campaign->id == $campaign_ids[0] || $campaign->id == $campaign_ids[1]) {
$this->assertEquals(1, $campaign->dictionaryCampaignVariables->count());
} else {
$this->assertEquals(0, $campaign->dictionaryCampaignVariables->count());
}
foreach ($campaign->dictionaryCampaignVariables as $var) {
if ($campaign->id == $camp->id) {
$this->assertEquals(1, $campaign->dictionaryCampaignVariables->count());
if ($campaign->id == $campaign_ids[0]) {
$this->assertEquals('test_value', $var->value);
} else {
$this->assertEquals(0, $campaign->dictionaryCampaignVariables->count());
if ($var->name === 'test') {
if ($campaign->id == $campaign_ids[0]) {
$this->assertEquals('test_value', $var->value);
} else {
$this->assertEquals('default', $var->value);
}
} elseif ($var->name === 'testtwo') {
if ($campaign->id == $campaign_ids[1]) {
$this->assertEquals('test_value_2', $var->value);
} else {
$this->assertEquals('default_2', $var->value);
}
}
}
}
}
}
//TODO: еще надо дописать добавление новой РК на управление. И автоматом эта РК должна во все города добавиться и автоматом
// должна переменная добавиться.
// и для чистоты эксперимента еще и вторую перменную добавить + еще бы имена перменных проверять на всякий случай
}
}
<?php
namespace Tests\Unit;
use App\Models\Account;
use App\Models\Campaigns;
use App\Models\Dictionary;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Tokens;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class CityTest 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->token_main = factory(Tokens::class)->create([
'type' => Tokens::MAIN,
]);
$this->campaign = factory(Campaigns::class)->create([
'external_id' => 1,
'manage' => true,
'token' => $this->token_main->getKey(),
]);
$this->campaign_2 = factory(Campaigns::class)->create([
'external_id' => 2,
'manage' => false,
'token' => $this->token_main->getKey(),
]);
$this->dictionary = factory(Dictionary::class)->create([
'region_id' => 1,
'token_id' => $this->token->getKey(),
'type' => Dictionary::CITY,
]);
$this->dictionary_2 = factory(Dictionary::class)->create([
'region_id' => 2,
'type' => Dictionary::CITY,
]);
}
public function testAddCity()
{
$this->assertEquals(2, Tokens::count());
$this->assertEquals(2, Campaigns::count());
$this->assertEquals(2, Dictionary::count());
$this->token->load('cities.campaigns');
$this->assertEquals(1, $this->token->cities->count());
$this->assertEquals(0, $this->token->cities->first()->campaigns->count());
$this->token_main->load('campaignsNotForManaged');
$this->assertEquals(1, $this->token_main->campaignsForManaged->count());
$this->token_main->load('campaignsForManaged');
$this->assertEquals(1, $this->token_main->campaignsNotForManaged->count());
$this->dictionary->campaigns()->syncWithoutDetaching(
$this->token_main->campaignsForManaged->keyBy($this->token_main->campaignsForManaged->first()->getKeyName())->transform(function (Campaigns $campaign) {
return DictionaryCampaign::copyPropertyInCampaign($campaign);
})->all()
);
$this->token->load('cities.campaigns');
$this->assertEquals(1, $this->token->cities->first()->campaigns->count());
$this->token_main->campaignsNotForManaged()->first()->update([
'manage' => true,
]);
$this->token_main->load('campaignsForManaged');
$this->assertEquals(2, $this->token_main->campaignsForManaged->count());
$this->token->load('cities.campaigns');
$this->assertEquals(2, $this->token->cities->first()->campaigns->count());
$this->token_main->campaignsForManaged->first()->update([
'manage' => false,
]);
$this->token_main->load('campaignsForManaged');
$this->assertEquals(1, $this->token_main->campaignsForManaged->count());
$this->token->load('cities.campaigns');
$this->assertEquals(1, $this->token->cities->first()->campaigns->count());
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!