팀을 만든 다음 해당 팀을 게임에 추가 한 다음 해당 게임을 이벤트에 추가하려고합니다. 그러나 게임이 생성되면 자동으로 이벤트에 첨부 할 이벤트가 생성됩니다 . 정상적인 상황에서는 괜찮 았지만 첫 번째 경기가 시작된 경우와 비교하여 팀이 합류했는지 테스트 중이므로 특정 날짜의 일정을 만들어야합니다. 게임을 추가하기 위해서는 먼저 게임을 만들어야하기 때문에 이벤트를 먼저 만들 수는 없습니다.테스트가있는 Laravel 모달 팩터
내 논리를 수정하여 게임과 이벤트를 올바르게 만들 수있는 사람이 있습니까?
나는이 엣지 경우를 위해 무엇을해야하는지 모른다.
• 경우
• 팀을 추가로 게임을 추가 이벤트
• 만들기 :
/** @test */
public function a_team_with_a_game_after_they_started_the_season_cannot_have_their_joined_at_date_after_their_first_match()
{
$team = factory(Team::class)->create(['joined_at' => '2017-10-08']);
$game = GameFactory::create([], [$team]);
$event = EventFactory::create(['date' => '2017-10-09'], null, $game);
$validator = new BeforeFirstGameDate($team);
$this->assertFalse($validator->passes('joined_at', '2017-10-10'));
$this->assertEquals('The joined at date cannot be AFTER the team\'s first game.', $validator->message());
}
Factories
<?php
use App\Models\Game;
use App\Models\Team;
class GameFactory
{
public static function create($overrides = [], $teams = [])
{
$match = factory(Game::class)->create($overrides);
self::addTeamsForGame($teams, $game);
return $game;
}
/**
* @param $teams
* @param $game
*/
public static function addTeamsForGame($teams, $game)
{
$teamsForGame = [];
$numberOfTeamsToAdd = $numberOfTeams - count($teams);
if ($numberOfTeamsToAdd) {
$teamsForMatch = factory(Team::class, $numberOfTeamsToAdd)->create();
array_push($teams, $teamsForGame);
} else {
array_push($teams, $teamsForGame);
}
$match->addTeams($teamsForGame);
}
}
<?php
use App\Models\Event;
class EventFactory
{
public static function create($overrides = [], $totalNumberOfGames = 8, $games = [])
{
$event = factory(Event::class)->create($overrides);
$numberOfGamesToAdd = $totalNumberOfGames - count($games);
$gameToStartAt = count($games) + 1;
foreach (array_wrap($games) as $game) {
$game->addToEvent($event);
}
for ($gameNumber = $gameToStartAt; $gameNumber <= $numberOfGamesToAdd; $gameNumber++) {
GameFactory::create(['event_id' => $event->id, 'game_number' => $gameNumber]);
}
return $event;
}
}
$factory->define(App\Models\Game::class, function (Faker\Generator $faker) {
static $order = 1;
return [
'event_id' => function() {
return factory(App\Models\Event::class)->create()->id;
},
'game_number' => $order++,
];
});
$factory->define(App\Models\Event::class, function (Faker\Generator $faker) {
$name = $faker->sentence;
return [
'name' => $name,
'slug' => str_slug($name),
'date' => $faker->dateTimeBetween('-10 years'),
];
});
내가 먼저 이벤트를 만들 경우 그때 이벤트에 추가로에 전달하기 위해 만든 게임을하지 않을 것입니다. – user3732216
앱의 워크 플로 란 무엇입니까? –
이벤트가 생성되면 팀은 이벤트에 할당 된 게임에 할당됩니다. – user3732216