Commit a46b84a8 by Vladislav

#19461 Страница настройки целевых аккаунтов.

1 parent 97f72362
......@@ -16,3 +16,4 @@ npm-debug.log
yarn-error.log
/.idea
_ide_helper.php
.phpstorm.meta.php
......@@ -3,6 +3,8 @@
namespace App\Http\Controllers;
use App\Models\Campaigns;
use App\Models\Dictionary;
use App\Models\Pivots\DictionaryCampaignPivot;
use App\Models\Tokens;
use App\Models\Variable;
use Illuminate\Support\Facades\Redirect;
......@@ -17,17 +19,27 @@ class CampaignVariablesController extends Controller
protected $rule_default_value = 'required';
protected $rule_value = '';
function __invoke(Tokens $token, $campaign_id)
function __invoke(Tokens $token, $dictionary_id, $campaign_id)
{
if ($token->isMain()) {
return Redirect::back();
}
$campaign = Tokens::where('type', Tokens::MAIN)->get()->first()->campaignsForManaged()->with('variables')->find($campaign_id);
$campaign = Tokens::where('type', Tokens::MAIN)->first()
->campaignsForManaged()->find($campaign_id);
if (!$campaign) {
return Redirect::back();
};
}
$dictionary = $token->cities()->find($dictionary_id);
if (!$dictionary) {
return Redirect::back();
}
$dictionary_campaign = DictionaryCampaignPivot::where('campaign_id', $campaign->getKey())
->where('dictionary_id', $dictionary->getKey())->first();
switch (request()->method()) {
case 'GET':
......@@ -35,14 +47,14 @@ class CampaignVariablesController extends Controller
$variables = Variable::defaultOrderBy()->get();
return Inertia::render('CampaignVariables/Edit', [
'variables' => $variables->transform(function (Variable $variable) use ($campaign) {
'variables' => $variables->transform(function (Variable $variable) use ($dictionary_campaign) {
$data = $variable->toArray();
$data['campaign'] = $variable->campaigns()
->where('campaign_id', $campaign->getKey())->first();
$data['dictionaryCampaign'] = $variable->values()->where('dictionary_campaign_id', $dictionary_campaign->getKey())->first();
return $data;
}),
'token' => $token,
'campaign' => $campaign,
'dictionary' => $dictionary,
]);
case 'POST':
......@@ -67,7 +79,7 @@ class CampaignVariablesController extends Controller
$value = request('value');
}
$this->putCampaignVariableValue($campaign, $variable_id, $value);
$this->putCampaignVariableValue($dictionary_campaign, $variable_id, $value);
return Redirect::back()->with('success', 'Campaign variable added.');
break;
......@@ -78,7 +90,7 @@ class CampaignVariablesController extends Controller
'value' => $this->rule_value
]);
$this->putCampaignVariableValue($campaign, request('id'), request('value'));
$this->putCampaignVariableValue($dictionary_campaign, request('id'), request('value'));
return Redirect::back()->with('success', 'Campaign variable updated.');
break;
......@@ -105,7 +117,7 @@ class CampaignVariablesController extends Controller
return Redirect::back();
}
public function destroy(Tokens $token, $campaign_id, $variable_id)
public function destroy(Tokens $token, $dictionary_id, $campaign_id, $variable_id)
{
if ($token->isMain()) {
return Redirect::back();
......@@ -123,19 +135,19 @@ class CampaignVariablesController extends Controller
}
/**
* @param Campaigns $campaign
* @param DictionaryCampaignPivot $dictionary_campaign
* @param integer $variable_id
* @param string|null $value
*/
private function putCampaignVariableValue(Campaigns $campaign, $variable_id, $value = null)
private function putCampaignVariableValue($dictionary_campaign, $variable_id, $value = null)
{
if (is_null($value)) {
$campaign->variables()->detach($variable_id);
$dictionary_campaign->dictionaryCampaignVariables()->where('variable_id', $variable_id)
->delete();
} else {
$campaign->variables()->syncWithoutDetaching([
$variable_id => [
'value' => $value,
],
$dictionary_campaign->dictionaryCampaignVariables()->create([
'variable_id' => $variable_id,
'value' => $value,
]);
}
}
......
......@@ -4,12 +4,10 @@ namespace App\Http\Controllers;
use App\Models\Campaigns;
use App\Models\Dictionary;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\DictionaryCampaignPivot;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redirect;
......@@ -39,7 +37,7 @@ class TokensController extends Controller
function edit(Tokens $token)
{
$mainToken = Tokens::where('type', Tokens::MAIN)->get()->first();
$mainToken = Tokens::where('type', Tokens::MAIN)->first();
return Inertia::render('Tokens/Edit', [
'token' => [
'id' => $token->getKey(),
......@@ -171,7 +169,7 @@ class TokensController extends Controller
if ($token_main->campaignsForManaged->count()) {
$city->campaigns()->syncWithoutDetaching(
$token_main->campaignsForManaged->keyBy($token_main->campaignsForManaged->first()->getKeyName())->transform(function (Campaigns $campaign) {
return DictionaryCampaign::copyPropertyInCampaign($campaign);
return DictionaryCampaignPivot::copyPropertyInCampaign($campaign);
})->all()
);
}
......
......@@ -2,8 +2,8 @@
namespace App\Models;
use App\Models\Pivots\CampaignVariable;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\DictionaryCampaignVariablePivot;
use App\Models\Pivots\DictionaryCampaignPivot;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
......@@ -37,8 +37,8 @@ use Illuminate\Database\Eloquent\Model;
* @property-read int|null $dictionaries_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\AdGroup[] $groups
* @property-read int|null $groups_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Variable[] $variables
* @property-read int|null $variables_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Variable[] $dictionaryCampaignVariables
* @property-read int|null $dictionaryCampaignVariables_count
* @method static \Illuminate\Database\Eloquent\Builder|Campaigns forEnabled()
* @method static \Illuminate\Database\Eloquent\Builder|Campaigns forGroupsLoadable()
* @method static \Illuminate\Database\Eloquent\Builder|Campaigns forManaged()
......@@ -115,12 +115,11 @@ class Campaigns extends Model
if ($campaign->manage) {
Dictionary::whereNotNull('token_id')->each(function (Dictionary $dictionary) use ($campaign) {
$campaign->dictionaries()->syncWithoutDetaching([
$dictionary->getKey() => DictionaryCampaign::copyPropertyInCampaign($campaign),
$dictionary->getKey() => DictionaryCampaignPivot::copyPropertyInCampaign($campaign),
]);
});
} else {
$campaign->dictionaries()->detach();
//$campaign->variables()->detach();
}
}
});
......@@ -129,7 +128,6 @@ class Campaigns extends Model
static::deleting(function(Campaigns $campaign_delete)
{
$campaign_delete->dictionaries()->detach();
$campaign_delete->variables()->detach();
$campaign_delete->groups()->delete();
});
*/
......@@ -140,19 +138,16 @@ class Campaigns extends Model
return $this->hasMany(AdGroup::class, 'campaign_id');
}
public function variables()
public function dictionaryCampaignVariables()
{
return $this->belongsToMany(Variable::class, 'campaign_variables', 'campaign_id', 'variable_id')
->using(CampaignVariable::class)
->withPivot(CampaignVariable::getWithPivot())
->withTimestamps();
return $this->hasManyThrough(DictionaryCampaignVariablePivot::class, DictionaryCampaignPivot::class, 'campaign_id', 'dictionary_campaign_id');
}
public function dictionaries()
{
return $this->belongsToMany(Dictionary::class, 'dictionary_campaigns', 'campaign_id', 'dictionary_id')
->using(DictionaryCampaign::class)
->withPivot(DictionaryCampaign::getWithPivot())
->using(DictionaryCampaignPivot::class)
->withPivot(DictionaryCampaignPivot::getWithPivot())
->withTimestamps();
}
......
......@@ -2,7 +2,8 @@
namespace App\Models;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\DictionaryCampaignPivot;
use App\Models\Pivots\DictionaryCampaignVariablePivot;
use Illuminate\Database\Eloquent\Builder;
/**
......@@ -20,6 +21,8 @@ use Illuminate\Database\Eloquent\Builder;
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Campaigns[] $campaigns
* @property-read int|null $campaigns_count
* @property-read \App\Models\Tokens|null $token
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Variable[] $variables
* @property-read int|null $variables_count
* @method static Builder|Dictionary defaultOrderBy()
* @method static Builder|Dictionary newModelQuery()
* @method static Builder|Dictionary newQuery()
......@@ -60,8 +63,8 @@ class Dictionary extends Model
public function campaigns()
{
return $this->belongsToMany(Campaigns::class, 'dictionary_campaigns', 'dictionary_id', 'campaign_id')
->using(DictionaryCampaign::class)
->withPivot(DictionaryCampaign::getWithPivot())
->using(DictionaryCampaignPivot::class)
->withPivot(DictionaryCampaignPivot::getWithPivot())
->withTimestamps();
}
......
......@@ -4,21 +4,46 @@ namespace App\Models\Pivots;
use App\Models\Campaigns;
use App\Models\Dictionary;
use App\Models\Variable;
use Illuminate\Database\Eloquent\Relations\Pivot;
/**
* App\Models\Pivots\DictionaryCampaign
* App\Models\Pivots\DictionaryCampaignPivot
*
* @property-read Campaigns $campaign
* @property-read Dictionary $dictionary
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign query()
* @property-read DictionaryCampaignVariablePivot[] $dictionaryCampaignVariables
* @property-read Variable[] $variables
* @mixin \Eloquent
* @property int $id
* @property int $campaign_id
* @property int $dictionary_id
* @property string|null $name
* @property string|null $negative_keywords
* @property string|null $excluded_sites
* @property int $updated
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read int|null $dictionary_campaign_variables_count
* @property-read int|null $variables_count
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot query()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot whereCampaignId($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot whereDictionaryId($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot whereExcludedSites($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot whereNegativeKeywords($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot whereUpdated($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignPivot whereUpdatedAt($value)
*/
class DictionaryCampaign extends Pivot
class DictionaryCampaignPivot extends Pivot
{
protected $table = 'dictionary_campaigns';
protected $fillable = [
'campaign_id',
'dictionary_id',
......@@ -69,4 +94,17 @@ class DictionaryCampaign extends Pivot
return $this->belongsTo(Campaigns::class, 'campaign_id');
}
public function dictionaryCampaignVariables()
{
return $this->hasMany(DictionaryCampaignVariablePivot::class, 'dictionary_campaign_id');
}
public function variables()
{
return $this->belongsToMany(Variable::class, 'dictionary_campaign_variables', 'dictionary_campaign_id', 'variable_id')
->using(DictionaryCampaignVariablePivot::class)
->withPivot(DictionaryCampaignVariablePivot::getWithPivot())
->withTimestamps();
}
}
......@@ -7,25 +7,40 @@ use App\Models\Variable;
use Illuminate\Database\Eloquent\Relations\Pivot;
/**
* App\Models\Pivots\CampaignVariable
* App\Models\Pivots\DictionaryCampaignVariablePivot
*
* @property-read Campaigns $campaign
* @property-read Campaigns $dictionary_campaign
* @property-read Variable $variable
* @method static \Illuminate\Database\Eloquent\Builder|CampaignVariable newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|CampaignVariable newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|CampaignVariable query()
* @mixin \Eloquent
* @property int $id
* @property int $dictionary_campaign_id
* @property int $variable_id
* @property string $value
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignVariablePivot newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignVariablePivot newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignVariablePivot query()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignVariablePivot whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignVariablePivot whereDictionaryCampaignId($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignVariablePivot whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignVariablePivot whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignVariablePivot whereValue($value)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaignVariablePivot whereVariableId($value)
*/
class CampaignVariable extends Pivot
class DictionaryCampaignVariablePivot extends Pivot
{
protected $table = 'dictionary_campaign_variables';
protected $fillable = [
'campaign_id',
'dictionary_campaign_id',
'variable_id',
'value',
];
protected $casts = [
'campaign_id' => 'int',
'dictionary_campaign_id' => 'int',
'variable_id' => 'int',
];
......@@ -36,13 +51,14 @@ class CampaignVariable extends Pivot
];
}
public function campaign()
public function dictionary_campaign()
{
return $this->belongsTo(Campaigns::class, 'campaign_id');
return $this->belongsTo(DictionaryCampaignPivot::class, 'dictionary_campaign_id');
}
public function variable()
{
return $this->belongsTo(Variable::class, 'variable_id');
}
}
......@@ -21,6 +21,10 @@ use Illuminate\Database\Eloquent\Model;
* @property-read int|null $campaigns_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Dictionary[] $cities
* @property-read int|null $cities_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Dictionary[] $campaignsForManaged
* @property-read int|null $campaignsForManaged_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Dictionary[] $campaignsNotForManaged
* @property-read int|null $campaignsNotForManaged_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Limits[] $limits
* @property-read int|null $limits_count
* @method static \Illuminate\Database\Eloquent\Builder|Tokens filter(array $filters)
......
......@@ -2,7 +2,7 @@
namespace App\Models;
use App\Models\Pivots\CampaignVariable;
use App\Models\Pivots\DictionaryCampaignVariablePivot;
use Illuminate\Database\Eloquent\Builder;
/**
......@@ -15,6 +15,8 @@ use Illuminate\Database\Eloquent\Builder;
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Campaigns[] $campaigns
* @property-read int|null $campaigns_count
* @property-read \Illuminate\Database\Eloquent\Collection|DictionaryCampaignVariablePivot[] $values
* @property-read int|null $values_count
* @method static Builder|Variable defaultOrderBy()
* @method static Builder|Variable newModelQuery()
* @method static Builder|Variable newQuery()
......@@ -22,6 +24,7 @@ use Illuminate\Database\Eloquent\Builder;
* @method static Builder|Variable whereCreatedAt($value)
* @method static Builder|Variable whereId($value)
* @method static Builder|Variable whereName($value)
* @method static Builder|Variable whereDefaultValue($value)
* @method static Builder|Variable whereUpdatedAt($value)
* @mixin \Eloquent
*/
......@@ -37,12 +40,9 @@ class Variable extends Model
return $query->orderBy('name');
}
public function campaigns()
public function values()
{
return $this->belongsToMany(Campaigns::class, 'campaign_variables', 'variable_id', 'campaign_id')
->using(CampaignVariable::class)
->withPivot(CampaignVariable::getWithPivot())
->withTimestamps();
return $this->hasMany(DictionaryCampaignVariablePivot::class, 'variable_id');
}
}
......@@ -5,6 +5,6 @@ use Faker\Generator as Faker;
$factory->define(App\Models\Campaigns::class, function (Faker $faker) {
return [
'name' => $faker->name,
'external_id' => $faker->randomNumber()
'external_id' => $faker->unique()->randomNumber()
];
});
......@@ -5,6 +5,6 @@ use Faker\Generator as Faker;
$factory->define(App\Models\Dictionary::class, function (Faker $faker) {
return [
'name' => $faker->name,
'region_id' => $faker->unique()->randomNumber()
'region_id' => $faker->unique()->randomNumber()
];
});
......@@ -25,9 +25,9 @@ class CreateDictionaryCampaignsTable extends Migration
$table->foreign('campaign_id')->references('id')->on('campaigns')
->onDelete("cascade");
->cascadeOnDelete();
$table->foreign('dictionary_id')->references('id')->on('dictionaries')
->onDelete("cascade");
->cascadeOnDelete();
});
}
......
......@@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCampaignVariablesTable extends Migration
class CreateDictionaryCampaignVariablesTable extends Migration
{
/**
* Run the migrations.
......@@ -13,15 +13,15 @@ class CreateCampaignVariablesTable extends Migration
*/
public function up()
{
Schema::create('campaign_variables', function (Blueprint $table) {
Schema::create('dictionary_campaign_variables', function (Blueprint $table) {
$table->id();
$table->bigInteger('campaign_id')->unsigned();
$table->bigInteger('dictionary_campaign_id')->unsigned();
$table->bigInteger('variable_id')->unsigned();
$table->string('value', 255);
$table->timestamps();
$table->foreign('campaign_id')->references('id')->on('campaigns')
$table->foreign('dictionary_campaign_id')->references('id')->on('dictionary_campaigns')
->cascadeOnDelete();
$table->foreign('variable_id')->references('id')->on('variables')
->cascadeOnDelete();
......@@ -35,6 +35,6 @@ class CreateCampaignVariablesTable extends Migration
*/
public function down()
{
Schema::dropIfExists('campaign_variables');
Schema::dropIfExists('dictionary_campaign_variables');
}
}
......@@ -9,6 +9,8 @@
{{ token.login }}
</inertia-link>
<span class="text-indigo-400 font-medium">/</span>
{{ dictionary.name }}
<span class="text-indigo-400 font-medium">/</span>
{{ campaign.name }}
</h1>
<div class="mb-6 flex justify-between items-center">
......@@ -113,15 +115,15 @@
@click="edit(variable.id, [
{
name: 'value',
val: !variable.campaign
val: !variable.dictionaryCampaign
? ''
: variable.campaign.pivot.value,
: variable.dictionaryCampaign.value,
},
])"
>
{{ !variable.campaign
{{ !variable.dictionaryCampaign
? variable.default_value
: variable.campaign.pivot.value }}
: variable.dictionaryCampaign.value }}
</div>
<div v-else class="inline-flex">
<text-input v-model="inputs[variable.id].value.val"
......@@ -184,6 +186,7 @@
props: {
token: Object,
variables: Array,
dictionary: Object,
campaign: Object,
errors: Object,
},
......@@ -199,7 +202,7 @@
watch: {},
methods: {
add() {
this.$inertia.post(this.route('token.campaign.variables', [this.token.id, this.campaign.id]), {
this.$inertia.post(this.route('token.campaign.variables', [this.token.id, this.dictionary.id, this.campaign.id]), {
variable: this.variable,
default_value: this.default_value,
name: this.name,
......@@ -250,11 +253,11 @@
this.editCancel(campaign_var_id, name);
});
this.$inertia[method](this.route('token.campaign.variables', [this.token.id, this.campaign.id]), data);
this.$inertia[method](this.route('token.campaign.variables', [this.token.id, this.dictionary.id, this.campaign.id]), data);
},
destroy(campaign_var_id) {
if (confirm('Are you sure you want to delete this campaign var?')) {
this.$inertia.delete(this.route('token.campaign.variable.destroy', [this.token.id, this.campaign.id, campaign_var_id]));
this.$inertia.delete(this.route('token.campaign.variable.destroy', [this.token.id, this.dictionary.id, this.campaign.id, campaign_var_id]));
}
},
},
......
......@@ -58,12 +58,12 @@
<th class="px-6 pt-6 pb-4">Синхронизировать?</th>
<th></th>
</tr>
<tr v-if="city.campaigns.length" :key="campaign.id" v-for="campaign in city.campaigns">
<tr v-if="city.campaigns.length" :key="campaign.pivot.id" v-for="campaign in city.campaigns">
<td class="border-t"></td>
<td class="border-t">
<span class="px-6 py-4 flex items-center focus:text-indigo-500">
<inertia-link class="hover:text-indigo-500 focus:text-indigo-500"
:href="route('token.campaign.variables', [token.id, campaign.id])"
:href="route('token.campaign.variables', [token.id, city.id, campaign.id])"
>
{{ campaign.pivot.name }}
</inertia-link>
......
......@@ -181,10 +181,10 @@ Route::post('token/campaigns/enabled/{token}/{campaign_id}', [TokensController::
->name('token.campaign.enabled')
->middleware('auth');
Route::any('token/campaigns/vars/{token}/{campaign_id}', CampaignVariablesController::class)
Route::any('token/campaigns/vars/{token}/{dictionary_id}/{campaign_id}', CampaignVariablesController::class)
->name('token.campaign.variables')
->middleware('auth');
Route::delete('token/campaigns/vars/{token}/{campaign_id}/{variable_id}', [CampaignVariablesController::class, 'destroy'])
Route::delete('token/campaigns/vars/{token}/{dictionary_id}/{campaign_id}/{variable_id}', [CampaignVariablesController::class, 'destroy'])
->name('token.campaign.variable.destroy')
->middleware('auth');
......
......@@ -60,70 +60,77 @@ class CityTest extends TestCase
]);
}
public function test_add_city_and_variables(){
public function test_add_city_and_variables()
{
$ids = Dictionary::all()->pluck('id');
$this->actingAs($this->user)
->post(route('token.city.store', [
'token' => $this->token->id,
'city' => $ids[0]
'token' => $this->token->id,
'city' => $ids[0]
]))
->assertStatus(302);
$this->token->load('cities.campaigns');
$this->assertEquals($this->token->cities->count(), 1);
foreach ($this->token->cities as $city){
$this->assertEquals($city->campaigns->count(), 2);
$this->assertEquals(1, $this->token->cities->count());
foreach ($this->token->cities as $city) {
$this->assertEquals(2, $city->campaigns->count());
}
$this->actingAs($this->user)
->post(route('token.city.store', [
'token' => $this->token->id,
'city' => $ids[1]
'token' => $this->token->id,
'city' => $ids[1]
]))
->assertStatus(302);
$this->token->load('cities.campaigns');
$this->assertEquals($this->token->cities->count(), 2);
foreach ($this->token->cities as $city){
$this->assertEquals($city->campaigns->count(), 2);
$this->assertEquals(2, $this->token->cities->count());
foreach ($this->token->cities as $city) {
$this->assertEquals(2, $city->campaigns->count());
}
$this->actingAs($this->user)
->post(route('token.city.store', [
'token' => $this->token->id,
'city' => $ids[2]
'token' => $this->token->id,
'city' => $ids[2]
]))
->assertStatus(302);
$this->token->load('cities.campaigns');
$this->assertEquals($this->token->cities->count(), 3);
foreach ($this->token->cities as $city){
$this->assertEquals($city->campaigns->count(), 2);
$this->assertEquals(3, $this->token->cities->count());
foreach ($this->token->cities as $city) {
$this->assertEquals(2, $city->campaigns->count());
}
$camp = $this->token->cities[0]->campaigns[0];
$this->actingAs($this->user)
->post(route('token.campaign.variables', [
'token' => $this->token->id,
'campaign_id' => $camp->id
]),[
'variable' => 'add',
'name' => 'test',
'default_value' => 'default',
'value' => 'test_value'
'token' => $this->token->id,
'dictionary_id' => $this->token->cities[0]->getKey(),
'campaign_id' => $camp->id
]), [
'variable' => 'add',
'name' => 'test',
'default_value' => 'default',
'value' => 'test_value'
])
->assertStatus(302);
foreach ($this->token->cities as $city){
foreach ($city->campaigns as $campaign){
$this->assertEquals($campaign->variables->count(), 1);
foreach ($campaign->variables as $var){
if ($campaign->id==$camp->id){
$this->assertEquals($var->value, 'test_value');
foreach ($this->token->cities as $city) {
foreach ($city->campaigns as $campaign) {
if ($campaign->id == $camp->id) {
$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('test_value', $var->value);
} else {
$this->assertEquals($var->value, 'default');
$this->assertEquals('default', $var->value);
}
}
}
......@@ -131,22 +138,31 @@ class CityTest extends TestCase
$this->actingAs($this->user)
->post(route('token.city.store', [
'token' => $this->token2->id,
'city' => $ids[2]
'token' => $this->token2->id,
'city' => $ids[2]
]))
->assertStatus(302);
$this->token2->load('cities.campaigns');
$this->assertEquals($this->token2->cities->count(), 1);
foreach ($this->token2->cities as $city){
$this->assertEquals($city->campaigns->count(), 2);
$this->assertEquals(1, $this->token2->cities->count());
foreach ($this->token2->cities as $city) {
$this->assertEquals(2, $city->campaigns->count());
}
foreach ($this->token2->cities as $city){
foreach ($city->campaigns as $campaign){
$this->assertEquals($campaign->variables->count(), 1);
foreach ($campaign->variables as $var){
$this->assertEquals($var->value, 'default');
foreach ($this->token2->cities as $city) {
foreach ($city->campaigns as $campaign) {
$campaign->load('dictionaryCampaignVariables');
if ($campaign->id == $camp->id) {
$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());
} else {
$this->assertEquals(0, $campaign->dictionaryCampaignVariables->count());
}
}
}
}
......
......@@ -5,7 +5,7 @@ namespace Tests\Unit;
use App\Models\Account;
use App\Models\Campaigns;
use App\Models\Dictionary;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\DictionaryCampaignPivot;
use App\Models\Tokens;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
......@@ -81,7 +81,7 @@ class CityTest extends TestCase
$this->dictionary->campaigns()->syncWithoutDetaching(
$this->token_main->campaignsForManaged->keyBy($this->token_main->campaignsForManaged->first()->getKeyName())->transform(function (Campaigns $campaign) {
return DictionaryCampaign::copyPropertyInCampaign($campaign);
return DictionaryCampaignPivot::copyPropertyInCampaign($campaign);
})->all()
);
......
......@@ -4,6 +4,9 @@ namespace Tests\Unit;
use App\Models\Account;
use App\Models\Campaigns;
use App\Models\Dictionary;
use App\Models\Pivots\DictionaryCampaignPivot;
use App\Models\Pivots\DictionaryCampaignVariablePivot;
use App\Models\Tokens;
use App\Models\User;
use App\Models\Variable;
......@@ -29,52 +32,68 @@ class ReplaceByVariablesTest extends TestCase
'owner' => true,
]);
$this->token_main = factory(Tokens::class)->create([
'type' => Tokens::MAIN,
'created_by' => $this->user->getKey()
]);
$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,
'token' => $this->token_main,
]);
$this->dictionary = factory(Dictionary::class)->create([
'token_id' => $this->token,
'type' => Dictionary::CITY,
]);
$this->dictionary->campaigns()->syncWithoutDetaching(
$this->token_main->campaignsForManaged->keyBy($this->token_main->campaignsForManaged->first()->getKeyName())->transform(function (Campaigns $campaign) {
return DictionaryCampaignPivot::copyPropertyInCampaign($campaign);
})->all()
);
$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',
]);
$this->dictionaryCampaign = DictionaryCampaignPivot::first();
$this->dictionaryCampaign->dictionaryCampaignVariables()->create([
'variable_id' => $this->variable->getKey(),
'value' => 'custom var value',
]);
}
public function testReplaceByVariables()
{
$this->assertEquals(1, Tokens::count());
$this->assertEquals(2, Tokens::count());
$this->assertEquals(1, Campaigns::count());
$this->assertEquals(2, Variable::count());
$this->assertEquals(1, $this->campaign->variables->count());
$this->assertEquals(1, $this->campaign->dictionaryCampaignVariables->count());
$variable_list = [];
foreach (Variable::all() as $variable) {
$campaign = $variable->campaigns()
->where('campaign_id', $this->campaign->getKey())
$dictionaryCampaignVariable = $variable->values()
->where('dictionary_campaign_id', $this->dictionaryCampaign->getKey())
->first();
$value = (
$campaign
? $campaign->pivot->value
$dictionaryCampaignVariable
? $dictionaryCampaignVariable->value
: $variable->default_value
);
......@@ -84,6 +103,5 @@ class ReplaceByVariablesTest extends TestCase
$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());
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!